/* WAVE7 网页安装向导 · 独立样式（无外部依赖） */
:root { --i-blue:#1f6feb; --i-blue-d:#1557c0; --i-bg:#eef3fb; --i-text:#1e2b3d; --i-muted:#69788b; --i-border:#dde5f0; --i-ok:#18a058; --i-warn:#d98b00; --i-fail:#d03050; --i-radius:10px; }
* { box-sizing:border-box; }
html,body { margin:0; padding:0; }
body { min-height:100vh; background:linear-gradient(135deg,#eaf1fc 0%,#f6f9ff 42%,#e8f0fd 100%); color:var(--i-text); font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif; font-size:14px; line-height:1.6; }
a { color:var(--i-blue); text-decoration:none; }
.install-page, .install-shell { max-width:1080px; margin:0 auto; padding:28px 18px 40px; }
.install-head { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:20px; }
.install-brand { display:flex; align-items:center; gap:10px; }
.install-brand-mark { width:38px; height:38px; border-radius:10px; background:linear-gradient(135deg,#3b82f6,#1f6feb); color:#fff; display:flex; align-items:center; justify-content:center; font-weight:700; }
.install-brand b { display:block; font-size:15px; } .install-brand em { display:block; font-style:normal; font-size:10px; color:var(--i-muted); }
.install-version { font-size:11px; color:var(--i-muted); border:1px solid var(--i-border); padding:3px 8px; border-radius:10px; background:#fff; }
.install-steps { display:flex; align-items:center; gap:8px; margin:0 0 18px; }
.install-step { display:flex; align-items:center; gap:7px; color:var(--i-muted); font-size:12px; white-space:nowrap; }
.install-step span { width:24px; height:24px; border-radius:50%; background:#fff; border:1px solid var(--i-border); display:flex; align-items:center; justify-content:center; font-size:11px; color:var(--i-muted); }
.install-step.is-active { color:var(--i-blue); font-weight:600; }
.install-step.is-active span { background:var(--i-blue); border-color:var(--i-blue); color:#fff; }
.install-step.is-done { color:var(--i-ok); } .install-step.is-done span { background:#e8f8ef; border-color:#bce7ce; color:var(--i-ok); }
.install-step-line { flex:1; height:1px; background:var(--i-border); }
.install-card { background:#fff; border:1px solid var(--i-border); border-radius:14px; box-shadow:0 12px 36px rgba(22,54,100,.08); padding:26px 28px; }
.install-card-head h1 { margin:0 0 4px; font-size:23px; } .install-card-head p { margin:0 0 18px; color:var(--i-muted); font-size:12px; }
.install-checks { list-style:none; margin:0; padding:0; border:1px solid var(--i-border); border-radius:9px; overflow:hidden; }
.install-check { display:flex; align-items:flex-start; gap:10px; padding:10px 14px; border-bottom:1px solid #eef2f8; font-size:12px; }
.install-check:last-child { border-bottom:0; }
.install-check:nth-child(odd) { background:#fbfcfe; }
.install-check-icon { width:20px; height:20px; border-radius:50%; flex:0 0 20px; display:flex; align-items:center; justify-content:center; color:#fff; background:var(--i-ok); font-size:12px; }
.install-check.is-warn .install-check-icon { background:var(--i-warn); } .install-check.is-fail .install-check-icon { background:var(--i-fail); }
.install-check > div { flex:1; min-width:0; } .install-check b { display:block; font-size:12px; } .install-check p { margin:1px 0 0; color:var(--i-muted); font-size:11px; }
.install-check em { display:block; font-style:normal; color:var(--i-warn); font-size:11px; margin-top:2px; }
.install-check-status { font-size:11px; color:var(--i-ok); white-space:nowrap; } .is-warn .install-check-status { color:var(--i-warn); } .is-fail .install-check-status { color:var(--i-fail); }
.install-form { margin-top:4px; }
.install-field { display:flex; flex-direction:column; gap:5px; margin-bottom:14px; font-size:12px; }
.install-field > span { color:#45566d; font-size:11px; }
.install-field input { height:40px; border:1px solid #d6e0ee; border-radius:7px; padding:0 11px; font:inherit; color:var(--i-text); background:#fff; outline:none; }
.install-field input:focus { border-color:#8bb8f8; box-shadow:0 0 0 3px rgba(31,111,235,.1); }
.install-grid-2 { display:grid; grid-template-columns:1fr 1fr; gap:0 16px; }
.install-password { display:flex; gap:6px; } .install-password input { flex:1; min-width:0; }
.install-password button { border:1px solid #cfe0f7; background:#eef5ff; color:var(--i-blue); border-radius:7px; padding:0 10px; font-size:11px; cursor:pointer; }
.install-strength { font-style:normal; font-size:10px; color:var(--i-muted); } .install-strength.is-good { color:var(--i-ok); } .install-strength.is-bad { color:var(--i-fail); }
.install-switch { display:flex; align-items:flex-start; gap:10px; padding:12px; border:1px solid var(--i-border); border-radius:8px; background:#fbfcfe; margin:4px 0 18px; cursor:pointer; }
.install-switch input { margin-top:3px; } .install-switch b { display:block; font-size:12px; } .install-switch em { display:block; font-style:normal; color:var(--i-muted); font-size:11px; }
.install-actions { display:flex; flex-wrap:wrap; gap:10px; align-items:center; margin-top:18px; }
.install-btn { display:inline-flex; align-items:center; justify-content:center; min-height:38px; padding:0 16px; border:1px solid #d6e0ee; border-radius:7px; background:#fff; color:#40536b; font-size:13px; cursor:pointer; }
.install-btn:hover { border-color:#a9c8f5; color:var(--i-blue); }
.install-btn.is-primary { background:var(--i-blue); border-color:var(--i-blue); color:#fff; }
.install-btn.is-primary:hover { background:var(--i-blue-d); color:#fff; }
.install-btn.is-disabled { opacity:.45; pointer-events:none; }
.install-alert { margin-top:14px; padding:10px 12px; border-radius:7px; font-size:12px; line-height:1.8; }
.install-alert.is-danger { background:#fdecef; color:#a5263d; border:1px solid #f6d1d9; }
.install-alert.is-warning { background:#fff7e6; color:#8b5c00; border:1px solid #f5e2b9; }
.install-note { margin-top:12px; font-size:11px; color:var(--i-muted); }
.install-progress { display:flex; align-items:center; gap:10px; margin:6px 0 12px; font-size:12px; color:var(--i-muted); }
.install-progress-bar { flex:1; height:8px; border-radius:4px; background:#eef3f9; overflow:hidden; }
.install-progress-bar i { display:block; width:0; height:100%; background:linear-gradient(90deg,#3b82f6,#1f6feb); transition:width .35s ease; }
.install-results { list-style:none; margin:0; padding:0; border:1px solid var(--i-border); border-radius:9px; overflow:hidden; }
.install-results li { display:flex; align-items:center; gap:10px; padding:10px 14px; border-bottom:1px solid #eef2f8; font-size:12px; }
.install-results li:last-child { border-bottom:0; } .install-results li span { width:20px; text-align:center; color:var(--i-muted); }
.install-results li b { display:block; } .install-results li em { font-style:normal; color:var(--i-muted); font-size:11px; }
.install-results li.is-ok span { color:var(--i-ok); } .install-results li.is-fail span { color:var(--i-fail); }
.install-done { display:flex; align-items:center; gap:14px; margin-bottom:16px; }
.install-big-icon { width:54px; height:54px; border-radius:50%; background:#e8f8ef; color:var(--i-ok); display:flex; align-items:center; justify-content:center; font-size:28px; flex:0 0 54px; }
.install-done h1 { margin:0 0 3px; font-size:23px; } .install-done p { margin:0; color:var(--i-muted); font-size:12px; }
.install-result-box { border:1px solid var(--i-border); border-radius:9px; overflow:hidden; margin-bottom:14px; }
.install-result-box > div { display:flex; justify-content:space-between; gap:14px; padding:10px 14px; border-bottom:1px solid #eef2f8; font-size:12px; }
.install-result-box > div:last-child { border-bottom:0; } .install-result-box span { color:var(--i-muted); }
.install-result-box b { font-weight:500; text-align:right; word-break:break-all; }
.install-once em { font-style:normal; color:var(--i-warn); font-size:11px; }
.install-installed { max-width:560px; margin:64px auto; text-align:center; }
.install-installed h1 { margin:12px 0 6px; } .install-installed p { color:var(--i-muted); font-size:12px; }
.install-installed .install-big-icon { margin:0 auto; }
.install-code { display:inline-block; text-align:left; background:#f7f9fc; border:1px solid var(--i-border); border-radius:7px; padding:9px 12px; margin:12px 0; font-family:Consolas,Monaco,monospace; font-size:11px; color:#45566d; }
.install-installed .install-note { margin:8px 0 16px; }
.install-foot { text-align:center; color:#8a98aa; font-size:11px; padding:20px 0 4px; }
@media (max-width:640px) {
  .install-page, .install-shell { padding:16px 12px 28px; }
  .install-card { padding:20px 16px; }
  .install-card-head h1 { font-size:19px; }
  .install-grid-2 { grid-template-columns:1fr; gap:0; }
  .install-step em { display:none; }
  .install-step.is-active em { display:inline; }
  .install-steps { gap:4px; }
  .install-step span { width:22px; height:22px; }
  .install-check-status { display:none; }
  .install-result-box > div { flex-direction:column; gap:1px; }
  .install-result-box b { text-align:left; }
  .install-done { align-items:flex-start; }
  .install-big-icon { width:44px; height:44px; flex-basis:44px; font-size:23px; }
}

/* 兼容 installer.php 输出的轻量标记，使向导视觉与本文件统一 */
.install-body .wrap { max-width:1080px; margin:0 auto; padding:28px 18px 40px; }
.install-body .card { background:#fff; border:1px solid var(--i-border); border-radius:14px; box-shadow:0 12px 36px rgba(22,54,100,.08); padding:26px 28px; }
.install-body .step { display:flex; align-items:center; gap:8px; margin:0 0 18px; }
.install-body .step span { flex:1; padding:9px 8px; border-radius:7px; background:#fff; border:1px solid var(--i-border); color:var(--i-muted); font-size:12px; text-align:center; }
.install-body .step span.on { background:var(--i-blue); border-color:var(--i-blue); color:#fff; font-weight:600; }
.install-body h1 { font-size:23px; margin:0 0 6px; }
.install-body .muted { color:var(--i-muted); font-size:12px; }
.install-body label { display:block; margin:12px 0 5px; font-weight:500; font-size:12px; color:#45566d; }
.install-body input[type=text], .install-body input[type=password], .install-body input[type=url] { width:100%; box-sizing:border-box; height:40px; padding:0 11px; border:1px solid #d6e0ee; border-radius:7px; font:inherit; background:#fff; }
.install-body input:focus { border-color:#8bb8f8; box-shadow:0 0 0 3px rgba(31,111,235,.1); outline:none; }
.install-body button, .install-body .btn { display:inline-flex; align-items:center; justify-content:center; min-height:38px; margin:16px 8px 0 0; padding:0 16px; background:var(--i-blue); color:#fff; border:1px solid var(--i-blue); border-radius:7px; font-size:13px; cursor:pointer; text-decoration:none; }
.install-body .btn.alt { background:#fff; border-color:#d6e0ee; color:#40536b; }
.install-body .list { list-style:none; margin:0; padding:0; border:1px solid var(--i-border); border-radius:9px; overflow:hidden; }
.install-body .list li { display:flex; justify-content:space-between; gap:12px; padding:10px 14px; border-bottom:1px solid #eef2f8; font-size:12px; }
.install-body .list li:last-child { border-bottom:0; } .install-body .list li:nth-child(odd) { background:#fbfcfe; }
.install-body .ok { color:var(--i-ok); } .install-body .bad { color:var(--i-fail); }
.install-body .err { background:#fdecef; border:1px solid #f6d1d9; color:#a5263d; border-radius:7px; padding:10px 12px; font-size:12px; margin:12px 0; }
.install-body table { width:100%; border-collapse:collapse; background:#fff; }
.install-body td, .install-body th { text-align:left; padding:9px 10px; border-bottom:1px solid #eef2f8; font-size:12px; vertical-align:top; }
.install-body code { background:#f7f9fc; border:1px solid var(--i-border); border-radius:4px; padding:1px 4px; font-size:11px; }
.install-body #suggest { background:#eef5ff; border:1px solid #cfe0f7; padding:3px 6px; border-radius:4px; color:var(--i-blue); }
@media (max-width:640px) {
  .install-body .wrap { padding:16px 12px 28px; }
  .install-body .card { padding:20px 16px; }
  .install-body .step span { font-size:10px; padding:8px 4px; }
}

/* WAVE8 安装向导数据库选择 */
.install-body .install-db-step { margin:0 0 18px; padding:14px 14px 12px; border:1px solid var(--i-border); border-radius:9px; background:#fbfcfe; }
.install-body .install-db-head h2 { margin:0 0 3px; font-size:26px; }
.install-body .install-db-head p { margin:0 0 14px; color:var(--i-muted); font-size:12px; }
.install-body .install-db-choice { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:12px; }
.install-body .install-db-choice label { display:flex; align-items:flex-start; gap:9px; padding:11px; border:1px solid var(--i-border); border-radius:8px; background:#fff; cursor:pointer; margin:0; }
.install-body .install-db-choice label:has(input:checked) { border-color:#8bb8f8; box-shadow:0 0 0 3px rgba(31,111,235,.09); background:#f7faff; }
.install-body .install-db-choice input { margin-top:3px; }
.install-body .install-db-choice b { display:block; font-size:13px; color:var(--i-text); } .install-body .install-db-choice em { display:block; font-style:normal; color:var(--i-muted); font-size:11px; line-height:1.5; }
.install-body .install-db-line { display:flex; gap:10px; align-items:center; font-size:12px; margin:4px 0; color:var(--i-muted); }
.install-body .install-db-line b { color:var(--i-text); font-weight:500; min-width:72px; }
.install-body .install-db-tip { font-size:11px; color:var(--i-muted); margin-top:8px; }
.install-body .install-db-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px 12px; }
.install-body .install-db-grid label { margin:0; font-weight:400; }
.install-body .install-db-grid span { display:block; margin-bottom:4px; font-size:11px; font-weight:500; }
.install-body .install-db-grid input { height:34px; }
.install-body .install-db-test { display:flex; align-items:center; gap:10px; margin-top:10px; }
.install-body .install-db-test .btn { margin:0; }
.install-body .install-db-test [data-install-db-result] { font-size:12px; color:var(--i-muted); }
.install-body .install-db-test .is-ok { color:var(--i-ok); } .install-body .install-db-test .is-bad { color:var(--i-fail); }
@media (max-width:640px) { .install-body .install-db-choice, .install-body .install-db-grid { grid-template-columns:1fr; } .install-body .install-db-head h2 { font-size:20px; } }
