/* ======================================================================
   Protobuf JSON 互转 · 独立设计（hex 字节流 / 红色报文主题）
   浅色 = 暖灰纸 + 信号红；深色 = 炭黑 + 霓虹红
   ====================================================================== */
.pb{
  --ink:#26191a; --sub:#6f5b5d; --faint:#a89092;
  --bg:#f6f2f1; --card:#ffffff; --card2:#f1e9e8; --line:#e3d5d4; --line2:#ece1e0;
  --pri:#c1121f; --pri-2:#e5383b; --pri-soft:#fbe4e5; --pri-ink:#9d0e18;
  --acc:#7c2d12; --acc-soft:#f7e8dd;
  --ok:#0d9488;
  --red:#c1121f; --red-soft:#fbe4e5;
  --r:14px;
  --shadow:0 1px 2px rgba(38,25,26,.05),0 10px 28px rgba(193,18,31,.08);
  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:
    repeating-linear-gradient(90deg, rgba(193,18,31,.045) 0 1px, transparent 1px 44px),
    radial-gradient(820px 400px at 88% -130px, rgba(229,56,59,.10), transparent 60%),
    var(--bg);
  padding:0 16px 56px;
}
:root[data-theme="dark"] .pb{
  --ink:#f2e8e8; --sub:#c0a7a9; --faint:#8a6f71;
  --bg:#16090b; --card:#1f1114; --card2:#2a171a; --line:#3d2226; --line2:#331d20;
  --pri:#f87171; --pri-2:#fca5a5; --pri-soft:rgba(248,113,113,.14); --pri-ink:#fecaca;
  --acc:#fdba74; --acc-soft:rgba(253,186,116,.12);
  --ok:#2dd4bf;
  --red:#f87171; --red-soft:rgba(248,113,113,.14);
  --shadow:0 1px 2px rgba(0,0,0,.4),0 12px 32px rgba(0,0,0,.45);
  background:
    repeating-linear-gradient(90deg, rgba(248,113,113,.06) 0 1px, transparent 1px 44px),
    radial-gradient(820px 400px at 88% -130px, rgba(229,56,59,.14), transparent 60%),
    var(--bg);
}
.pb *{box-sizing:border-box;}
.pb b{font-weight:700;}
.pb-wrap{max-width:1140px;margin:0 auto;}
.pb textarea,.pb pre,.pb code,.pb .pb-mono{font-family:"JetBrains Mono",ui-monospace,SFMono-Regular,Consolas,"Courier New",monospace;}

.pb-hero{margin-top:22px;border-radius:16px;overflow:hidden;box-shadow:var(--shadow);
  background:linear-gradient(115deg,#7f1d1d,#c1121f 55%,#450a0a 120%);position:relative;}
:root[data-theme="dark"] .pb-hero{background:linear-gradient(115deg,#3d0a0e,#7f1d1d 55%,#1c0507 120%);}
.pb-hexpattern{position:absolute;inset:0;opacity:.16;font-family:ui-monospace,Consolas,monospace;font-size:12px;line-height:2;color:#fff;word-break:break-all;padding:10px 14px;pointer-events:none;}
.pb-hero-body{position:relative;padding:24px 28px;}
.pb-hero h1{margin:0 0 8px;font-size:clamp(23px,3.4vw,31px);font-weight:900;color:#fff;line-height:1.3;}
.pb-hero p{margin:0;color:#f3d3d5;font-size:15px;max-width:820px;}
.pb-hero p em{font-style:normal;color:#fecaca;font-weight:700;}

.pb-desk{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:20px;align-items:start;}
@media (max-width:940px){.pb-desk{grid-template-columns:1fr;}}
.pb-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:18px;}
.pb-card h2{margin:0 0 4px;font-size:16px;font-weight:800;display:flex;align-items:center;gap:8px;}
.pb-card h2::before{content:"";width:10px;height:10px;border-radius:3px;background:var(--pri);}
.pb-tip{font-size:12.5px;color:var(--sub);margin:0 0 10px;}
.pb-ta{width:100%;min-height:200px;resize:vertical;padding:12px 14px;border-radius:10px;border:1px solid var(--line);background:var(--card2);color:var(--ink);font-size:13px;line-height:1.7;outline:none;}
.pb-ta:focus{border-color:var(--pri-2);box-shadow:0 0 0 3px var(--pri-soft);}
.pb-pre{width:100%;min-height:120px;max-height:300px;overflow:auto;border-radius:10px;border:1px solid var(--line);background:var(--card2);color:var(--ink);padding:12px 14px;font-size:12.5px;line-height:1.65;white-space:pre;margin:0;}
.pb-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:12px;}
.pb-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;}
.pb-chip:hover{border-color:var(--pri-2);color:var(--pri-ink);}
.pb-chip.on{background:var(--pri);border-color:var(--pri);color:#fff;}
.pb-btn{border:none;border-radius:10px;padding:9px 20px;font-size:14px;font-weight:800;cursor:pointer;transition:all .15s;}
.pb-btn-go{background:var(--pri);color:#fff;}
.pb-btn-go:hover{background:var(--pri-2);}
.pb-btn-ghost{background:var(--card2);color:var(--pri-ink);border:1px solid var(--line);}
.pb-btn-ghost:hover{border-color:var(--pri-2);}
.pb-msg{margin-top:10px;font-size:13px;min-height:20px;font-weight:600;}
.pb-msg.err{color:var(--red);}
.pb-msg.ok{color:var(--ok);}
.pb-stats{display:flex;gap:12px;flex-wrap:wrap;margin-top:10px;}
.pb-stat{font-size:12.5px;color:var(--sub);background:var(--card2);border:1px solid var(--line2);border-radius:8px;padding:4px 10px;}
.pb-stat b{color:var(--pri-ink);}

/* 字段树 */
.pb-tree{margin:0;padding:0 0 0 4px;list-style:none;font-size:13px;}
.pb-tree ul{margin:2px 0 6px 18px;padding:0 0 0 10px;list-style:none;border-left:2px solid var(--line);}
.pb-node{display:flex;flex-wrap:wrap;align-items:center;gap:7px;padding:4px 8px;border-radius:8px;background:var(--card2);margin-bottom:4px;word-break:break-all;}
.pb-fno{font-family:ui-monospace,Consolas,monospace;font-weight:800;color:#fff;background:var(--pri);border-radius:6px;padding:1px 7px;font-size:12px;}
.pb-wt{font-size:11px;font-weight:700;color:var(--pri-ink);background:var(--pri-soft);border-radius:6px;padding:1px 7px;}
.pb-val{font-family:ui-monospace,Consolas,monospace;font-size:12.5px;color:var(--ink);}
.pb-x{font-size:11.5px;color:var(--sub);}
.pb-x b{color:var(--acc);}

/* wire type 速查 */
.pb-cheat{margin-top:18px;}
.pb-cheat table{width:100%;border-collapse:collapse;font-size:13px;}
.pb-cheat th,.pb-cheat td{border:1px solid var(--line);padding:7px 10px;text-align:left;}
.pb-cheat th{background:var(--card2);font-weight:700;white-space:nowrap;}
.pb-cheat td:first-child{font-family:ui-monospace,Consolas,monospace;font-weight:700;color:var(--pri-ink);white-space:nowrap;}

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

/* ---------- 深度面板：批量解码与 wire 字节构成 ---------- */
.pb-deep{margin-top:18px;background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:18px;min-width:0;}
.pb-deep-head h2{margin:0 0 4px;font-size:16px;font-weight:800;display:flex;align-items:center;gap:8px;}
.pb-deep-head h2::before{content:"";width:10px;height:10px;border-radius:3px;background:var(--pri-2);}
.pb-deep-head p{margin:0 0 14px;font-size:12.5px;color:var(--sub);}
.pb-deep-grid{display:grid;grid-template-columns:minmax(0,320px) minmax(0,1fr);gap:16px;align-items:start;}
.pb-deep-panel{min-width:0;}
.pb-deep-panel + .pb-deep-panel{border-left:1px solid var(--line2);padding-left:16px;}
.pb-deep-cap{font-size:12px;font-weight:700;color:var(--sub);margin:0 0 6px;}
.pb-deep-svg{width:100%;height:auto;display:block;background:var(--card2);border:1px solid var(--line);border-radius:10px;}
.pb-deep-svg text{font-family:ui-monospace,Consolas,monospace;}
.pb-deep-tblwrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin-top:10px;min-width:0;}
.pb-deep-tbl{width:100%;border-collapse:collapse;font-size:12px;min-width:480px;}
.pb-deep-tbl th,.pb-deep-tbl td{padding:6px 8px;border-bottom:1px solid var(--line2);text-align:left;white-space:nowrap;color:var(--ink);}
.pb-deep-tbl thead th{background:var(--card2);color:var(--sub);font-size:11.5px;font-weight:700;}
.pb-deep-tbl td.ok{color:var(--ok);font-weight:700;}
.pb-deep-tbl td.no{color:var(--red);}
.pb-deep-tbl td.num{font-family:ui-monospace,Consolas,monospace;color:var(--pri-ink);}
.pb-deep-tbl td.json{max-width:260px;overflow:hidden;text-overflow:ellipsis;font-family:ui-monospace,Consolas,monospace;font-size:11.5px;color:var(--sub);}
.pb-deep-note{margin:8px 0 0;font-size:11.5px;color:var(--faint);line-height:1.6;}
.pb-deep-empty{color:var(--faint);font-size:13px;padding:10px 0 2px;}
@media (max-width:860px){
  .pb-deep-grid{grid-template-columns:1fr;}
  .pb-deep-panel + .pb-deep-panel{border-left:none;padding-left:0;border-top:1px solid var(--line2);padding-top:14px;}
}
