/* Genesis 节点客户端 — 自定义样式
 * 大部分布局/颜色用 Tailwind utility class，这里只放无法用 utility 表达的内容：
 * 自定义动画、伪元素背景、终端 / 日志专用样式
 */

html, body { background:#0b1220; color:#e2e8f0; }

.hex { word-break:break-all; line-height:1.55; letter-spacing:.02em; }

.card { background:rgba(30,41,59,.55); border:1px solid rgba(148,163,184,.12); }
.card-glow { box-shadow: 0 0 0 1px rgba(34,211,238,.18), 0 12px 40px -12px rgba(34,211,238,.2); }

/* 网格 + 渐变光晕背景 */
body::before {
  content:""; position:fixed; inset:0; pointer-events:none; z-index:-1;
  background:
    radial-gradient(circle at 12% 8%, rgba(34,211,238,.10), transparent 40%),
    radial-gradient(circle at 92% 0%, rgba(124,58,237,.10), transparent 40%),
    linear-gradient(rgba(148,163,184,.04) 1px, transparent 1px) 0 0/40px 40px,
    linear-gradient(90deg, rgba(148,163,184,.04) 1px, transparent 1px) 0 0/40px 40px;
}

/* 已连接绿色脉冲点 */
.pulse-dot::before {
  content:""; display:inline-block; width:.6rem; height:.6rem; border-radius:9999px;
  background:#22c55e; margin-right:.45rem; vertical-align:middle;
  box-shadow:0 0 0 0 rgba(34,197,94,.6); animation:pulse 1.8s infinite;
}
@keyframes pulse {
  0%   { box-shadow:0 0 0 0 rgba(34,197,94,.6); }
  70%  { box-shadow:0 0 0 10px rgba(34,197,94,0); }
  100% { box-shadow:0 0 0 0 rgba(34,197,94,0); }
}

/* 终端 / 日志容器 */
.terminal { background:#05080f; border:1px solid #1e293b; }
.terminal-body {
  font-family:'SF Mono','Menlo','Monaco','ui-monospace','Consolas',monospace;
  font-size:12.5px; line-height:1.65;
  padding:14px 16px; min-height:280px; max-height:480px; overflow:auto;
  white-space:pre-wrap; word-break:break-all;
}
.term-prompt   { color:#22d3ee; }
.term-user     { color:#a3e635; }
.term-cmd      { color:#e2e8f0; }
.term-comment  { color:#64748b; }
.term-out      { color:#cbd5e1; }
.term-ok       { color:#34d399; }
.term-err      { color:#fb7185; }
.term-dim      { color:#475569; }

pre::-webkit-scrollbar, .terminal-body::-webkit-scrollbar { height:8px; width:8px; }
pre::-webkit-scrollbar-thumb, .terminal-body::-webkit-scrollbar-thumb { background:#334155; border-radius:4px; }

/* AuthorID 4 步生成动画 */
.step           { display:flex; align-items:center; gap:.75rem; padding:.45rem .25rem; transition:color .25s; }
.step .step-ic  { width:22px; height:22px; border-radius:9999px; border:1.5px solid #334155;
                  display:grid; place-items:center; flex:none; transition:all .25s; }
.step.pending   { color:#475569; }
.step.active    { color:#67e8f9; }
.step.active .step-ic   { border-color:#22d3ee; background:rgba(34,211,238,.08); }
.step.done      { color:#a7f3d0; }
.step.done .step-ic     { border-color:#34d399; background:#34d399; color:#0b1220; }
.spin           { animation:spin 1s linear infinite; }
@keyframes spin { to { transform:rotate(360deg); } }

/* 通用淡入淡出 */
.fade-in   { animation:fadeIn .35s ease both; }
.fade-out  { animation:fadeOut .25s ease both; }
@keyframes fadeIn  { from { opacity:0; transform:translateY(4px); } to { opacity:1; transform:none; } }
@keyframes fadeOut { to { opacity:0; transform:translateY(-4px); } }

/* hex 逐段揭示尾部光标 */
.hex-reveal { position:relative; }
.hex-reveal::after {
  content:"▌"; color:#22d3ee; margin-left:2px; animation:blink 1s steps(2,start) infinite;
}
@keyframes blink { to { visibility:hidden; } }

/* 已锁定徽章弹出 */
.badge-pop { animation:badgePop .45s cubic-bezier(.34,1.56,.64,1) both; }
@keyframes badgePop { 0% { transform:scale(.6); opacity:0; } 60% { transform:scale(1.1); } 100% { transform:scale(1); opacity:1; } }

/* hex 出现时的青光闪烁 */
.glow-flash { animation:glowFlash 1.2s ease-out both; }
@keyframes glowFlash {
  0%   { box-shadow:0 0 0 0 rgba(34,211,238,0); }
  30%  { box-shadow:0 0 0 6px rgba(34,211,238,.25), 0 0 60px rgba(34,211,238,.35); }
  100% { box-shadow:0 0 0 0 rgba(34,211,238,0); }
}

/* 日志预设按钮 */
.log-preset {
  text-align:left; padding:.55rem .8rem; border-radius:8px;
  background:rgba(15,23,42,.7);
  border:1px solid rgba(148,163,184,.15);
  transition:all .18s;
  display:flex; align-items:flex-start; gap:.55rem; min-width:0;
}
.log-preset:hover { border-color:rgba(34,211,238,.45); background:rgba(34,211,238,.06); }
.log-preset:disabled { opacity:.5; cursor:not-allowed; }
.log-preset.active { border-color:rgba(34,211,238,.7); background:rgba(34,211,238,.12); box-shadow:0 0 0 1px rgba(34,211,238,.4); }
.log-preset .lp-title { font-size:12.5px; font-weight:600; color:#e2e8f0; line-height:1.25; }
.log-preset .lp-cmd   { font-size:10.5px; color:#64748b; font-family:'SF Mono','Menlo','Monaco','ui-monospace','Consolas',monospace; line-height:1.35; margin-top:2px; }
.log-preset:hover .lp-title { color:#67e8f9; }

/* 日志行颜色 */
.log-line       { padding:1px 0; }
.log-imported   { color:#a3e635; }
.log-idle       { color:#94a3b8; }
.log-consensus  { color:#22d3ee; }
.log-warn       { color:#fbbf24; }
.log-error      { color:#fb7185; }
.log-info       { color:#cbd5e1; }
.log-stream-dot { display:inline-block; width:.45rem; height:.45rem; border-radius:9999px;
                  background:#22c55e; box-shadow:0 0 6px rgba(34,197,94,.7); animation:pulse 1.4s infinite; }
