:root{
  --chrome-bg:#e9ecef;
  --chrome-border:#c2c8ce;
  --chrome-text:#2b3138;
  --panel-bg:#f4f6f8;
  --canvas-bg:#ffffff;
  --accent:#1c6dd0;
  --accent-soft:#d7e6fb;
  --sel:#1c6dd0;
  --port:#e8552d;
  --danger:#c0392b;
  --shadow:0 1px 3px rgba(0,0,0,.12);
  --mono:"SF Mono",Consolas,"Liberation Mono",Menlo,monospace;
  --ui:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei","Hiragino Sans GB",sans-serif;
}
*{box-sizing:border-box;}
html,body{height:100%;margin:0;}
body{
  font-family:var(--ui);
  color:var(--chrome-text);
  background:var(--chrome-bg);
  display:flex;flex-direction:column;
  overflow:hidden;
  -webkit-user-select:none;user-select:none;
  touch-action:none;
}

/* ---------- 工具栏 ---------- */
#toolbar{
  display:flex;align-items:center;gap:4px;flex-wrap:wrap;
  padding:6px 10px;
  background:var(--chrome-bg);
  border-bottom:1px solid var(--chrome-border);
  box-shadow:var(--shadow);
  z-index:20;
}
.tb-title{font-weight:600;font-size:14px;margin-right:8px;}
.tb-ver{font-size:11px;color:#8a929b;font-weight:400;}
.tb-group{display:flex;align-items:center;gap:2px;padding:0 6px;border-right:1px solid var(--chrome-border);}
.tb-group:last-child{border-right:none;}
.tb-right{margin-left:auto;}
.tb-label{font-size:12px;color:#5a636d;min-width:40px;text-align:center;}
#toolbar button{
  font-family:var(--ui);font-size:13px;line-height:1.2;
  padding:6px 12px;border:1px solid #c4cbd2;
  background:#f8f9fa;border-radius:6px;cursor:pointer;color:#2f3740;
  transition:background .15s ease,border-color .15s ease,color .15s ease,box-shadow .15s ease,transform .08s ease;
}
#toolbar button:hover:not(:disabled){background:#ffffff;border-color:#98a4af;}
#toolbar button:active:not(:disabled){transform:translateY(1px);background:#edf0f2;}
#toolbar button:disabled{opacity:.45;cursor:not-allowed;}
#toolbar button:focus-visible{outline:2px solid rgba(47,158,68,.45);outline-offset:2px;}
/* 持续选中状态（主工具互斥 + 开关独立）统一稳重绿 */
#toolbar button.active{
  background:#2f9e44;border-color:#27883a;color:#ffffff;font-weight:600;
  box-shadow:0 0 0 2px rgba(47,158,68,.16),0 2px 5px rgba(0,0,0,.12);
}
#toolbar button.active:hover:not(:disabled){background:#2b8f3e;border-color:#237632;}
/* 一次性操作按钮点击成功后的短暂反馈（不覆盖 .active 选中态） */
#toolbar button.flash-success:not(.active){background:#dff4e5;border-color:#65b877;color:#237632;}

/* ---------- 主区 ---------- */
#workspace{flex:1;display:flex;min-height:0;}
#library{
  width:150px;flex:none;background:var(--panel-bg);
  border-right:1px solid var(--chrome-border);
  display:flex;flex-direction:column;
}
.lib-title,.prop-title{
  font-size:12px;font-weight:600;color:#5a636d;letter-spacing:.05em;
  padding:8px 12px;border-bottom:1px solid var(--chrome-border);text-transform:uppercase;
}
#lib-list{flex:1;overflow-y:auto;padding:6px;display:grid;grid-template-columns:1fr;gap:6px;}
.lib-item{
  display:flex;flex-direction:column;align-items:center;gap:2px;
  padding:6px 4px;background:#fff;border:1px solid var(--chrome-border);border-radius:6px;
  cursor:grab;transition:border-color .12s,box-shadow .12s;
}
.lib-item:hover{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft);}
.lib-item:active{cursor:grabbing;}
.lib-item svg{width:52px;height:34px;pointer-events:none;}
.lib-item .lib-name{font-size:11px;color:#4a525b;pointer-events:none;text-align:center;}
.lib-hint{font-size:11px;color:#9aa2ab;padding:8px 10px;border-top:1px solid var(--chrome-border);text-align:center;}

#canvas-area{flex:1;position:relative;background:var(--canvas-bg);min-width:0;overflow:hidden;}
#canvas{width:100%;height:100%;display:block;background:var(--canvas-bg);cursor:default;}
#canvas.mode-wire{cursor:crosshair;}
#canvas.mode-text{cursor:text;}
#canvas.panning{cursor:grabbing;}
#canvas.space-pan{cursor:grab;}

#status-bar{
  position:absolute;left:0;bottom:0;right:0;height:22px;
  display:flex;align-items:center;justify-content:space-between;
  padding:0 10px;font-size:11px;color:#6b7481;
  background:rgba(244,246,248,.9);border-top:1px solid var(--chrome-border);
  pointer-events:none;
}
#coord-readout{font-family:var(--mono);}

#properties{
  width:230px;flex:none;background:var(--panel-bg);
  border-left:1px solid var(--chrome-border);
  display:flex;flex-direction:column;
}
#prop-body{flex:1;overflow-y:auto;padding:10px;}
.prop-empty{color:#9aa2ab;font-size:13px;text-align:center;padding:20px 0;}
.prop-section{margin-bottom:14px;}
.prop-section h4{margin:0 0 6px;font-size:11px;color:#8a929b;font-weight:600;text-transform:uppercase;letter-spacing:.04em;}
.prop-field{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;gap:8px;}
.prop-field label{font-size:12px;color:#4a525b;flex:none;}
.prop-field input[type=text],
.prop-field input[type=number],
.prop-field select{
  font-family:var(--ui);font-size:12px;padding:3px 6px;
  border:1px solid var(--chrome-border);border-radius:4px;width:120px;background:#fff;
}
.prop-field input[type=number]{width:70px;}
.prop-field.full{flex-direction:column;align-items:stretch;}
.prop-field.full input{width:100%;}
.prop-field input[type=checkbox]{width:auto;}
.sub-buttons{display:flex;flex-wrap:wrap;gap:3px;margin-top:4px;}
.sub-buttons button{font-size:11px;padding:2px 6px;border:1px solid var(--chrome-border);background:#fff;border-radius:3px;cursor:pointer;}
.sub-buttons button:hover{background:var(--accent-soft);}
.prop-hint{font-size:11px;color:#9aa2ab;margin-top:2px;}
.prop-row-btns{display:flex;gap:4px;margin-top:6px;}
.prop-row-btns button{flex:1;font-size:12px;padding:4px;border:1px solid var(--chrome-border);background:#fff;border-radius:4px;cursor:pointer;}
.prop-row-btns button:hover{background:#eef1f4;}

/* ---------- 模态 ---------- */
.modal[hidden]{display:none !important;}

.modal{position:fixed;inset:0;background:rgba(20,24,28,.35);display:flex;align-items:center;justify-content:center;z-index:100;}
.modal-box{background:#fff;border-radius:10px;padding:18px 20px;width:280px;box-shadow:0 8px 30px rgba(0,0,0,.25);}
.modal-title{font-weight:600;font-size:15px;margin-bottom:12px;}
.modal-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.modal-row label{font-size:13px;color:#4a525b;}
.modal-row select{font-size:13px;padding:4px 8px;border:1px solid var(--chrome-border);border-radius:5px;}
.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:14px;}
.modal-actions button{font-size:13px;padding:6px 14px;border:1px solid var(--chrome-border);background:#f4f6f8;border-radius:6px;cursor:pointer;}
.modal-actions button.primary{background:var(--accent);color:#fff;border-color:var(--accent);}

/* ---------- 画布内 SVG 交互样式 ---------- */
.comp-hit{fill:transparent;stroke:none;}
.wire-hit{stroke:transparent;fill:none;stroke-linecap:round;}
.sel-box{fill:none;stroke:var(--sel);stroke-width:1;stroke-dasharray:4 3;vector-effect:non-scaling-stroke;}
.marquee{fill:rgba(28,109,208,.08);stroke:var(--sel);stroke-width:1;stroke-dasharray:4 3;vector-effect:non-scaling-stroke;}
.port-dot{fill:#fff;stroke:var(--port);stroke-width:1.5;vector-effect:non-scaling-stroke;}
.port-dot.hot{fill:var(--port);}
.wire-preview{fill:none;stroke:var(--accent);stroke-width:2;stroke-dasharray:5 4;vector-effect:non-scaling-stroke;}
.waypoint-handle{fill:#fff;stroke:var(--sel);stroke-width:1.5;vector-effect:non-scaling-stroke;cursor:move;}
.text-edit-caret{}


/* ===== v2 新增 ===== */
#lib-search {
  display: block; width: calc(100% - 16px); margin: 6px 8px 4px;
  padding: 5px 8px; font-size: 12px; border: 1px solid var(--chrome-border, #d7dde3);
  border-radius: 5px; outline: none;
}
#lib-search:focus { border-color: #7aa7e8; }
.lib-cat { border-bottom: 1px solid #eef1f4; }
.lib-cat summary {
  cursor: pointer; padding: 6px 10px; font-size: 12px; font-weight: 600;
  color: #4a5560; user-select: none; list-style: none;
}
.lib-cat summary::-webkit-details-marker { display: none; }
.lib-cat summary::before { content: '▸ '; color: #9aa6b2; }
.lib-cat[open] summary::before { content: '▾ '; }
.lib-cat-body { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; padding: 2px 6px 8px; }
.num-unit { display: flex; gap: 4px; }
.num-unit input { flex: 1; min-width: 0; }
.num-unit select { width: 58px; }
.check-body { max-height: 320px; overflow-y: auto; margin: 8px 0; }
.check-item { padding: 6px 8px; font-size: 12.5px; border-radius: 5px; margin-bottom: 4px; }
.check-error { background: #fde8e8; color: #b91c1c; }
.check-warn  { background: #fef6e0; color: #92400e; }
.check-info  { background: #eaf3fd; color: #1d4ed8; }

/* ---------- 仿真：运行电流按钮的运行态（绿色，与主工具高亮同风格） ---------- */
#toolbar button.sim-running{
  background:#33a852;border-color:#2b8f45;color:#fff;
}
#toolbar button.sim-running:hover:not(:disabled){background:#2b8f45;border-color:#237638;}
/* 仿真浮层不响应鼠标（双保险，属性里也设了 pointer-events） */
#sim-layer{pointer-events:none;}

/* ---------- 滑动变阻器滑片交互 ---------- */
svg.slider-hover{cursor:ew-resize;}
svg.slider-dragging{cursor:ew-resize;}
.rheo-slider-glow{stroke:#2b6cb0;stroke-width:5;stroke-linecap:round;opacity:0.25;pointer-events:none;}
.rheo-slider-grip{fill:#fff;stroke:#2b6cb0;stroke-width:2;pointer-events:none;}
.rheo-port-label{pointer-events:none;user-select:none;font-family:var(--ui);}
.rheo-tip rect{fill:#fff;opacity:0.95;stroke:#c9d4de;stroke-width:1;}
.rheo-tip text{fill:#334;font-family:var(--ui);pointer-events:none;}
.rheo-tip{pointer-events:none;}

/* ---------- 开关状态大按钮 ---------- */
.switch-toggle-btn{
  width:100%;padding:7px 10px;border:1px solid #c9803a;border-radius:6px;
  background:#fdf3e7;color:#a25b12;cursor:pointer;font-size:13px;
}
.switch-toggle-btn.on{background:#e7f6ea;border-color:#4d9e63;color:#22703a;}
.switch-toggle-btn:hover{filter:brightness(0.97);}

/* ---------- 属性面板只读行 ---------- */
.prop-readonly{color:#456;font-size:12.5px;line-height:1.5;}

/* ============================================================
 * v5 新增：仿真模式面板（暂态 / 交流）
 * ============================================================ */
#sim-panel{
  flex:none;background:var(--panel-bg);
  border-top:1px solid var(--chrome-border);
  display:flex;flex-direction:column;
  max-height:46vh;
}
#sim-panel-header{
  display:flex;align-items:center;justify-content:space-between;
  padding:4px 12px;border-bottom:1px solid var(--chrome-border);
  font-size:12px;font-weight:600;color:#5a636d;letter-spacing:.05em;
}
#sim-panel-collapse{
  font-size:11px;padding:2px 10px;border:1px solid var(--chrome-border);
  background:#fff;border-radius:4px;cursor:pointer;
}
#sim-panel-body{overflow-y:auto;padding:8px 12px;}
#sim-panel-body.collapsed{display:none;}

.sim-controls{
  display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:6px;
}
.sim-btn{
  font-family:var(--ui);font-size:12.5px;padding:5px 12px;
  border:1px solid #c4cbd2;background:#fff;border-radius:6px;cursor:pointer;color:#2f3740;
}
.sim-btn:hover:not(:disabled){background:#eef1f4;}
.sim-btn:disabled{opacity:.45;cursor:not-allowed;}
.sim-btn.primary{background:#2f9e44;border-color:#27883a;color:#fff;font-weight:600;}
.sim-btn.primary:hover:not(:disabled){background:#2b8f3e;}
.sim-sep{width:1px;height:20px;background:var(--chrome-border);margin:0 4px;}
.sim-lab{font-size:12px;color:#4a525b;display:flex;align-items:center;gap:3px;}
.sim-controls input[type=number]{
  width:76px;font-size:12px;padding:3px 6px;
  border:1px solid var(--chrome-border);border-radius:4px;
}
.sim-controls select{
  font-size:12px;padding:3px 6px;border:1px solid var(--chrome-border);border-radius:4px;background:#fff;
}
.sim-status{font-size:12px;color:#2b3138;padding:2px 0 4px;font-family:var(--mono);}
.sim-msgs{margin-bottom:4px;}
.sim-msgs .check-item{margin-bottom:3px;}

.sim-flex{display:flex;gap:10px;align-items:flex-start;}
.sim-side{flex:none;width:210px;max-height:300px;overflow-y:auto;}
.sim-side-title{font-size:11px;font-weight:600;color:#8a929b;text-transform:uppercase;letter-spacing:.04em;margin:2px 0 4px;}
.sim-plotwrap{flex:1;min-width:0;}
.sim-plotwrap canvas{display:block;width:100%;background:#fff;border:1px solid var(--chrome-border);border-radius:6px;}
.curve-opt{
  display:flex;align-items:center;gap:5px;font-size:12px;color:#3a424c;
  padding:2px 0;cursor:pointer;user-select:none;
}
.curve-swatch{display:inline-block;width:12px;height:4px;border-radius:2px;flex:none;}
.sim-teach{margin-top:6px;font-size:12.5px;color:#3a424c;line-height:1.55;}
.teach-line{padding:2px 0;}
.teach-line b{color:#1c5aa0;}

/* 交流结果表 */
.ac-tablewrap{overflow-x:auto;margin-bottom:8px;}
.ac-table{border-collapse:collapse;font-size:12px;white-space:nowrap;}
.ac-table th,.ac-table td{
  border:1px solid var(--chrome-border);padding:3px 8px;text-align:right;font-family:var(--mono);
}
.ac-table th{background:#eef1f4;font-family:var(--ui);font-weight:600;color:#4a525b;}
.ac-table td.ac-name{text-align:left;font-family:var(--ui);}

/* 相量图 */
.phasor-box{margin-top:6px;}
.phasor-svg{width:100%;max-width:300px;background:#fff;border:1px solid var(--chrome-border);border-radius:6px;}
.phasor-legend{font-size:12px;color:#3a424c;margin-top:4px;line-height:1.5;}
.phasor-leg-item{display:flex;align-items:center;gap:5px;}

/* 频率扫描 */
.sweep-box{margin-top:10px;border-top:1px dashed var(--chrome-border);padding-top:8px;}
.sweep-plots{display:flex;gap:10px;}
.sweep-plots .sim-plotwrap{flex:1;}

/* 手机端：面板可折叠、纵向排布 */
@media (max-width: 760px){
  .sim-flex{flex-direction:column;}
  .sim-side{width:100%;max-height:140px;}
  .sweep-plots{flex-direction:column;}
  #sim-panel{max-height:55vh;}
}

/* ============================================================
 * v6 新增：示例库 / 实验说明 / 帮助 / 验算表 / 响应式加固
 * ============================================================ */
.modal-box.wide{width:560px;max-width:94vw;max-height:80vh;display:flex;flex-direction:column;}
.ex-list{overflow-y:auto;flex:1;margin:0 -4px;padding:0 4px;}
.ex-group{font-size:12px;font-weight:600;color:#8a929b;letter-spacing:.05em;margin:10px 0 4px;border-bottom:1px solid var(--chrome-border);padding-bottom:3px;}
.ex-item{
  display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;
  text-align:left;padding:7px 10px;margin:3px 0;border:1px solid var(--chrome-border);
  border-radius:7px;background:#fff;cursor:pointer;font-family:var(--ui);
}
.ex-item:hover{background:#eef4fb;border-color:#8fb8e8;}
.ex-name{font-size:13px;font-weight:600;color:#2b3138;}
.ex-goal{font-size:11.5px;color:#6a727c;line-height:1.4;}
.help-body{font-size:12.5px;color:#3a424c;line-height:1.65;overflow-y:auto;max-height:60vh;}
.help-body .help-h{font-weight:600;color:#1c5aa0;margin:10px 0 2px;}
.help-body p{margin:4px 0;}

/* 实验说明条 */
#exp-notes{flex:none;background:#f7f9ee;border-top:1px solid var(--chrome-border);}
#exp-notes-header{
  display:flex;align-items:center;justify-content:space-between;
  padding:4px 12px;font-size:12px;font-weight:600;color:#5a636d;
}
#exp-notes-header button{
  font-size:11px;padding:2px 9px;border:1px solid var(--chrome-border);
  background:#fff;border-radius:4px;cursor:pointer;margin-left:6px;
}
#exp-notes-body{padding:2px 14px 8px;font-size:12.5px;color:#3a424c;line-height:1.6;max-height:22vh;overflow-y:auto;}
#exp-notes-body.collapsed{display:none;}
#exp-notes-body ol{margin:2px 0 2px 20px;padding:0;}
.exp-sec{padding:1px 0;}
.exp-sec b{color:#4a7a1e;}

/* 理论验算表 */
.sim-verify{margin-top:8px;}
.verify-title{font-size:12.5px;font-weight:600;color:#8a5a10;margin-bottom:3px;}
.verify-table{border-collapse:collapse;font-size:12px;margin-bottom:4px;}
.verify-table th,.verify-table td{border:1px solid #e0d6b8;padding:3px 9px;text-align:right;font-family:var(--mono);}
.verify-table th{background:#f7f1dd;font-family:var(--ui);color:#6a5a2a;font-weight:600;}
.verify-table td.v-name{text-align:left;font-family:var(--ui);}
.verify-note{font-size:12px;color:#6a5a2a;padding:1px 0;}

/* 工具栏窄屏不溢出：横向滚动 + 稍紧凑 */
@media (max-width: 980px){
  #toolbar{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:thin;}
  #toolbar button{white-space:nowrap;}
}
/* 触屏按钮加大 */
@media (pointer: coarse){
  .sim-btn,#toolbar button,#exp-notes-header button{padding:8px 14px;font-size:13px;}
  .ex-item{padding:10px 12px;}
}

/* v7：变阻箱快速调节行 */
.rb-quick{display:flex;align-items:center;gap:8px;}
.rb-btn{
  width:34px;height:30px;font-size:17px;font-weight:600;line-height:1;
  border:1px solid #c4cbd2;background:#fff;border-radius:6px;cursor:pointer;color:#2f3740;
  user-select:none;
}
.rb-btn:hover{background:#eef1f4;}
.rb-btn:active{background:#dfe6ec;transform:translateY(1px);}
.rb-val{font-family:var(--mono);font-size:13px;min-width:72px;text-align:center;color:#1c5aa0;font-weight:600;}

/* v8：直流理论验算区（含二极管的简单串联电路才显示，位于画布下方） */
#dc-verify{
  flex:none;background:#f4f8f2;border-top:1px solid var(--chrome-border);
  padding:6px 14px 10px;font-size:12.5px;color:#3a424c;line-height:1.6;
  max-height:26vh;overflow-y:auto;
}
#dc-verify .verify-title{font-weight:600;margin-bottom:4px;}

/* ============================================================
 * v4.5.0：小灯泡灯丝非线性 —— 属性栏按钮与伏安特性曲线面板
 * ============================================================ */
.prop-btn{
  font-family:var(--ui);font-size:12.5px;padding:5px 10px;width:100%;
  border:1px solid var(--chrome-border);background:#f4f6f8;
  border-radius:6px;cursor:pointer;color:#2b3138;
}
.prop-btn:hover{background:#eaeef2;}
.bulb-curve-body{overflow-y:auto;flex:1;margin:0 -4px;padding:0 4px;}
.bulb-curve-plot{width:100%;height:auto;display:block;background:#fff;border-radius:6px;}
.bulb-curve-ctl{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin:10px 0 6px;font-size:12.5px;color:#4a525b;}
.bulb-curve-ctl label{display:flex;align-items:center;gap:5px;}
.bulb-curve-ctl input[type=number]{width:70px;font-size:12.5px;padding:3px 6px;border:1px solid var(--chrome-border);border-radius:5px;}
.bulb-curve-note{font-size:11.5px;color:#8a929b;line-height:1.6;margin-top:8px;}
.bulb-curve-tbl{width:100%;border-collapse:collapse;font-size:12px;margin-top:8px;}
.bulb-curve-tbl th,.bulb-curve-tbl td{border:1px solid var(--chrome-border);padding:3px 6px;text-align:right;}
.bulb-curve-tbl th{background:#f4f6f8;font-weight:600;color:#4a525b;}
