/* ======================================================================
   SSE 流式接口测试器 · 独立设计（声呐雷达主题）
   浅色 = 雾白 + 靛蓝声呐；深色 = 午夜蓝 + 青色脉冲
   ====================================================================== */
.sst{
  --ink:#1e2138; --sub:#5d6280; --faint:#9aa0bd;
  --bg:#f5f6fb; --card:#ffffff; --card2:#eef0f8; --line:#dfe2f0; --line2:#e8ebf5;
  --pri:#4f46e5; --pri-2:#818cf8; --pri-soft:#e9e7fc; --pri-ink:#3730a3;
  --cyan:#0e7490; --cyan-soft:#e0f4f9;
  --green:#15803d; --green-soft:#e5f6ea;
  --red:#c02626; --red-soft:#fdeaea;
  --amber:#b45309; --amber-soft:#fdf3e2;
  --r:14px;
  --shadow:0 1px 2px rgba(30,33,56,.05),0 10px 28px rgba(30,33,56,.07);
  color:var(--ink);
  font-family:-apple-system,"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",system-ui,sans-serif;
  font-size:15px; line-height:1.75;
  background:
    radial-gradient(760px 380px at 92% -140px, rgba(79,70,229,.09), transparent 60%),
    radial-gradient(620px 320px at -6% 150px, rgba(14,116,144,.07), transparent 60%),
    var(--bg);
  padding:0 16px 56px;
}
:root[data-theme="dark"] .sst{
  --ink:#e6e8f5; --sub:#a3a8c6; --faint:#6f7596;
  --bg:#101223; --card:#181a30; --card2:#1e2138; --line:#2c3052; --line2:#242847;
  --pri:#818cf8; --pri-2:#a5b4fc; --pri-soft:rgba(129,140,248,.14); --pri-ink:#c7d2fe;
  --cyan:#22d3ee; --cyan-soft:rgba(34,211,238,.12);
  --green:#4ade80; --green-soft:rgba(74,222,128,.12);
  --red:#f87171; --red-soft:rgba(248,113,113,.12);
  --amber:#fbbf24; --amber-soft:rgba(251,191,36,.12);
  --shadow:0 1px 2px rgba(0,0,0,.4),0 12px 32px rgba(0,0,0,.4);
}
.sst *{box-sizing:border-box;}
.sst b{font-weight:700;}
.sst-wrap{max-width:1140px;margin:0 auto;}
.sst code,.sst pre,.sst input,.sst-mono{font-family:"JetBrains Mono",ui-monospace,SFMono-Regular,Consolas,"Courier New",monospace;}

/* ---------- 首屏 Hero：声呐 ---------- */
.sst-hero{margin-top:22px;border:1px solid var(--line);border-radius:18px;background:var(--card);box-shadow:var(--shadow);padding:26px 28px;display:flex;gap:26px;align-items:center;flex-wrap:wrap;}
.sst-sonar{position:relative;width:92px;height:92px;flex:none;border-radius:50%;background:radial-gradient(circle,var(--pri-soft) 0%,var(--card2) 70%);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;}
.sst-sonar i{position:absolute;inset:0;border-radius:50%;border:2px solid var(--pri-2);opacity:0;animation:sstPing 2.6s ease-out infinite;}
.sst-sonar i:nth-child(2){animation-delay:.9s;}
.sst-sonar i:nth-child(3){animation-delay:1.8s;}
@keyframes sstPing{0%{transform:scale(.35);opacity:.9;}100%{transform:scale(1.15);opacity:0;}}
.sst-core{width:16px;height:16px;border-radius:50%;background:var(--faint);transition:background .2s;}
.sst-core.on{background:var(--green);box-shadow:0 0 12px var(--green);}
.sst-core.err{background:var(--red);box-shadow:0 0 12px var(--red);}
.sst-core.demo{background:var(--cyan);box-shadow:0 0 12px var(--cyan);}
.sst-hero h1{margin:0 0 6px;font-size:clamp(23px,3.4vw,30px);font-weight:900;}
.sst-hero p{margin:0;color:var(--sub);font-size:14.5px;max-width:780px;}
.sst-hero p em{font-style:normal;color:var(--pri-ink);font-weight:700;}

/* ---------- 工作台 ---------- */
.sst-desk{display:grid;grid-template-columns:400px 1fr;gap:18px;margin-top:20px;}
@media (max-width:940px){.sst-desk{grid-template-columns:1fr;}}
.sst-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:18px;}
.sst-card h2{margin:0 0 10px;font-size:16px;font-weight:800;display:flex;align-items:center;gap:8px;}
.sst-card h2 .sst-num{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:7px;background:var(--pri);color:#fff;font-size:12px;font-weight:800;}
:root[data-theme="dark"] .sst-card h2 .sst-num{color:#101223;}
.sst-field{margin-bottom:10px;}
.sst-field label{display:block;font-size:12.5px;font-weight:700;color:var(--sub);margin-bottom:4px;}
.sst-in{width:100%;padding:9px 12px;border-radius:10px;border:1px solid var(--line);background:var(--card2);color:var(--ink);font-size:13px;outline:none;transition:border-color .15s;}
.sst-in:focus{border-color:var(--pri-2);box-shadow:0 0 0 3px var(--pri-soft);}
.sst-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px;}
.sst-chip{border:1px solid var(--line);background:var(--card2);color:var(--sub);border-radius:999px;padding:5px 14px;font-size:13px;cursor:pointer;font-weight:600;transition:all .15s;}
.sst-chip:hover{border-color:var(--pri-2);color:var(--pri-ink);}
.sst-chip.on{background:var(--pri);border-color:var(--pri);color:#fff;}
:root[data-theme="dark"] .sst-chip.on{color:#101223;}
.sst-btn{border:none;border-radius:10px;padding:9px 18px;font-size:14px;font-weight:800;cursor:pointer;transition:all .15s;}
.sst-btn-go{background:var(--pri);color:#fff;}
:root[data-theme="dark"] .sst-btn-go{color:#101223;}
.sst-btn-go:hover{background:var(--pri-2);}
.sst-btn-stop{background:var(--red);color:#fff;}
.sst-btn-ghost{background:var(--card2);color:var(--pri-ink);border:1px solid var(--line);}
.sst-btn-ghost:hover{border-color:var(--pri-2);}
.sst-msg{margin-top:10px;font-size:13px;min-height:20px;font-weight:600;border-radius:8px;padding:0;}
.sst-msg.show{padding:8px 12px;}
.sst-msg.err{color:var(--red);background:var(--red-soft);}
.sst-msg.ok{color:var(--green);background:var(--green-soft);}
.sst-msg.info{color:var(--amber);background:var(--amber-soft);}
.sst-stats{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px;}
.sst-stat{font-size:12.5px;color:var(--sub);background:var(--card2);border:1px solid var(--line2);border-radius:8px;padding:4px 10px;}
.sst-stat b{color:var(--pri-ink);}

/* ---------- 事件流日志 ---------- */
.sst-log{height:430px;overflow:auto;background:var(--card2);border:1px solid var(--line);border-radius:12px;padding:12px;}
.sst-ev{display:flex;gap:10px;align-items:flex-start;padding:7px 10px;border-radius:9px;margin-bottom:6px;background:var(--card);border:1px solid var(--line2);animation:sstIn .25s ease;}
@keyframes sstIn{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:none;}}
.sst-ev .sst-time{font-size:11.5px;color:var(--faint);white-space:nowrap;padding-top:2px;}
.sst-ev .sst-tag{font-size:11px;font-weight:800;border-radius:6px;padding:2px 8px;white-space:nowrap;}
.sst-tag.t-msg{background:var(--pri-soft);color:var(--pri-ink);}
.sst-tag.t-ev{background:var(--cyan-soft);color:var(--cyan);}
.sst-tag.t-sys{background:var(--amber-soft);color:var(--amber);}
.sst-tag.t-err{background:var(--red-soft);color:var(--red);}
.sst-ev .sst-data{font-size:12.5px;color:var(--ink);word-break:break-all;white-space:pre-wrap;}
.sst-empty{color:var(--faint);font-size:13px;text-align:center;padding:40px 0;}

/* ---------- FAQ ---------- */
.sst-faq{margin-top:34px;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:22px 24px;box-shadow:var(--shadow);}
.sst-faq h2{margin:0 0 12px;font-size:19px;font-weight:900;}
.sst-faq h3{margin:18px 0 6px;font-size:15.5px;font-weight:800;color:var(--pri-ink);}
.sst-faq p{margin:0;color:var(--sub);font-size:14px;}
.sst-faq p b{color:var(--ink);}

/* ======================================================================
   SSE 场景回放 + 帧解析实验室（新增强区块）
   ====================================================================== */
.sst2-lab{margin-top:20px;border:1px solid var(--line);border-radius:var(--r);background:var(--card);box-shadow:var(--shadow);padding:18px;min-width:0;}
.sst2-head{margin-bottom:14px;}
.sst2-head h2{margin:0 0 6px;font-size:17px;font-weight:900;display:flex;align-items:center;gap:8px;}
.sst2-head h2 .sst-num{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:7px;background:var(--pri);color:#fff;font-size:12px;font-weight:800;}
:root[data-theme="dark"] .sst2-head h2 .sst-num{color:#101223;}
.sst2-head p{margin:0;color:var(--sub);font-size:13.5px;}
.sst2-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:14px;min-width:0;}
@media (max-width:900px){.sst2-grid{grid-template-columns:1fr;}}
.sst2-panel{background:var(--card2);border:1px solid var(--line2);border-radius:12px;padding:14px;margin-top:14px;min-width:0;}
.sst2-grid .sst2-panel{margin-top:0;}
.sst2-panel h3{margin:0 0 10px;font-size:14px;font-weight:800;color:var(--ink);}
.sst2-presets{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;}
@media (max-width:560px){.sst2-presets{grid-template-columns:repeat(2,minmax(0,1fr));}}
.sst2-preset{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:10px;padding:8px 10px;text-align:left;cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:700;line-height:1.45;transition:all .15s;min-width:0;}
.sst2-preset small{display:block;font-weight:500;color:var(--sub);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.sst2-preset:hover{border-color:var(--pri-2);}
.sst2-preset.on{background:var(--pri);border-color:var(--pri);color:#fff;}
:root[data-theme="dark"] .sst2-preset.on{color:#101223;}
.sst2-preset.on small{color:rgba(255,255,255,.78);}
:root[data-theme="dark"] .sst2-preset.on small{color:rgba(16,18,35,.75);}
.sst2-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px;}
.sst2-btn{border:1px solid var(--line);background:var(--card);color:var(--pri-ink);border-radius:9px;padding:8px 14px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;transition:all .15s;}
.sst2-btn:hover{border-color:var(--pri-2);}
.sst2-btn-go{background:var(--pri);border-color:var(--pri);color:#fff;}
:root[data-theme="dark"] .sst2-btn-go{color:#101223;}
.sst2-speed{font-size:12.5px;color:var(--sub);display:inline-flex;align-items:center;gap:6px;}
.sst2-speed select{background:var(--card);color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:5px 8px;font-size:12.5px;font-family:inherit;}
.sst2-now{margin-top:10px;background:var(--card);border:1px solid var(--line2);border-radius:10px;padding:10px 12px;font-size:12.5px;color:var(--sub);min-height:52px;word-break:break-all;}
.sst2-now b{color:var(--pri-ink);}
.sst2-now code{display:block;margin-top:6px;white-space:pre-wrap;word-break:break-all;color:var(--ink);font-size:12px;line-height:1.6;font-family:"JetBrains Mono",ui-monospace,Consolas,monospace;}
.sst2-msg{margin-top:8px;font-size:12.5px;font-weight:600;min-height:18px;color:var(--sub);}
.sst2-msg.ok{color:var(--green);}
.sst2-msg.err{color:var(--red);}
.sst2-msg.info{color:var(--amber);}
.sst2-svgwrap{width:100%;overflow-x:auto;background:var(--card);border:1px solid var(--line2);border-radius:10px;margin-top:10px;}
.sst2-svgwrap svg{display:block;width:100%;height:auto;min-width:420px;}
.sst2-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:8px;font-size:12px;color:var(--sub);}
.sst2-legend i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px;vertical-align:middle;background:var(--pri);}
.sst2-legend .l-ping{background:var(--amber);}
.sst2-legend .l-sys{background:var(--faint);}
.sst2-legend .l-done{background:var(--green);}
.sst2-legend .l-err{background:var(--red);}
.sst2-legend .l-notice{background:var(--cyan);}
#sst2Svg .sst2-axis{stroke:var(--line);stroke-width:1.5;}
#sst2Svg .sst2-guide{stroke:var(--pri-2);stroke-width:1.5;stroke-dasharray:3 3;}
#sst2Svg .sst2-tick{fill:var(--faint);font-size:10px;}
#sst2Svg .sst2-cap{fill:var(--sub);font-size:11px;}
#sst2Svg .sst2-dot{stroke:var(--card);stroke-width:2;}
#sst2Svg .sst2-dot.t-delta{fill:var(--pri);}
#sst2Svg .sst2-dot.t-ping{fill:var(--amber);}
#sst2Svg .sst2-dot.t-sys{fill:var(--faint);}
#sst2Svg .sst2-dot.t-done{fill:var(--green);}
#sst2Svg .sst2-dot.t-err{fill:var(--red);}
#sst2Svg .sst2-dot.t-notice{fill:var(--cyan);}
#sst2Svg .sst2-dot.active{stroke:var(--ink);stroke-width:3;}
.sst2-ta{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--ink);padding:10px 12px;font-size:12.5px;font-family:"JetBrains Mono",ui-monospace,Consolas,monospace;line-height:1.65;resize:vertical;outline:none;}
.sst2-ta:focus{border-color:var(--pri-2);box-shadow:0 0 0 3px var(--pri-soft);}
.sst2-tablewrap{width:100%;overflow-x:auto;margin-top:10px;border:1px solid var(--line2);border-radius:10px;background:var(--card);}
.sst2-table{width:100%;border-collapse:collapse;font-size:12px;min-width:560px;}
.sst2-table th{background:var(--card2);color:var(--sub);font-weight:700;text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap;}
.sst2-table td{padding:8px 10px;border-bottom:1px solid var(--line2);color:var(--ink);vertical-align:top;}
.sst2-table tbody tr:last-child td{border-bottom:none;}
.sst2-table td.d{font-family:"JetBrains Mono",ui-monospace,Consolas,monospace;word-break:break-all;max-width:320px;}
.sst2-table tr.bad td{background:var(--red-soft);}
.sst2-table .sst2-empty{text-align:center;color:var(--faint);padding:20px;font-family:inherit;}
#sst2Bars .bar{fill:var(--pri-2);}
#sst2Bars .bar.peak{fill:var(--pri);}
#sst2Bars .sst2-bartext{fill:var(--faint);font-size:9.5px;}
#sst2Bars .sst2-baraxis{stroke:var(--line);}
#sst2Bars .sst2-barcap{fill:var(--sub);font-size:11px;}

