﻿/* =====================================================
   style.css — Wzl123题库AI工具  全局共享样式
   =====================================================
   1.  Reset & Base
   2.  CSS Variables (dark)
   3.  Light Theme Variables
   4.  Topbar & Navigation
   5.  Button System
   6.  Card
   7.  Modal (两套：modal-bg/modal 与 mo/md)
   8.  Toast
   9.  Form Elements
   10. Loading / Empty State
   11. Inner Tabs / Tab Nav
   12. Utility
   13. Scrollbar
   14. Light Theme — 共享组件覆盖
   15. Tool.html — VSCode Layout (专属)
   ===================================================== */

/* ─────────────────────────────────────────────────────
   1. Reset & Base
   ───────────────────────────────────────────────────── */
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }

body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  font-size: 14px;
  background: var(--bg);
  color: var(--text);
  min-height: 100vh;
}

a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }

/* ─────────────────────────────────────────────────────
   2. CSS Variables — Dark (default)
   ───────────────────────────────────────────────────── */
:root {
  --bg:        #1e1e1e;
  --panel:     #252526;
  --panel2:    #2d2d2d;
  --panel3:    #333333;
  --border:    #3c3c3c;
  --border2:   #4a4a4a;
  --text:      #cccccc;
  --dim:       #888888;
  --dim2:      #666666;
  --accent:    #0078d4;
  --accent-h:  #1a8fe3;
  --green:     #4ec9b0;
  --green2:    #3aa891;
  --yellow:    #dcdcaa;
  --red:       #f44747;
  --red2:      #c0392b;
  --orange:    #ce9178;
  --purple:    #c586c0;
  --blue:      #6cb6ff;
  --input-bg:  #3c3c3c;
  --row-hover: #2a2d2e;
  --radius:    6px;
  --radius2:   10px;
  --shadow:    0 2px 10px rgba(0,0,0,.35);
}

/* ─────────────────────────────────────────────────────
   3. Light Theme Variables
   ───────────────────────────────────────────────────── */
[data-theme="light"] {
  --bg:        #f5f5f5;
  --panel:     #ffffff;
  --panel2:    #f0f0f0;
  --panel3:    #e8e8e8;
  --border:    #d8d8d8;
  --border2:   #bbbbbb;
  --text:      #1e1e1e;
  --dim:       #666666;
  --dim2:      #999999;
  --accent:    #0066bb;
  --accent-h:  #005599;
  --green:     #0d8c6e;
  --green2:    #0a6e56;
  --yellow:    #7a6f00;
  --red:       #cc2233;
  --red2:      #a01020;
  --orange:    #8b4513;
  --purple:    #7b2d9c;
  --blue:      #1a6bbf;
  --input-bg:  #ffffff;
  --row-hover: #e8f0fe;
  --shadow:    0 2px 10px rgba(0,0,0,.1);
}

/* ─────────────────────────────────────────────────────
   4. Topbar & Navigation
   ───────────────────────────────────────────────────── */
.topbar {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 0 24px;
  height: 48px;
  background: #007acc;
  color: #fff;
  position: sticky;
  top: 0;
  z-index: 200;
  flex-shrink: 0;
}

/* logo — 两个 class 名均支持 */
.topbar .logo,
.logo-mark {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 15px;
  font-weight: 600;
  color: #fff;
  text-decoration: none;
  flex-shrink: 0;
}
.topbar .logo:hover, .logo-mark:hover { text-decoration: none; color: #fff; }
.topbar .logo img { width: 20px; height: 20px; }

/* spacer — 三种 class 名均支持 */
.topbar-spacer, .topbar-sp, .top-sp { flex: 1; }

/* topbar 按钮 */
.tbtn {
  background: rgba(255,255,255,.15);
  border: none;
  color: #fff;
  cursor: pointer;
  padding: 6px 14px;
  border-radius: 4px;
  font-size: 13px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  transition: background .15s;
  text-decoration: none;
  white-space: nowrap;
}
.tbtn:hover { background: rgba(255,255,255,.28); text-decoration: none; color: #fff; }
.tbtn.active { background: rgba(255,255,255,.32); font-weight: 600; }

/* admin badge */
.badge-admin {
  background: rgba(255,255,255,.2);
  border-radius: 4px;
  padding: 2px 8px;
  font-size: 11px;
  letter-spacing: .04em;
  color: #fff;
}

/* 用户 chip — 两套 class 名均支持 */
.user-chip, .top-chip {
  display: flex;
  align-items: center;
  gap: 6px;
  background: rgba(255,255,255,.15);
  border-radius: 20px;
  padding: 4px 12px 4px 8px;
  font-size: 13px;
  cursor: pointer;
  color: #fff;
  border: none;
}
.user-chip:hover, .top-chip:hover { background: rgba(255,255,255,.28); }
.user-chip .av, .top-chip .av, .top-av {
  width: 24px; height: 24px;
  background: rgba(255,255,255,.3);
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 11px; font-weight: 700;
  color: #fff; flex-shrink: 0;
}
.top-name { font-size: 13px; color: #fff; }

/* poll dot */
.poll-dot {
  width: 7px; height: 7px;
  border-radius: 50%;
  background: rgba(255,255,255,.7);
  box-shadow: 0 0 6px rgba(255,255,255,.5);
  animation: pulse 1.4s infinite;
}
.poll-dot.off, .poll-dot.stopped {
  background: rgba(255,255,255,.3);
  box-shadow: none;
  animation: none;
}
@keyframes pulse { 0%,100%{opacity:1} 50%{opacity:.25} }

/* 退出按钮 */
.top-logout {
  font-size: 13px; color: rgba(255,255,255,.8);
  cursor: pointer; padding: 6px 10px;
  border-radius: 4px; transition: all .15s;
  background: none; border: none;
  display: inline-flex; align-items: center; gap: 5px;
}
.top-logout:hover { background: rgba(244,71,71,.35); color: #fff; }

/* 通知按钮 */
.notif-btn {
  position: relative;
  background: rgba(255,255,255,.15);
  border: none; color: #fff; cursor: pointer;
  padding: 6px 10px; border-radius: 4px; font-size: 14px;
  transition: all .15s;
  display: flex; align-items: center;
}
.notif-btn:hover { background: rgba(255,255,255,.28); }
.notif-badge {
  position: absolute; top: 2px; right: 2px;
  background: var(--red); color: #fff;
  border-radius: 50%; width: 16px; height: 16px;
  font-size: 10px; display: flex; align-items: center; justify-content: center;
}

/* page-tabs (admin) */
.page-tabs {
  background: var(--panel);
  border-bottom: 1px solid var(--border);
  display: flex; padding: 0 20px;
  flex-wrap: wrap; flex-shrink: 0;
}
.ptab {
  padding: 12px 18px; font-size: 13px;
  background: none; border: none;
  border-bottom: 2px solid transparent;
  color: var(--dim); cursor: pointer;
  display: inline-flex; align-items: center; gap: 7px;
  transition: color .12s, border-color .12s;
  margin-bottom: -1px; white-space: nowrap;
}
.ptab.active { color: var(--text); border-bottom-color: var(--accent); }
.ptab:hover:not(.active) { color: var(--text); }
.tab-panel { display: none; }
.tab-panel.active { display: block; }

/* ─────────────────────────────────────────────────────
   5. Button System
   ───────────────────────────────────────────────────── */
.btn {
  display: inline-flex; align-items: center; gap: 6px;
  border: none; cursor: pointer;
  border-radius: var(--radius, 4px);
  font-size: 13px; padding: 7px 16px;
  transition: background .12s, opacity .12s;
  font-family: inherit; font-weight: 500;
  text-decoration: none; white-space: nowrap;
}
.btn:disabled { opacity: .4; cursor: not-allowed; }
.btn:hover { text-decoration: none; }

.btn-primary   { background: var(--accent); color: #fff; }
.btn-primary:hover:not(:disabled)   { background: var(--accent-h); }

.btn-secondary { background: var(--panel2); color: var(--text); border: 1px solid var(--border2); }
.btn-secondary:hover:not(:disabled) { background: var(--panel3); }

.btn-danger    { background: rgba(244,71,71,.15); color: var(--red); border: 1px solid rgba(244,71,71,.3); }
.btn-danger:hover:not(:disabled)    { background: rgba(244,71,71,.25); }

.btn-success   { background: #1e7e34; color: #fff; }
.btn-success:hover:not(:disabled)   { background: #21913b; }

.btn-warn      { background: #7a5c00; color: #fff; }
.btn-warn:hover:not(:disabled)      { background: #9a7400; }

.btn-green  { background: rgba(78,201,176,.15); color: var(--green); border: 1px solid rgba(78,201,176,.3); }
.btn-green:hover:not(:disabled)  { background: rgba(78,201,176,.25); }

.btn-red    { background: rgba(244,71,71,.15); color: var(--red); border: 1px solid rgba(244,71,71,.3); }
.btn-red:hover:not(:disabled)    { background: rgba(244,71,71,.25); }

.btn-yellow { background: rgba(220,220,170,.15); color: var(--yellow); border: 1px solid rgba(220,220,170,.3); }
.btn-yellow:hover:not(:disabled) { background: rgba(220,220,170,.25); }

.btn-purple { background: rgba(197,134,192,.15); color: var(--purple); border: 1px solid rgba(197,134,192,.3); }
.btn-purple:hover:not(:disabled) { background: rgba(197,134,192,.25); }

.btn-sm { padding: 4px 10px; font-size: 12px; }
.btn-xs { padding: 3px 8px;  font-size: 11px; }

/* ─────────────────────────────────────────────────────
   6. Card
   ───────────────────────────────────────────────────── */
.card { background: var(--panel); border: 1px solid var(--border); border-radius: 8px; }
.card-body { padding: 20px; }

/* admin 卡片头/body */
.ch {
  display: flex; align-items: center; gap: 8px;
  padding: 12px 16px; border-bottom: 1px solid var(--border);
  font-size: 12px; font-weight: 600;
  text-transform: uppercase; letter-spacing: .05em; color: var(--dim);
}
.ch > .spacer { flex: 1; }
.cb { padding: 16px; }

/* ─────────────────────────────────────────────────────
   7. Modal
   (A) index 风格：.modal-bg / .modal
   (B) wode/admin 风格：.mo / .md
   ───────────────────────────────────────────────────── */
/* (A) */
.modal-bg {
  display: none; position: fixed; inset: 0;
  background: rgba(0,0,0,.6); z-index: 1000;
  align-items: center; justify-content: center; padding: 16px;
}
.modal-bg.open { display: flex; }
.modal {
  background: var(--panel); border: 1px solid var(--border);
  border-radius: 8px; padding: 24px;
  min-width: 340px; max-width: 90vw;
}
.modal h3 { font-size: 16px; font-weight: 600; margin-bottom: 16px; }
.modal-footer { display: flex; gap: 8px; justify-content: flex-end; margin-top: 18px; }

/* (B) */
.mo {
  position: fixed; inset: 0;
  background: rgba(0,0,0,.65); z-index: 9000;
  display: flex; align-items: center; justify-content: center; padding: 16px;
}
.md {
  background: var(--panel); border: 1px solid var(--border2);
  border-radius: var(--radius2, 10px); width: 100%; box-shadow: var(--shadow);
}
.md-head {
  padding: 16px 20px; font-size: 15px; font-weight: 700;
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between; gap: 9px;
}
.md-body { padding: 18px 20px; max-height: 60vh; overflow-y: auto; }
.md-foot {
  padding: 14px 20px; border-top: 1px solid var(--border);
  display: flex; justify-content: flex-end; gap: 8px;
  background: var(--panel2);
  border-radius: 0 0 var(--radius2, 10px) var(--radius2, 10px);
}

/* ─────────────────────────────────────────────────────
   8. Toast
   ───────────────────────────────────────────────────── */
.toast {
  position: fixed; bottom: 28px;
  left: 50%; transform: translateX(-50%) translateY(20px);
  background: var(--panel2); border: 1px solid var(--border2);
  border-radius: 20px; padding: 8px 20px;
  font-size: 13px; color: var(--text);
  z-index: 9999; opacity: 0; pointer-events: none;
  transition: opacity .3s, transform .3s; white-space: nowrap;
}
.toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }
.toast.ok   { color: var(--green);  border-color: var(--green); }
.toast.err  { color: var(--red);    border-color: var(--red); }
.toast.warn { color: var(--yellow); border-color: var(--yellow); }

/* ─────────────────────────────────────────────────────
   9. Form Elements
   ───────────────────────────────────────────────────── */
.form-row { margin-bottom: 14px; }
.form-row label { display: block; font-size: 12px; color: var(--dim); margin-bottom: 5px; }
.form-row input,
.form-row textarea,
.form-row select {
  width: 100%; padding: 8px 10px;
  background: var(--input-bg); border: 1px solid var(--border);
  border-radius: 4px; color: var(--text);
  font-size: 13px; font-family: inherit; outline: none;
}
.form-row input:focus,
.form-row textarea:focus,
.form-row select:focus { border-color: var(--accent); }
.form-row textarea { resize: vertical; min-height: 70px; }

/* 简写风格：fg / fl / fi */
.fg { margin-bottom: 14px; }
.fl { display: block; font-size: 12px; color: var(--dim); margin-bottom: 5px; }
.fi {
  width: 100%; background: var(--panel2);
  border: 1px solid var(--border2); border-radius: var(--radius, 4px);
  color: var(--text); padding: 8px 10px; font-size: 13px;
  outline: none; transition: border-color .15s; font-family: inherit;
}
.fi:focus { border-color: var(--accent); }
textarea.fi { resize: vertical; }
select.fi   { cursor: pointer; }

/* switch 开关 */
.switch-row {
  display: flex; align-items: center; justify-content: space-between;
  padding: 8px 0; border-bottom: 1px solid var(--border);
}
.switch-row:last-child { border-bottom: none; }
.switch-row span { font-size: 13px; }
.switch { position: relative; width: 38px; height: 20px; flex-shrink: 0; }
.switch input { opacity: 0; width: 0; height: 0; }
.slider {
  position: absolute; inset: 0;
  background: #555; border-radius: 20px; cursor: pointer; transition: .2s;
}
.slider::before {
  content: ''; position: absolute;
  width: 14px; height: 14px; left: 3px; bottom: 3px;
  background: #fff; border-radius: 50%; transition: .2s;
}
.switch input:checked + .slider { background: var(--accent); }
.switch input:checked + .slider::before { transform: translateX(18px); }

/* tog 开关 (admin) */
.tog { position: relative; display: inline-flex; align-items: center; cursor: pointer; gap: 8px; }
.tog input { display: none; }
.tog-sl {
  width: 40px; height: 22px; background: #444;
  border-radius: 11px; transition: background .2s;
  flex-shrink: 0; position: relative;
}
.tog-sl::after {
  content: ''; position: absolute; left: 3px; top: 3px;
  width: 16px; height: 16px; border-radius: 50%;
  background: #fff; transition: left .2s;
}
.tog input:checked + .tog-sl { background: var(--green); }
.tog input:checked + .tog-sl::after { left: 21px; }
.tog-row { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; cursor: pointer; }

/* range slider */
input[type=range] {
  -webkit-appearance: none; width: 100%; height: 5px;
  border-radius: 3px; background: #3c3c3c; outline: none; cursor: pointer;
}
input[type=range]::-webkit-slider-thumb {
  -webkit-appearance: none; width: 18px; height: 18px;
  border-radius: 50%; background: var(--accent); cursor: pointer;
}
input[type=range]::-moz-range-thumb {
  width: 18px; height: 18px; border-radius: 50%;
  background: var(--accent); cursor: pointer; border: none;
}

/* ─────────────────────────────────────────────────────
   10. Loading / Empty State
   ───────────────────────────────────────────────────── */
.loading {
  display: flex; align-items: center; justify-content: center;
  padding: 50px; color: var(--dim); font-size: 13px; gap: 10px;
}
.empty-state, .empty-s {
  text-align: center; padding: 60px 20px;
  color: var(--dim); line-height: 2;
}
.empty-state i, .empty-s i { font-size: 40px; margin-bottom: 14px; display: block; opacity: .5; }
.empty-s small { font-size: 12px; opacity: .7; }

.spinner {
  border: 2px solid var(--border); border-top-color: var(--accent);
  border-radius: 50%; width: 16px; height: 16px;
  animation: spin 1s linear infinite; display: inline-block;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* ─────────────────────────────────────────────────────
   11. Inner Tabs / Tab Nav
   ───────────────────────────────────────────────────── */
.inner-tabs { display: flex; border-bottom: 1px solid var(--border); margin-bottom: 18px; }
.inner-tab {
  padding: 8px 18px; font-size: 13px;
  background: none; border: none; border-bottom: 2px solid transparent;
  color: var(--dim); cursor: pointer; transition: color .12s; margin-bottom: -1px;
}
.inner-tab.active { color: var(--text); border-bottom-color: var(--accent); }

.tab-nav {
  display: flex; gap: 3px; border-bottom: 1px solid var(--border);
  margin-bottom: 18px; overflow-x: auto; flex-shrink: 0;
}
.tab-btn {
  display: flex; align-items: center; gap: 8px;
  padding: 9px 18px; border: none; background: none;
  color: var(--dim); font-size: 13.5px; cursor: pointer;
  border-bottom: 2.5px solid transparent; margin-bottom: -1px;
  transition: all .15s; white-space: nowrap;
  border-radius: var(--radius, 6px) var(--radius, 6px) 0 0;
}
.tab-btn:hover { color: var(--text); background: var(--panel2); }
.tab-btn.active { color: var(--text); border-bottom-color: var(--accent); background: var(--panel2); }
.tab-cnt {
  background: var(--accent); color: #fff;
  font-size: 10px; font-weight: 700;
  padding: 1px 6px; border-radius: 10px;
  min-width: 18px; text-align: center; line-height: 16px;
}

/* ─────────────────────────────────────────────────────
   12. Utility
   ───────────────────────────────────────────────────── */
.hidden { display: none !important; }
.view { display: none; }
.view.active { display: block; }
.spacer { flex: 1; }
.page-header { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.page-header h1 { font-size: 18px; font-weight: 600; }
.page-header .spacer { flex: 1; }
.main { max-width: 1100px; margin: 0 auto; padding: 28px 24px 80px; }
.tbl-wrap { overflow-x: auto; }

/* 进度条 (admin) */
.pb-bg { height: 5px; background: #3c3c3c; border-radius: 3px; overflow: hidden; margin-top: 4px; }
.pb-fill { height: 100%; background: var(--green); border-radius: 3px; transition: width .4s; }
.pb-txt { font-size: 11px; color: var(--dim); }

/* badge (admin) */
.bk { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 11px; font-weight: 600; }
.bk-pending    { background: #403d1a; color: var(--yellow); }
.bk-processing { background: #0d2e48; color: #6cb6ff; }
.bk-completed  { background: #1a3a2a; color: var(--green); }
.bk-failed     { background: #3a1414; color: var(--red); }
.bk-mixed      { background: #2d2d2d; color: var(--dim); }
.bk-ok         { background: #1a3a2a; color: var(--green); }
.bk-admin      { background: #2a1a3a; color: #c586c0; }
.bk-user       { background: #1a2a3a; color: #6cb6ff; }

/* status badge (wode) */
.sb {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 8px; border-radius: 10px;
  font-size: 11px; font-weight: 600; white-space: nowrap;
}
.sb-completed, .sb-done { background: rgba(78,201,176,.15); color: var(--green); border: 1px solid rgba(78,201,176,.3); }
.sb-processing           { background: rgba(108,182,255,.15); color: var(--blue); border: 1px solid rgba(108,182,255,.3); }
.sb-pending              { background: rgba(220,220,170,.15); color: var(--yellow); border: 1px solid rgba(220,220,170,.3); }
.sb-failed               { background: rgba(244,71,71,.15); color: var(--red); border: 1px solid rgba(244,71,71,.3); }
.sb-pub                  { background: rgba(197,134,192,.15); color: var(--purple); border: 1px solid rgba(197,134,192,.3); }

/* pub-code badge */
.pub-code-badge {
  font-family: monospace;
  background: rgba(0,120,212,.12); color: var(--blue);
  border-radius: 4px; padding: 1px 6px;
  font-size: 11px; letter-spacing: .5px; font-weight: 600;
  cursor: pointer; user-select: all;
}

/* inline image */
.q-inline-img {
  display: block; max-width: 100%; max-height: 320px;
  border-radius: 6px; margin: 6px 0;
  object-fit: contain; background: #1e1e1e;
}

/* ─────────────────────────────────────────────────────
   13. Scrollbar
   ───────────────────────────────────────────────────── */
::-webkit-scrollbar { width: 7px; height: 7px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: #555; border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: #777; }

/* ─────────────────────────────────────────────────────
   14. Light Theme — 共享组件覆盖
   ───────────────────────────────────────────────────── */
[data-theme="light"] body { background: var(--bg); color: var(--text); }

[data-theme="light"] .page-tabs { background: var(--panel); border-bottom-color: var(--border); }

[data-theme="light"] .btn-secondary { background: #e8e8e8; color: #333; border-color: #ccc; }
[data-theme="light"] .btn-secondary:hover:not(:disabled) { background: #dedede; }
[data-theme="light"] .btn-danger  { background: #ffe0e0; color: #b01828; border-color: #ffaaaa; }
[data-theme="light"] .btn-danger:hover:not(:disabled) { background: #ffd0d0; }
[data-theme="light"] .btn-green   { background: #d4f0e4; color: #0a5e36; border-color: #9dd8c0; }
[data-theme="light"] .btn-green:hover:not(:disabled)  { background: #c2e8d8; }
[data-theme="light"] .btn-red     { background: #ffe0e0; color: #b01828; border-color: #ffaaaa; }
[data-theme="light"] .btn-red:hover:not(:disabled)    { background: #ffd0d0; }
[data-theme="light"] .btn-yellow  { background: #fff3cc; color: #6a4d00; border-color: #ffe080; }
[data-theme="light"] .btn-yellow:hover:not(:disabled) { background: #ffedb3; }
[data-theme="light"] .btn-purple  { background: #eedbff; color: #5a1a92; border-color: #d4aaff; }
[data-theme="light"] .btn-purple:hover:not(:disabled) { background: #e5ccff; }

[data-theme="light"] .card { background: #fff; border-color: #e0e0e0; }
[data-theme="light"] .ch   { border-bottom-color: #e8e8e8; }

[data-theme="light"] .modal-bg { background: rgba(0,0,0,.45); }
[data-theme="light"] .modal    { background: #fff; border-color: #e0e0e0; }
[data-theme="light"] .mo       { background: rgba(0,0,0,.45); }
[data-theme="light"] .md       { background: #fff; border-color: #e0e0e0; }
[data-theme="light"] .md-foot  { background: #f5f5f5; }

[data-theme="light"] .toast      { background: #fff; border-color: #ddd; color: #333; }
[data-theme="light"] .toast.ok   { border-color: var(--green); }
[data-theme="light"] .toast.err  { border-color: var(--red); }
[data-theme="light"] .toast.warn { border-color: var(--yellow); }

[data-theme="light"] .form-row input,
[data-theme="light"] .form-row textarea,
[data-theme="light"] .form-row select,
[data-theme="light"] .fi         { background: #fff; border-color: #ccc; color: #333; }
[data-theme="light"] .switch-row { border-bottom-color: #e8e8e8; }
[data-theme="light"] .tog-sl     { background: #bbb; }

[data-theme="light"] .pb-bg { background: #ddd; }

[data-theme="light"] .bk-pending    { background: #fff3cc; color: #7a5a00; }
[data-theme="light"] .bk-processing { background: #ddeeff; color: #0055aa; }
[data-theme="light"] .bk-completed  { background: #d4f0e4; color: #0a6e40; }
[data-theme="light"] .bk-failed     { background: #ffe0e0; color: #b01828; }
[data-theme="light"] .bk-mixed      { background: #eee; color: #555; }
[data-theme="light"] .bk-ok         { background: #d4f0e4; color: #0a6e40; }
[data-theme="light"] .bk-admin      { background: #eedbff; color: #6020a0; }
[data-theme="light"] .bk-user       { background: #ddeeff; color: #0055aa; }

[data-theme="light"] .tab-btn:hover,
[data-theme="light"] .tab-btn.active { background: var(--panel2); }

[data-theme="light"] .pub-code-badge { background: rgba(0,102,187,.12); color: #0055aa; }
[data-theme="light"] .q-inline-img   { background: #e8e8e8; }

[data-theme="light"] input[type=range] { background: #ddd; }

[data-theme="light"] table th { color: #555; background: #f0f0f0; }
[data-theme="light"] table td { border-bottom-color: #e8e8e8; }

/* ─────────────────────────────────────────────────────
   15. Tool.html — VSCode Layout (专属)
   ───────────────────────────────────────────────────── */

/* Note: tool.html body 需要 overflow:hidden，由页面内联 <style> 覆盖 */

.vscode-container { display: flex; flex-direction: column; height: 100vh; width: 100vw; }
.titlebar { display: none; }
.titlebar-title { font-size: 13px; color: #cccccc; font-weight: 400; }
.workbench { display: flex; flex: 1; overflow: hidden; }

.sidebar-left {
  width: 320px; background: #252526;
  border-right: 1px solid #191919;
  display: flex; flex-direction: column; overflow: hidden;
}
.sidebar-header {
  height: 35px; display: flex; align-items: center;
  padding: 0 16px; background: #252526; border-bottom: 1px solid #191919;
  font-size: 11px; text-transform: uppercase; color: #999;
  letter-spacing: 0.5px; flex-shrink: 0;
}
.sidebar-content { flex: 1; display: flex; flex-direction: column; overflow: hidden; padding: 12px; }

.editor-area { flex: 1; background: #1e1e1e; display: flex; flex-direction: column; overflow: hidden; }
.editor-tabs {
  height: 35px; background: #2d2d2d; border-bottom: 1px solid #191919;
  display: flex; align-items: center; justify-content: space-between; flex-shrink: 0;
}
.tabs-container { display: flex; flex: 1; height: 100%; }
.tab-actions { display: flex; align-items: center; gap: 4px; padding: 0 8px; border-left: 1px solid #191919; }
.editor-tab {
  flex: 1; height: 35px;
  display: flex; align-items: center; justify-content: center; gap: 6px;
  font-size: 13px; color: #969696; background: transparent;
  border-right: 1px solid #191919; cursor: pointer; transition: all 0.1s; position: relative;
}
.editor-tab.active { background: #1e1e1e; color: #fff; }
.editor-tab.locked { background: #2d3748; color: #4EC9B0; }
.editor-tab:hover  { color: #fff; }
.tab-lock-btn {
  display: none; padding: 2px 4px; background: transparent; border: none;
  color: #969696; cursor: pointer; font-size: 11px; border-radius: 2px; transition: all 0.1s;
}
.editor-tab:hover .tab-lock-btn,
.editor-tab.locked .tab-lock-btn { display: flex; }
.tab-lock-btn:hover { background: #3c3c3c; color: #fff; }
.editor-tab.locked .tab-lock-btn { color: #4EC9B0; }

.preview-panel {
  width: 100%; height: 100%; overflow: auto; position: relative;
  background-image: url('logo1.png');
  background-repeat: no-repeat; background-position: center;
  background-size: 200px; background-attachment: local;
}
.preview-panel::before {
  content: ''; position: absolute; inset: 0;
  background-image: url('logo1.png');
  background-repeat: no-repeat; background-position: center; background-size: 200px;
  opacity: 0.05; pointer-events: none;
}
.preview-panel::after {
  content: 'tiku.wzl123.com';
  position: absolute; top: 50%; left: 50%;
  transform: translate(-50%, calc(-50% + 120px));
  font-size: 24px; color: #999; opacity: .35; pointer-events: none;
  font-family: 'Consolas', monospace; letter-spacing: 1px;
}
.preview-panel > * { position: relative; z-index: 1; }

.split-view { display: flex; gap: 1px; height: 100%; background: #191919; }
.split-panel { flex: 1; overflow: auto; background: #1e1e1e; position: relative; }
.split-panel::before {
  content: ''; position: absolute; top: 34px; inset-inline: 0; bottom: 0;
  background-image: url('logo1.png');
  background-repeat: no-repeat; background-position: center; background-size: 150px;
  opacity: 0.05; pointer-events: none;
}
.split-panel > * { position: relative; z-index: 1; }
.sync-highlight { background-color: rgba(78,201,176,.3) !important; }
.code-preview {
  margin: 0; padding: 16px; background: rgba(30,30,30,.15); color: #d4d4d4;
  font-family: 'Consolas','Courier New',monospace;
  font-size: 13px; line-height: 1.6; overflow: auto; height: 100%;
}
.code-preview code { display: block; white-space: pre; }

.fullscreen-btn, .tool-btn {
  padding: 4px 8px; background: transparent; border: none;
  color: #969696; cursor: pointer; font-size: 12px; border-radius: 2px;
  transition: all 0.1s; display: flex; align-items: center; gap: 4px;
}
.fullscreen-btn:hover, .tool-btn:hover:not(:disabled) { background: #3c3c3c; color: #fff; }
.tool-btn:disabled { opacity: .3; cursor: not-allowed; }
.tool-divider { width: 1px; height: 20px; background: #3c3c3c; margin: 0 4px; }

.editor-content { flex: 1; overflow-y: auto; padding: 20px; }

.sidebar-right {
  width: 400px; background: #252526; border-left: 1px solid #191919;
  display: flex; flex-direction: column; overflow: hidden;
}
.sidebar-tab {
  flex: 1; background: transparent; border: none; border-bottom: 2px solid transparent;
  color: #999; padding: 8px 4px; font-size: 11px; cursor: pointer;
  display: flex; align-items: center; justify-content: center; gap: 5px;
  transition: color .15s, border-color .15s; white-space: nowrap;
}
.sidebar-tab:hover  { color: #ccc; }
.sidebar-tab.active { color: #fff; border-bottom-color: #007acc; }

.panel-bottom {
  height: 150px; background: #1e1e1e;
  border-top: 1px solid #191919; display: flex; flex-direction: column; flex-shrink: 0;
}
.panel-header {
  height: 35px; background: #252526;
  display: flex; align-items: center; padding: 0 12px; border-bottom: 1px solid #191919;
}
.panel-tab {
  padding: 0 12px; height: 35px; display: flex; align-items: center;
  font-size: 13px; color: #969696; cursor: pointer; border-bottom: 2px solid transparent;
}
.panel-tab.active { color: #fff; border-bottom-color: #007acc; }
.panel-content { flex: 1; overflow-y: auto; padding: 12px; }

.section { margin-bottom: 16px; background: #2d2d2d; border-radius: 3px; overflow: hidden; }
.section-header {
  padding: 8px 12px; background: #2d2d2d; border-bottom: 1px solid #3c3c3c;
  font-size: 12px; font-weight: 600; color: #ccc;
  display: flex; align-items: center; gap: 6px; cursor: pointer; user-select: none;
}
.section-header i { font-size: 11px; color: #ccc; transition: transform .2s; }
.section-header.collapsed i { transform: rotate(-90deg); }
.section-content { padding: 12px; }
.section-content.collapsed { display: none; }

.form-group { margin-bottom: 12px; }
.form-label { display: block; font-size: 12px; color: #ccc; margin-bottom: 4px; }
.checkbox-group { display: flex; align-items: center; gap: 6px; margin-bottom: 8px; cursor: pointer; }
.checkbox-group input[type="checkbox"] { accent-color: #007acc; cursor: pointer; }
.checkbox-group label { font-size: 13px; color: #ccc; cursor: pointer; }

.vscode-input, .vscode-select {
  width: 100%; background: #3c3c3c; border: 1px solid #3c3c3c;
  color: #ccc; padding: 6px 8px; font-size: 13px; border-radius: 2px; outline: none;
}
.vscode-input:focus, .vscode-select:focus { border-color: #007acc; }
.vscode-select { cursor: pointer; }
.vscode-select option { background: #3c3c3c; color: #ccc; }

.vscode-textarea {
  width: 100%; background: rgba(30,30,30,.7); border: 1px solid #3c3c3c;
  color: #ccc; padding: 8px; font-size: 13px;
  font-family: 'Consolas','Monaco',monospace;
  border-radius: 2px; outline: none; resize: vertical;
}
.vscode-textarea:focus { border-color: #007acc; }

.vscode-button {
  background: #0e639c; color: #fff; border: none;
  padding: 6px 14px; font-size: 13px; border-radius: 2px; cursor: pointer; transition: background .1s;
}
.vscode-button:hover  { background: #1177bb; }
.vscode-button:active { background: #0d5a8f; }
.vscode-button.secondary       { background: #3c3c3c; }
.vscode-button.secondary:hover { background: #505050; }

.statusbar {
  height: 22px; background: #007acc;
  display: flex; align-items: center; padding: 0 12px;
  font-size: 12px; color: #fff; flex-shrink: 0;
}
.statusbar-item { margin-right: 16px; }

.seg {
  background: #3c3c3c; border: 1px solid #555; color: #999;
  padding: 4px 9px; border-radius: 4px; cursor: pointer;
  font-size: 12px; font-family: 'Consolas', monospace;
  transition: background .12s, border-color .12s, color .12s; user-select: none;
}
.seg.active { background: #007acc; border-color: #007acc; color: #fff; }
.seg:hover:not(.active) { border-color: #888; color: #ccc; }

.resizer { background: #191919; position: relative; z-index: 10; }
.resizer-vertical   { width: 4px; cursor: ew-resize; flex-shrink: 0; }
.resizer-vertical:hover   { background: #007acc; }
.resizer-horizontal { height: 4px; cursor: ns-resize; flex-shrink: 0; }
.resizer-horizontal:hover { background: #007acc; }

.progress-modal {
  position: fixed; inset: 0; background: rgba(0,0,0,.7);
  display: flex; align-items: center; justify-content: center; z-index: 10000;
}
.progress-modal-content {
  background: #1e1e1e; border: 1px solid #3c3c3c; border-radius: 4px;
  width: 90%; max-width: 700px; max-height: 80vh;
  display: flex; flex-direction: column; box-shadow: 0 4px 20px rgba(0,0,0,.5);
}
.progress-modal-header {
  padding: 16px 20px; border-bottom: 1px solid #3c3c3c; background: #252526;
  color: #ccc; font-size: 16px; font-weight: 500; display: flex; align-items: center; gap: 10px;
}
.progress-modal-body { flex: 1; overflow-y: auto; padding: 16px 20px; min-height: 200px; max-height: 500px; }
.progress-log { font-family: 'Consolas','Courier New',monospace; font-size: 13px; line-height: 1.8; color: #ccc; }
.progress-log-line { margin: 4px 0; padding: 4px 0; }
.progress-log-line.info      { color: #4EC9B0; }
.progress-log-line.success   { color: #4CAF50; }
.progress-log-line.warning   { color: #FFA726; }
.progress-log-line.error     { color: #F44336; }
.progress-log-line.separator { color: #666; margin: 8px 0; }
.progress-modal-footer {
  padding: 12px 20px; border-top: 1px solid #3c3c3c; background: #252526;
  display: flex; justify-content: space-between; align-items: center;
}

.chat-messages {
  flex: 1; min-height: 0; overflow-y: auto; padding: 12px;
  display: flex; flex-direction: column; gap: 8px;
}
.chat-message { max-width: 80%; padding: 8px 12px; border-radius: 6px; font-size: 13px; line-height: 1.5; }
.chat-message.user      { align-self: flex-end; background: #0e639c; color: #fff; }
.chat-message.assistant { align-self: flex-start; background: #2d2d2d; color: #ccc; }

#previewContainer { width: 100%; height: 100%; position: relative; }
#previewContainer::before {
  content: ''; position: absolute; inset: 0;
  background-image: url('logo1.png');
  background-repeat: no-repeat; background-position: center; background-size: 200px;
  opacity: 0.05; pointer-events: none;
}
#previewContainer::after {
  content: 'tiku.wzl123.com';
  position: absolute; top: 50%; left: 50%;
  transform: translate(-50%, calc(-50% + 120px));
  font-size: 24px; color: #999; opacity: .35; pointer-events: none;
  font-family: 'Consolas', monospace; letter-spacing: 1px;
}

.login-tab {
  flex: 1; padding: 10px; text-align: center; cursor: pointer;
  color: #999; border-bottom: 2px solid transparent; transition: all .2s; font-size: 14px;
}
.login-tab:hover  { color: #ccc; }
.login-tab.active { color: #0e639c; border-bottom-color: #0e639c; }

/* Tool 浅色主题 */
[data-theme="light"] .vscode-container { background: #f0f0f0; }
[data-theme="light"] .sidebar-left     { background: #f5f5f5; border-right-color: #ddd; }
[data-theme="light"] .sidebar-header   { background: #f5f5f5; border-bottom-color: #ddd; color: #555; }
[data-theme="light"] .sidebar-content  { background: #f5f5f5; }
[data-theme="light"] .section          { background: #fff; border-color: #ddd; }
[data-theme="light"] .section-header   { background: #ebebeb; color: #444; border-bottom-color: #ddd; }
[data-theme="light"] .section-header:hover { background: #e0e0e0; }
[data-theme="light"] .section-content  { background: #fafafa; }
[data-theme="light"] .workbench        { background: #f0f0f0; }
[data-theme="light"] .content-panel    { background: #fff; }
[data-theme="light"] .vscode-button    { background: #0066bb; color: #fff; }
[data-theme="light"] .vscode-button:hover { background: #005599; }
[data-theme="light"] .vscode-button.secondary       { background: #e0e0e0; color: #333; }
[data-theme="light"] .vscode-button.secondary:hover { background: #d0d0d0; }
[data-theme="light"] .vscode-input,
[data-theme="light"] .vscode-select,
[data-theme="light"] .vscode-textarea  { background: #fff; border-color: #ccc; color: #333; }
[data-theme="light"] .question-card    { background: #fff; border-color: #e0e0e0; }
[data-theme="light"] .question-card:hover { background: #f5faff; border-color: #99c5f0; }
[data-theme="light"] .statusbar        { background: #0066bb; }
[data-theme="light"] .modal-overlay    { background: rgba(0,0,0,.45); }
[data-theme="light"] .modal-content    { background: #fff; border-color: #ddd; }
[data-theme="light"] .q-inline-img     { background: #e8e8e8; }
