:root{
  --void:#03070d; --deep:#07111c; --panel:#0b1723; --panel-2:#0e1e2d;
  --line:rgba(137,213,255,.15); --line-hi:rgba(137,213,255,.32);
  --ink:#edf8ff; --dim:#9bb3c4; --mut:#60798b;
  --cyan:#66dcff; --cyan-2:#26a9d6; --amber:#ffc966; --red:#ff756f;
  --green:#6ce0aa; --violet:#a995ff;
  --radius:18px;
  --mono:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  color:var(--ink);
  font-family:"PingFang SC","Microsoft YaHei","微软雅黑","Segoe UI",system-ui,sans-serif;
  line-height:1.6;
  background:
    radial-gradient(900px 600px at 82% -5%,rgba(38,169,214,.12),transparent 62%),
    radial-gradient(760px 700px at -8% 34%,rgba(169,149,255,.09),transparent 64%),
    linear-gradient(180deg,var(--void) 0%,var(--deep) 44%,#050c14 100%);
    background-attachment:fixed;
  -webkit-font-smoothing:antialiased;
  overflow:hidden;
}
button,input{font:inherit;color:inherit}
button{cursor:pointer}

#stars{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:0}
.star{position:absolute;width:2px;height:2px;border-radius:50%;background:#dff8ff;animation:tw var(--d) ease-in-out infinite;opacity:var(--o)}
@keyframes tw{50%{opacity:.12;transform:scale(.6)}}

/* 手机外壳 */
.app{
  position:relative;z-index:1;
  width:min(460px,100%);height:100dvh;max-height:100dvh;
  margin:0 auto;display:flex;flex-direction:column;
  background:#05101a;
  border-left:1px solid var(--line);border-right:1px solid var(--line);
  box-shadow:0 0 80px rgba(0,0,0,.5);
}
@media(min-width:520px){
  .app{height:min(880px,96dvh);margin-top:2dvh;border:1px solid var(--line-hi);border-radius:26px;overflow:hidden}
}

/* 顶栏 */
.topbar{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:12px 15px;border-bottom:1px solid var(--line);
  background:rgba(14,30,45,.82);backdrop-filter:blur(12px);
}
.contact{display:flex;align-items:center;gap:11px;min-width:0}
.avatar{
  width:40px;height:40px;flex:none;border:1px solid var(--line-hi);border-radius:50%;
  display:grid;place-items:center;background:rgba(102,220,255,.08);font-size:18px;color:var(--cyan);position:relative;
}
.avatar::after{content:"";position:absolute;right:1px;bottom:1px;width:9px;height:9px;border-radius:50%;background:var(--green);border:2px solid #0e1e2d}
.contact .who{min-width:0}
.contact .name{font-weight:800;font-size:14.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.contact .sub{font-size:10.5px;color:var(--green);font-family:"SFMono-Regular",Consolas,monospace}
.top-actions{display:flex;gap:8px;flex:none}
.icon-btn{
  border:1px solid var(--line);border-radius:10px;background:rgba(102,220,255,.05);
  padding:7px 10px;font-size:12px;color:var(--dim);transition:.18s;white-space:nowrap;
}
.icon-btn:hover{color:var(--ink);border-color:var(--line-hi)}
.icon-btn.on{color:var(--cyan);border-color:var(--cyan)}

/* 状态面板（可收起） */
.status{
  overflow:hidden;max-height:0;transition:max-height .3s ease;
  border-bottom:1px solid transparent;background:rgba(7,17,28,.7);
}
.status.open{max-height:74dvh;overflow-y:auto;-webkit-overflow-scrolling:touch;border-bottom-color:var(--line)}
.status-inner{padding:15px}
.meters{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px}
.meter .m-head{display:flex;justify-content:space-between;font-size:11px;color:var(--dim);margin-bottom:5px}
.meter .m-head b{color:var(--ink);font-family:"SFMono-Regular",Consolas,monospace}
.meter .bar{height:5px;background:rgba(255,255,255,.07);border-radius:99px;overflow:hidden}
.meter .bar i{display:block;height:100%;width:0;border-radius:99px;transition:width .5s ease}
.event-note{
  display:block;width:100%;text-align:left;
  margin-top:14px;padding:11px 12px;border:1px solid var(--line);border-radius:12px;
  font-size:11.5px;color:var(--dim);background:rgba(11,23,35,.5);
  font-family:inherit;line-height:1.5;transition:.16s;
}
.event-note.clickable{cursor:pointer}
.event-note.clickable:hover{border-color:var(--line-hi);background:rgba(14,30,45,.7)}
.event-note:disabled{cursor:default;opacity:.85}
.event-note .arc-more{display:inline-block;margin-top:6px;color:var(--cyan);font-size:10.5px;font-family:var(--mono)}
.event-note b{color:var(--amber)}
.event-note .warn{color:var(--dim);display:block;margin-top:4px}
.event-note .warn::before{content:"⚠ ";color:var(--amber)}
.event-note .arc-tag,.event-note .arc-beat{
  display:inline-block;margin-top:6px;margin-right:6px;padding:1px 8px;border-radius:7px;
  font-size:10px;font-family:"SFMono-Regular",Consolas,monospace;border:1px solid var(--line);
}
.event-note .arc-tag{color:var(--violet);border-color:rgba(178,148,255,.4);background:rgba(178,148,255,.07)}
.event-note .arc-beat{color:var(--cyan);border-color:rgba(102,220,255,.35);background:rgba(102,220,255,.06)}

.settings{margin-top:14px;border-top:1px dashed var(--line);padding-top:13px}
.settings .lbl{font-size:11px;color:var(--mut);letter-spacing:1px;margin-bottom:8px;font-family:"SFMono-Regular",Consolas,monospace}
.settings .scale-row + .lbl{margin-top:14px}
.scale-row{display:flex;gap:7px;flex-wrap:wrap}
.scale-btn{border:1px solid var(--line);border-radius:999px;background:rgba(102,220,255,.04);padding:6px 12px;font-size:12px;color:var(--dim);transition:.18s}
.scale-btn.on{color:#031019;background:var(--cyan);border-color:var(--cyan);font-weight:800}
.think-btn.on{color:#0a0614;background:var(--violet);border-color:var(--violet)}
.tone-btn.on{color:#02120a;background:var(--green);border-color:var(--green)}
.tone-desc{margin-top:8px;font-size:11px;color:var(--dim);line-height:1.5;font-style:italic}
.danger-btn{margin-top:12px;width:100%;border:1px solid rgba(255,117,111,.35);border-radius:11px;background:rgba(255,117,111,.08);color:var(--red);padding:9px;font-size:12.5px}
.danger-btn:hover{background:rgba(255,117,111,.16)}
.skip-btn{
  margin-top:10px;width:100%;border:1px solid rgba(108,224,170,.4);border-radius:11px;
  background:rgba(108,224,170,.1);color:var(--green);padding:10px;font-size:12.5px;font-weight:700;transition:.16s;
}
.skip-btn:hover{background:rgba(108,224,170,.2);border-color:var(--green)}
.ai-flag{margin-top:10px;font-size:10.5px;color:var(--mut);text-align:center}

/* 消息区 */
.messages{flex:1;overflow-y:auto;padding:18px 15px 8px;scroll-behavior:smooth;display:flex;flex-direction:column;gap:2px}
.dayline{text-align:center;color:var(--mut);font-size:10px;letter-spacing:1px;margin:2px 0 14px}
.msg{display:flex;margin:5px 0;animation:rise .4s cubic-bezier(.2,.7,.2,1)}
@keyframes rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.msg.player{justify-content:flex-end}
.bubble{
  max-width:80%;padding:10px 13px;font-size:13.6px;line-height:1.6;
  border:1px solid var(--line);border-radius:5px 15px 15px 15px;
  background:rgba(14,30,45,.92);color:#dcecf5;word-break:break-word;white-space:pre-wrap;
}
.msg.player .bubble{border-radius:15px 5px 15px 15px;background:rgba(38,169,214,.17);border-color:rgba(102,220,255,.3)}
.bubble.ending{border-color:var(--violet);background:rgba(169,149,255,.09);font-style:italic;color:#e7deff}
.notice{align-self:center;max-width:88%;text-align:center;font-size:11px;color:var(--amber);
  border:1px dashed rgba(255,201,102,.3);border-radius:10px;padding:6px 11px;margin:6px 0;background:rgba(255,201,102,.05)}
.bubble .foot{display:flex;align-items:center;gap:8px;margin-top:6px;justify-content:flex-end}
.bubble .t{color:var(--mut);font-family:"SFMono-Regular",Consolas,monospace;font-size:9px}
.bubble .src{margin-right:auto;font-family:"SFMono-Regular",Consolas,monospace;font-size:9px;padding:1px 6px;border-radius:6px;border:1px solid;white-space:nowrap}
.src-ai{color:var(--cyan);border-color:rgba(102,220,255,.42);background:rgba(102,220,255,.09)}
.src-tpl{color:var(--mut);border-color:rgba(96,121,139,.38);background:rgba(96,121,139,.08)}
/* 玩家消息来源：手动输入 / 点选预设 */
.src-typed{color:var(--amber);border-color:rgba(255,201,102,.42);background:rgba(255,201,102,.09)}
.src-preset{color:var(--green);border-color:rgba(108,224,170,.42);background:rgba(108,224,170,.10)}

.typing{display:none;padding:2px 20px 6px;color:var(--mut);font-size:11.5px}
.typing.show{display:block}
.typing .dot{display:inline-block;width:5px;height:5px;margin-left:2px;border-radius:50%;background:var(--mut);animation:blink 1.2s infinite}
.typing .dot:nth-child(2){animation-delay:.2s}.typing .dot:nth-child(3){animation-delay:.4s}
@keyframes blink{0%,60%,100%{opacity:.25}30%{opacity:1}}

/* 回复区 */
.dock{border-top:1px solid var(--line);background:rgba(7,17,28,.94);padding:12px 13px calc(12px + env(safe-area-inset-bottom))}
.quick-list{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:10px}
.quick{
  border:1px solid var(--line-hi);border-radius:999px;background:rgba(102,220,255,.05);
  padding:7px 12px;color:var(--dim);font-size:12px;transition:.16s;display:inline-flex;align-items:center;gap:6px;
}
.quick:hover{color:var(--ink);border-color:var(--cyan);background:rgba(102,220,255,.11)}
.quick .tend{font-size:10px;color:var(--cyan);border:1px solid var(--line);border-radius:999px;padding:1px 6px}
.custom-row{display:flex;gap:8px}
.custom-row input{
  flex:1;min-width:0;border:1px solid var(--line);border-radius:12px;
  padding:11px 13px;background:rgba(255,255,255,.035);outline:none;font-size:13px;
}
.custom-row input:focus{border-color:var(--cyan)}
.custom-row input:disabled{opacity:.5}
.send-btn{border:1px solid var(--line-hi);border-radius:12px;background:var(--cyan);color:#031019;padding:0 16px;font-size:13px;font-weight:900;transition:.16s}
.send-btn:hover{background:#9aeaff}
.send-btn:disabled{opacity:.5;cursor:not-allowed}

/* 语音识别：长按说话 */
.mic-btn{
  flex:none;width:46px;border:1px solid var(--line-hi);border-radius:12px;
  background:rgba(102,220,255,.06);color:var(--cyan);font-size:18px;line-height:1;
  display:flex;align-items:center;justify-content:center;
  user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:none;transition:.16s;
}
.mic-btn:hover{background:rgba(102,220,255,.14)}
.mic-btn:active{transform:scale(.94)}
.mic-btn:disabled{opacity:.4;cursor:not-allowed}
.mic-btn.recording{background:var(--red);border-color:var(--red);color:#fff;animation:micpulse 1s ease-in-out infinite}
@keyframes micpulse{0%,100%{box-shadow:0 0 0 0 rgba(255,117,111,.55)}50%{box-shadow:0 0 0 9px rgba(255,117,111,0)}}
.mic-hint{margin:0 2px 8px;font-size:11.5px;color:var(--cyan);display:flex;align-items:center;gap:7px}
.mic-hint::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--red);animation:micblink 1s steps(2,jump-none) infinite}
.mic-hint.warn{color:var(--amber)}
.mic-hint.warn::before{display:none}
@keyframes micblink{50%{opacity:.25}}

/* 等待态 */
.waiting{padding:16px 14px;text-align:center}
.waiting .wt-title{font-size:13px;color:var(--dim);margin-bottom:9px}
.waiting .wt-title b{color:var(--cyan)}
.countdown{font-family:"SFMono-Regular",Consolas,monospace;font-size:32px;font-weight:900;color:var(--cyan);letter-spacing:2px}
.waiting .wt-hint{font-size:11px;color:var(--mut);margin-top:8px}
.wt-ring{width:14px;height:14px;border:2px solid rgba(102,220,255,.25);border-top-color:var(--cyan);border-radius:50%;display:inline-block;vertical-align:-2px;margin-right:7px;animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* 结局 */
.ended{padding:16px 14px;text-align:center}
.ended .badge{display:inline-block;padding:5px 14px;border-radius:999px;font-size:12px;font-weight:800;letter-spacing:1px;margin-bottom:12px;border:1px solid}
.badge.death{color:var(--red);border-color:rgba(255,117,111,.4);background:rgba(255,117,111,.08)}
.badge.truth{color:var(--cyan);border-color:var(--line-hi);background:rgba(102,220,255,.08)}
.badge.drift{color:var(--violet);border-color:rgba(169,149,255,.4);background:rgba(169,149,255,.08)}
.badge.end{color:var(--green);border-color:rgba(108,224,170,.4);background:rgba(108,224,170,.08)}
.restart-btn{width:100%;border:1px solid var(--line-hi);border-radius:12px;background:rgba(102,220,255,.08);color:var(--cyan);padding:12px;font-size:13.5px;font-weight:800;transition:.18s}
.restart-btn:hover{background:rgba(102,220,255,.16);border-color:var(--cyan)}

/* 错误 / 重试态 */
.errbox{padding:16px 14px;text-align:center}
.err-title{font-size:13px;color:var(--red);font-weight:800;margin-bottom:6px;display:flex;align-items:center;justify-content:center;gap:7px}
.err-dot{width:8px;height:8px;border-radius:50%;background:var(--red);box-shadow:0 0 8px var(--red);animation:blink 1.2s infinite}
.err-hint{font-size:11.5px;color:var(--mut);margin-bottom:14px;line-height:1.6}
.retry-btn{width:100%;border:1px solid rgba(255,117,111,.4);border-radius:12px;background:rgba(255,117,111,.1);color:var(--red);padding:12px;font-size:13.5px;font-weight:800;transition:.18s}
.retry-btn:hover{background:rgba(255,117,111,.18);border-color:var(--red)}

.hidden{display:none!important}

/* 加载遮罩 */
.boot{position:fixed;inset:0;z-index:5;display:grid;place-items:center;background:var(--void);transition:opacity .5s;text-align:center}
.boot.gone{opacity:0;pointer-events:none}
.boot .b-title{font-size:34px;font-weight:900;letter-spacing:10px;color:transparent;-webkit-text-stroke:1px rgba(182,231,255,.72)}
.boot .b-sub{margin-top:12px;color:var(--cyan);font-family:"SFMono-Regular",Consolas,monospace;font-size:11px;letter-spacing:4px}
.boot .b-hint{margin-top:20px;color:var(--mut);font-size:12px}

.messages::-webkit-scrollbar{width:6px}
.messages::-webkit-scrollbar-thumb{background:rgba(102,220,255,.2);border-radius:99px}

/* ---------- AI 调试面板（重做） ---------- */
.debug{
  position:fixed;top:0;right:0;z-index:6;
  width:min(500px,96vw);height:100dvh;
  background:rgba(4,10,17,.985);backdrop-filter:blur(14px);
  border-left:1px solid var(--line-hi);
  box-shadow:-18px 0 60px rgba(0,0,0,.6);
  transform:translateX(103%);transition:transform .28s cubic-bezier(.2,.7,.2,1);
  /* 整个面板就是唯一的滚动容器：内容多长排多长，不缩放去适配屏幕，靠上下滑动阅读 */
  overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;
}
.debug.open{transform:none}
.debug::-webkit-scrollbar{width:7px}
.debug::-webkit-scrollbar-thumb{background:rgba(102,220,255,.22);border-radius:99px}
.dbg-head{
  position:sticky;top:0;z-index:3; /* 滑动时表头与操作按钮常驻 */
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:12px 14px;border-bottom:1px solid var(--line);
  background:rgba(9,20,31,.97);backdrop-filter:blur(8px);
}
.dbg-title{font-size:11.5px;font-weight:800;letter-spacing:1px;color:var(--cyan);font-family:var(--mono)}
.dbg-actions{display:flex;align-items:center;gap:8px}
.dbg-auto{font-size:10.5px;color:var(--mut);display:flex;align-items:center;gap:4px;user-select:none;cursor:pointer}
.dbg-auto input{accent-color:var(--cyan)}
.dbg-btn{border:1px solid var(--line);border-radius:8px;background:rgba(102,220,255,.05);color:var(--dim);padding:5px 9px;font-size:11px;transition:.16s}
.dbg-btn:hover{color:var(--ink);border-color:var(--line-hi)}
.dbg-btn.on{color:var(--cyan);border-color:var(--cyan);background:rgba(102,220,255,.12)}
.dbg-sub{padding:7px 14px;font-size:10.5px;color:var(--mut);border-bottom:1px solid var(--line);font-family:var(--mono)}

/* 服务器日志下载列表 */
.dbg-logs{border-bottom:1px solid var(--line);background:rgba(8,20,32,.55)}
.dbg-logs.hidden{display:none}
.dl-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 14px;border-bottom:1px solid var(--line)}
.dl-hint{font-size:10.5px;color:var(--mut);font-family:var(--mono)}
.dl-mini{border:1px solid var(--line);border-radius:7px;background:rgba(102,220,255,.05);color:var(--dim);padding:3px 8px;font-size:10.5px;transition:.16s}
.dl-mini:hover{color:var(--ink);border-color:var(--line-hi)}
.dl-list{max-height:300px;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:6px 8px 10px;display:flex;flex-direction:column;gap:6px}
.dl-list::-webkit-scrollbar{width:7px}
.dl-list::-webkit-scrollbar-thumb{background:rgba(102,220,255,.22);border-radius:99px}
.dl-empty{color:var(--mut);font-size:11px;text-align:center;padding:14px;font-style:italic}
.dl-empty.warn{color:var(--amber)}
.dl-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:9px;background:rgba(14,30,45,.5)}
.dl-item.current{border-color:var(--cyan);background:rgba(102,220,255,.08)}
.dl-meta{min-width:0}
.dl-title{font-size:11.5px;color:var(--ink);font-weight:700;font-family:var(--mono)}
.dl-subline{font-size:10px;color:var(--mut);margin-top:2px;font-family:var(--mono)}
.dl-dl{flex:none;border:1px solid var(--cyan);border-radius:8px;background:rgba(102,220,255,.1);color:var(--cyan);padding:5px 12px;font-size:11px;font-weight:700;transition:.16s}
.dl-dl:hover{background:rgba(102,220,255,.2)}
/* 不再内部滚动：内容完整展开，随外层 .debug 一起上下滑动 */
.dbg-log{padding:10px 10px 40px;display:flex;flex-direction:column;gap:10px}
.dbg-empty{color:var(--mut);font-size:11.5px;text-align:center;padding:28px 16px;font-style:italic}

/* 回合卡片（可折叠） */
.dbg-turn{border:1px solid var(--line);border-radius:12px;background:rgba(11,23,35,.5);overflow:hidden}
.dbg-turn[open]{border-color:var(--line-hi)}
.dt-sum{
  list-style:none;cursor:pointer;display:flex;align-items:center;gap:8px;
  padding:9px 12px;background:rgba(14,30,45,.6);font-family:var(--mono);
}
.dt-sum::-webkit-details-marker{display:none}
.dt-sum::before{content:"▸";color:var(--mut);font-size:10px;flex:none;transition:.15s}
.dbg-turn[open] .dt-sum::before{content:"▾";color:var(--cyan)}
.dt-no{font-weight:900;color:var(--cyan);font-size:12px;flex:none}
.dt-kind{font-size:11px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dt-pill{font-size:9px;padding:1px 7px;border-radius:6px;border:1px solid;flex:none;white-space:nowrap}
.dt-pill.ok{color:var(--green);border-color:rgba(108,224,170,.4);background:rgba(108,224,170,.08)}
.dt-pill.fail{color:var(--red);border-color:rgba(255,117,111,.4);background:rgba(255,117,111,.08)}
.dt-pill.mute{color:var(--mut);border-color:var(--line)}
.dt-time{color:var(--mut);font-size:10px;margin-left:auto;flex:none}

.dt-body{padding:10px 12px 12px;display:flex;flex-direction:column;gap:9px}
.dt-arc{font-size:10.5px;color:var(--violet);background:rgba(178,148,255,.06);border:1px solid rgba(178,148,255,.2);border-radius:8px;padding:6px 9px;font-family:var(--mono)}
.dt-input{background:rgba(255,201,102,.05);border:1px solid rgba(255,201,102,.2);border-radius:8px;padding:8px 10px}
.dt-tag{display:inline-block;font-size:9px;padding:1px 7px;border-radius:6px;color:var(--amber);border:1px solid rgba(255,201,102,.4);background:rgba(255,201,102,.08);margin-bottom:5px;font-family:var(--mono)}
.dt-txt{font-size:12.5px;color:var(--ink);white-space:pre-wrap;word-break:break-word}
.dt-none{font-size:11.5px;color:var(--mut);font-style:italic;padding:4px 2px}
.dt-none.warn{color:var(--amber);font-style:normal;background:rgba(255,201,102,.06);border:1px solid rgba(255,201,102,.25);border-radius:8px;padding:8px 10px}

/* 单次 AI 调用 */
.dt-call{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:rgba(3,7,13,.35)}
.dt-call.fail{border-color:rgba(255,117,111,.35);background:rgba(255,117,111,.045)}
.dc-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 10px;background:rgba(102,220,255,.05);border-bottom:1px solid var(--line)}
.dt-call.fail .dc-title{background:rgba(255,117,111,.06)}
.dc-role{font-weight:800;font-size:11.5px;color:var(--cyan);font-family:var(--mono)}
.dc-role.r-fail{color:var(--red)}
.dc-desc{font-size:10.5px;color:var(--dim)}
.dc-attempt{font-size:9px;color:var(--amber);border:1px solid rgba(255,201,102,.4);border-radius:6px;padding:0 6px;margin-left:auto}
.dc-meta{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:7px 10px 3px}
.dc-meta>span{font-family:var(--mono);font-size:9px;padding:1px 6px;border-radius:6px;border:1px solid var(--line);color:var(--dim)}
.dc-meta .m-model{color:var(--cyan);border-color:rgba(102,220,255,.4);background:rgba(102,220,255,.08)}
.dc-meta .s-ok{color:var(--green);border-color:rgba(108,224,170,.4)}
.dc-meta .s-fail{color:var(--red);border-color:rgba(255,117,111,.4)}

/* 分区：System / User / 思考 / 返回（原生可折叠） */
.dc-sec{border-top:1px solid var(--line)}
.dc-sec>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:8px;padding:7px 10px;font-family:var(--mono);font-size:10px}
.dc-sec>summary::-webkit-details-marker{display:none}
.dc-sec>summary::before{content:"+";color:var(--mut);width:10px;text-align:center;flex:none}
.dc-sec[open]>summary::before{content:"–";color:var(--cyan)}
.dc-sec>summary:hover .dc-lbl{color:var(--ink)}
.dc-lbl{color:var(--dim);letter-spacing:.5px}
.dc-len{margin-left:auto;color:var(--mut);font-size:9px}
.dc-pre{margin:0;font-family:var(--mono);font-size:11px;line-height:1.6;white-space:pre-wrap;word-break:break-word;color:var(--dim);padding:9px 11px;background:rgba(2,6,11,.65);border-top:1px solid var(--line)}
.dc-sec.sec-in .dc-pre{border-left:2px solid rgba(255,201,102,.45)}
.dc-sec.sec-think .dc-pre{color:#cfc4f2;font-style:italic;border-left:2px solid rgba(178,148,255,.55)}
.dc-sec.sec-out .dc-pre{color:#dcecf5;border-left:2px solid var(--cyan)}
.dc-sec.sec-err .dc-pre{color:#ffb8b4;border-left:2px solid var(--red)}

/* ---------- 剧情总览弹窗 ---------- */
.modal{position:fixed;inset:0;z-index:8;display:flex;align-items:center;justify-content:center;padding:16px}
.modal.hidden{display:none}
.modal-mask{position:absolute;inset:0;background:rgba(2,6,11,.72);backdrop-filter:blur(4px)}
.modal-card{
  position:relative;z-index:1;width:min(560px,100%);max-height:88dvh;
  display:flex;flex-direction:column;overflow:hidden;
  background:linear-gradient(180deg,rgba(11,23,35,.98),rgba(5,12,20,.98));
  border:1px solid var(--line-hi);border-radius:18px;box-shadow:0 30px 90px rgba(0,0,0,.6);
}
.modal-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line)}
.modal-title{font-size:13px;font-weight:800;letter-spacing:1px;color:var(--cyan);font-family:var(--mono)}
.modal-close{border:1px solid var(--line);border-radius:9px;background:rgba(102,220,255,.05);color:var(--dim);width:30px;height:30px;font-size:14px;transition:.16s}
.modal-close:hover{color:var(--ink);border-color:var(--line-hi)}
.modal-sub{padding:9px 16px;font-size:11px;color:var(--mut);border-bottom:1px solid var(--line);font-family:var(--mono)}
.modal-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:14px 16px 22px;display:flex;flex-direction:column;gap:14px}
.modal-body::-webkit-scrollbar{width:7px}
.modal-body::-webkit-scrollbar-thumb{background:rgba(102,220,255,.22);border-radius:99px}
.st-loading{color:var(--mut);text-align:center;padding:30px 10px;font-size:12px}

.st-chapter{border:1px solid var(--line);border-radius:14px;background:rgba(3,9,16,.5);padding:12px 13px}
.st-chapter.current{border-color:var(--line-hi);background:rgba(14,30,45,.55);box-shadow:0 0 0 1px rgba(102,220,255,.12) inset}
.st-chapter.done{opacity:.9}
.st-ch-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.st-ch-no{font-family:var(--mono);font-size:10px;color:var(--cyan);font-weight:800}
.st-ch-title{font-size:14px;font-weight:800;color:var(--ink)}
.st-ch-kind{font-size:10px;color:var(--violet);border:1px solid rgba(178,148,255,.4);background:rgba(178,148,255,.07);border-radius:7px;padding:1px 7px;font-family:var(--mono)}
.st-ch-state{margin-left:auto;font-size:9.5px;color:var(--mut);border:1px solid var(--line);border-radius:7px;padding:1px 7px;font-family:var(--mono)}
.st-ch-state.cur{color:var(--cyan);border-color:rgba(102,220,255,.4);background:rgba(102,220,255,.08)}
.st-ch-state.ok{color:var(--green);border-color:rgba(108,224,170,.4);background:rgba(108,224,170,.08)}
.st-premise{font-size:12px;color:var(--dim);line-height:1.6;margin-bottom:10px}

.st-beat{border-top:1px dashed var(--line);padding-top:9px;margin-top:9px}
.st-beat:first-of-type{border-top:none;margin-top:0;padding-top:0}
.st-sit{display:flex;gap:7px;font-size:12.5px;color:var(--ink);line-height:1.5}
.st-beat.done .st-sit{color:var(--dim)}
.st-beat.current .st-sit{color:var(--cyan);font-weight:700}
.st-dot{flex:none;font-family:var(--mono);width:14px;text-align:center}
.st-beat.done .st-dot{color:var(--green)}
.st-beat.current .st-dot{color:var(--cyan)}
.st-beat.todo .st-dot{color:var(--mut)}
.st-choices{margin:7px 0 2px;padding-left:21px;display:flex;flex-direction:column;gap:5px}
.st-choice{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;font-size:11px}
.st-c-label{color:var(--amber);font-weight:700}
.st-c-out{color:var(--dim)}
.st-c-res{color:var(--mut);font-family:var(--mono);font-size:9.5px;border:1px solid var(--line);border-radius:6px;padding:0 6px}
