/* ==========================================================================
   pages.css — 各页面专属样式
   顺序：登录 → 大厅 → 房间 → 角色卡 → 模组 → 战役 → 掷骰台 → 骰娘 → AI
   ========================================================================== */

/* ==========================================================================
   1. 登录 / 注册（登录卡片内容宽 294px，与线上实测一致）
   ========================================================================== */
.auth{
  min-height:100dvh;display:flex;align-items:center;justify-content:center;
  padding:24px;position:relative;overflow:hidden;
}
.auth-aura{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.auth-aura i{
  position:absolute;border-radius:50%;filter:blur(60px);opacity:.5;
  animation:floaty 18s ease-in-out infinite;
}
.auth-aura i:nth-child(1){width:340px;height:340px;left:-90px;top:-100px;background:#4a2f7a}
.auth-aura i:nth-child(2){width:280px;height:280px;right:-70px;bottom:-80px;background:#2c3f6e;animation-delay:-6s}
.auth-aura i:nth-child(3){width:220px;height:220px;right:22%;top:-70px;background:#5a3f2e;opacity:.32;animation-delay:-11s}
@keyframes floaty{
  0%,100%{transform:translate(0,0) scale(1)}
  33%{transform:translate(22px,26px) scale(1.07)}
  66%{transform:translate(-18px,14px) scale(.95)}
}
.auth-card{
  position:relative;z-index:1;width:330px;max-width:100%;
  background:var(--panel);border:1px solid var(--line);border-radius:10px;
  padding:18px;box-shadow:var(--sh-3);animation:pop .45s var(--ease) both;
}
.auth-brand{
  display:flex;align-items:center;justify-content:center;gap:9px;
  font-size:23px;font-weight:700;color:var(--gold);letter-spacing:1px;
  margin:6px 0 18px;
}
.auth-brand .logo{font-size:22px;animation:floaty 6s ease-in-out infinite}
.auth-tabs{display:grid;grid-template-columns:1fr 1fr;border-bottom:1px solid var(--line);margin-bottom:16px}
.auth-tabs .tab{width:100%;padding:9px 0;font-size:13px;text-align:center}
.auth-tabs .tab::after{left:0;right:0}
.auth-foot{
  margin-top:16px;padding-top:12px;border-top:1px solid var(--line-soft);
  font-size:11.5px;color:var(--muted);text-align:center;line-height:1.7;
}
.auth-foot .sep{margin:0 7px;color:var(--ghost)}
.auth-demo{
  margin-top:10px;font-size:11.5px;color:var(--muted);text-align:center;
}
.auth-demo button{
  background:none;border:0;color:var(--gold);cursor:pointer;font-size:11.5px;
  padding:0 2px;border-bottom:1px dashed var(--gold-line);
}
.auth-demo button:hover{color:var(--gold-hover)}
.pwd-meter{display:flex;gap:3px;margin-top:6px}
.pwd-meter i{flex:1;height:3px;border-radius:3px;background:var(--line);transition:var(--fast)}
.pwd-meter.s1 i:nth-child(-n+1){background:var(--red)}
.pwd-meter.s2 i:nth-child(-n+2){background:#d6b774}
.pwd-meter.s3 i:nth-child(-n+3){background:var(--green)}

/* ==========================================================================
   2. 大厅 / 房间列表
   ========================================================================== */
.filter-bar{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);
  padding:10px 12px;margin-bottom:14px;
}
.filter-bar .search{position:relative;flex:1 1 220px;min-width:180px}
.filter-bar .search input{padding-left:30px}
.filter-bar .search .ico{
  position:absolute;left:9px;top:50%;transform:translateY(-50%);
  font-size:12px;color:var(--muted);pointer-events:none;
}
.chip-row{display:flex;gap:6px;flex-wrap:wrap}
/* 标签多到会撑高工具条时改成单行横滑 */
.chip-row.scroll{flex-wrap:nowrap;overflow-x:auto;padding-bottom:3px;max-width:100%;scrollbar-width:thin}
.chip-row.scroll::-webkit-scrollbar{height:5px}

.grid-cards{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
@media (max-width:520px){.grid-cards{grid-template-columns:1fr}}

.room-card{
  display:flex;flex-direction:column;background:var(--panel);
  border:1px solid var(--line);border-radius:var(--r-card);overflow:hidden;
}
.room-card .cover{height:6px;background:linear-gradient(90deg,var(--violet),var(--teal),var(--gold))}
.room-card .rc-body{padding:13px 14px;flex:1 1 auto;display:flex;flex-direction:column;gap:9px}
.room-card .rc-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.room-card .rc-title{font-size:15px;font-weight:600;color:var(--text);line-height:1.35}
.room-card .rc-meta{font-size:11.5px;color:var(--muted);display:flex;flex-direction:column;gap:4px}
.room-card .rc-meta .mi{display:flex;align-items:center;gap:7px}
.room-card .rc-meta .mi b{color:var(--dim);font-weight:500}
.room-card .rc-foot{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding-top:10px;margin-top:auto;border-top:1px solid var(--line-soft);
}
.room-card.locked{opacity:.72}
.room-card.locked:hover{opacity:1}
.code-badge{font-family:var(--mono);font-size:11.5px;letter-spacing:.5px}

/* ==========================================================================
   3. 房间页（几何与线上实测对齐）
   ========================================================================== */
.room-page{display:flex;flex-direction:column;height:100%}
.room-page>*{flex:0 0 auto}
.room-layout{
  flex:1 1 auto;min-height:0;display:grid;gap:16px;
  grid-template-columns:240px minmax(0,1fr) 320px;
}
.room-peers,.room-side{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);
  padding:14px;overflow:auto;min-height:0;
}
.room-main{
  display:flex;flex-direction:column;min-height:0;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);
}

/* 在场成员 */
.peer-card{
  display:flex;align-items:center;gap:10px;padding:10px;margin:0 0 8px;
  background:var(--sidebar);border:1px solid var(--line);border-radius:var(--r-ctl);transition:var(--mid) var(--ease);
}
.peer-card:hover{border-color:var(--line-hover);transform:translateX(2px)}
.peer-card:last-child{margin-bottom:0}
.peer-card .pc-main{flex:1 1 auto;min-width:0}
.peer-name{font-size:14px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.peer-meta{margin-top:2px}
.peer-status{margin-top:1px;display:flex;align-items:center;gap:6px}
/* 说话音量条 */
.vu{display:inline-flex;align-items:flex-end;gap:2px;height:11px}
.vu i{width:2px;background:var(--green);border-radius:2px;animation:vu 1.1s ease-in-out infinite}
.vu i:nth-child(1){height:4px;animation-delay:0s}
.vu i:nth-child(2){height:8px;animation-delay:.15s}
.vu i:nth-child(3){height:6px;animation-delay:.3s}
.vu i:nth-child(4){height:10px;animation-delay:.45s}
@keyframes vu{0%,100%{transform:scaleY(.45)}50%{transform:scaleY(1)}}

/* 聊天 */
.room-header{
  display:flex;align-items:center;justify-content:space-between;gap:8px 12px;flex-wrap:wrap;
  padding:12px 16px;min-height:60px;border-bottom:1px solid var(--line);
}
.room-header .dots{
  display:inline-block;width:10px;height:10px;border-radius:50%;vertical-align:-1px;margin-right:6px;
  background:radial-gradient(circle at 35% 30%, #a9ffc0, #24c258 70%);
}
.chat-scroll{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}
.chat-list{flex:1 1 auto;min-height:0;overflow:auto;overflow-x:hidden;padding:12px 16px;scroll-behavior:smooth}

.chat-line{margin:0 0 8px;animation:fadeUp .26s var(--ease) both;overflow-wrap:anywhere}
.chat-line .who{font-size:12px;margin-right:6px}
.chat-line.dice .dice-box{background:var(--dice-bg);border-radius:var(--r-box);padding:6px 10px;overflow-wrap:anywhere}
.chat-line.dice code{white-space:normal;overflow-wrap:anywhere}
.chat-line.system{font-size:12px;color:var(--muted)}
.chat-line.system .tail{color:var(--muted)}
.chat-line.mine .dice-box{outline:1px solid rgba(214,183,116,.22)}
.chat-line .body{display:inline}

.quick-cmds{
  display:flex;gap:6px;flex-wrap:nowrap;overflow-x:auto;padding:8px 10px 0;
  scrollbar-width:none;
}
.quick-cmds::-webkit-scrollbar{display:none}
.quick-cmds .qc{
  font-family:var(--mono);font-size:11px;color:var(--muted);cursor:pointer;flex:0 0 auto;
  background:var(--sidebar);border:1px solid var(--line);border-radius:var(--r-pill);
  padding:2px 9px;transition:var(--fast);
}
.quick-cmds .qc:hover{color:var(--gold);border-color:var(--gold-line);transform:translateY(-1px)}

.chat-input{display:flex;gap:8px;padding:10px;border-top:1px solid var(--line)}
.chat-input input{
  flex:1 1 auto;min-width:0;height:54px;padding:8px 10px;
  background:var(--sidebar);border:1px solid var(--line);border-radius:var(--r-ctl);
  color:var(--text);font-size:13px;transition:var(--fast);
}
.chat-input input::placeholder{color:var(--faint)}
.chat-input input:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(214,183,116,.1)}
.chat-input button{
  flex:0 0 auto;width:53px;background:var(--violet);border:1px solid var(--violet-line);
  border-radius:var(--r-ctl);color:#fff;font-size:13px;line-height:1.2;cursor:pointer;
  transition:var(--fast);display:flex;align-items:center;justify-content:center;
}
.chat-input button:hover{background:var(--violet-hover)}
.chat-input button:active{transform:translateY(1px)}

/* 右栏 */
.side-block{padding-bottom:10px;margin-bottom:12px;border-bottom:1px solid var(--line)}
.side-block:last-child{border-bottom:0;margin-bottom:0;padding-bottom:0}
.side-head{display:flex;align-items:center;gap:10px;margin-top:8px}
.side-head img{width:52px;height:70px;object-fit:cover;border-radius:var(--r-ctl);border:1px solid var(--line-3)}
.side-head b{font-size:14px;font-weight:700}
.side-attrs{font-size:12px;color:var(--muted);line-height:1.9;margin:0 0 8px}
.side-attrs span{margin-right:6px;white-space:nowrap}
.chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px;max-height:150px;overflow:hidden}
.chips.expand{max-height:none}
.chips .tag{margin-right:4px}
.chips-more{
  background:none;border:0;color:var(--muted);font-size:11px;cursor:pointer;
  padding:3px 0 0;display:block;
}
.chips-more:hover{color:var(--gold)}

details.teammate{border:1px solid var(--line);border-radius:var(--r-ctl);padding:6px 8px;margin-top:8px;transition:var(--fast)}
details.teammate[open]{background:rgba(0,0,0,.12);border-color:var(--line-hover)}
details.teammate>summary{display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none}
details.teammate>summary::-webkit-details-marker{display:none}
details.teammate>summary img{width:36px;height:36px;border-radius:50%;object-fit:cover;flex:0 0 auto}
details.teammate>summary b{font-size:14px;font-weight:700;flex:0 0 auto;white-space:nowrap}
details.teammate>summary span{flex:1 1 auto;min-width:0;font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
details.teammate>summary:hover b{color:var(--gold)}
.team-body{margin-top:8px;animation:fadeUp .28s var(--ease)}
.team-body img.portrait{width:84px;height:112px;object-fit:cover;border-radius:var(--r-ctl);border:1px solid var(--line-3)}
.char-desc{background:var(--panel-2);border-radius:var(--r-ctl);padding:10px 12px;font-size:15px;line-height:1.75;margin-top:8px}

table.cmd-table{border-collapse:collapse;font-size:12px;width:100%;margin-top:6px}
table.cmd-table td{border-top:1px solid var(--line);padding:6px 0;vertical-align:top}
table.cmd-table td.k{padding-right:10px;color:var(--text);white-space:nowrap;width:1%}
table.cmd-table td.v{color:var(--muted);line-height:1.65}
table.cmd-table tr:hover td{background:rgba(255,255,255,.02)}
.tips{margin:12px 0 0;padding-left:18px;list-style:disc;font-size:12px;color:var(--muted);line-height:1.8}

.room-tabs{display:none}

/* ==========================================================================
   4. 角色卡
   ========================================================================== */
.char-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}
.question-form{font-family:var(--mono);font-size:11px;color:var(--muted);background:var(--bg-deep);border:1px dashed var(--line-3);border-radius:var(--r-ctl);padding:7px 9px;line-height:1.6;word-break:break-all}
@media (max-width:520px){.char-grid{grid-template-columns:1fr}}

.sheet-attr-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(74px,1fr));gap:8px}
.sheet-attr{
  background:var(--sidebar);border:1px solid var(--line);border-radius:var(--r-ctl);
  padding:8px 6px;text-align:center;transition:var(--fast);
}
.sheet-attr:hover{border-color:var(--line-hover);transform:translateY(-2px)}
.sheet-attr .k{font-size:10.5px;color:var(--muted);letter-spacing:.5px}
.sheet-attr .v{font-size:19px;font-weight:700;color:var(--gold);font-family:var(--mono)}
.sheet-attr.low .v{color:var(--red)}
.sheet-attr.high .v{color:var(--green)}

.vital-row{display:flex;align-items:center;gap:10px;margin-top:9px;font-size:12px}
.vital-row .k{width:52px;color:var(--muted);flex:0 0 auto}
.vital-row .n{font-family:var(--mono);color:var(--text);flex:0 0 auto;min-width:52px;text-align:right}
.vital-row .bar{flex:1 1 auto;min-width:50px}

/* ==========================================================================
   5. 模组
   ========================================================================== */
.mod-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(290px,1fr))}
@media (max-width:520px){.mod-grid{grid-template-columns:1fr}}
.mod-cover{
  height:104px;border-radius:var(--r-ctl);position:relative;overflow:hidden;
  display:flex;align-items:flex-end;padding:10px;border:1px solid var(--line);
}
.mod-cover::before{
  content:"";position:absolute;inset:0;
  background-image:radial-gradient(circle at 18% 24%, rgba(255,255,255,.13) 0 1.5px, transparent 1.6px),
                   radial-gradient(circle at 68% 66%, rgba(255,255,255,.09) 0 1px, transparent 1.1px);
  background-size:26px 26px, 34px 34px;
}
.mod-cover .glyph{
  position:absolute;right:8px;top:4px;font-size:52px;opacity:.26;line-height:1;transition:var(--slow) var(--ease);
}
.mod-card:hover .mod-cover .glyph{transform:rotate(-8deg) scale(1.12);opacity:.4}
.mod-cover .code{
  position:relative;z-index:1;font-family:var(--mono);font-size:11px;color:#fff;
  background:rgba(0,0,0,.42);padding:2px 7px;border-radius:var(--r-pill);backdrop-filter:blur(4px);
}
.mod-card .body{padding:12px 13px;display:flex;flex-direction:column;gap:8px;flex:1 1 auto}
.mod-card{display:flex;flex-direction:column}

/* ==========================================================================
   6. 战役
   ========================================================================== */
.camp-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(340px,1fr))}
@media (max-width:520px){.camp-grid{grid-template-columns:1fr}}
.camp-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.camp-step{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);margin-top:10px}
.camp-step .sn{
  width:22px;height:22px;border-radius:50%;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;font-size:11px;
  background:var(--bg-deep);border:1px solid var(--line-3);color:var(--muted);transition:var(--fast);
}
.camp-step.done .sn{background:var(--green-bg);border-color:#2a5440;color:var(--green)}
.camp-step.now .sn{background:rgba(214,183,116,.16);border-color:var(--gold-line);color:var(--gold)}

/* ==========================================================================
   7. 掷骰台
   ========================================================================== */
.dice-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) 340px;align-items:start}
.dice-stage{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);
  padding:20px;text-align:center;position:relative;overflow:hidden;
}
.dice-stage::before{
  content:"";position:absolute;inset:0;
  background:radial-gradient(circle at 50% 0%, rgba(139,109,214,.16), transparent 62%);
  pointer-events:none;
}
.dice-result{
  font-family:var(--mono);font-size:56px;font-weight:700;color:var(--gold);line-height:1.1;
  transition:var(--mid);position:relative;
}
.dice-result.rolling{animation:shake .36s var(--ease) infinite;color:var(--muted)}
.dice-result.crit{color:var(--green);text-shadow:0 0 26px rgba(125,220,155,.45)}
.dice-result.fumble{color:var(--red);text-shadow:0 0 26px rgba(224,108,90,.45)}
.dice-sub{font-size:12.5px;color:var(--muted);margin-top:6px;min-height:19px;position:relative}
.dice-break{
  display:flex;gap:6px;flex-wrap:wrap;justify-content:center;margin-top:14px;position:relative;
}
.die-face{
  width:34px;height:34px;border-radius:var(--r-ctl);display:flex;align-items:center;justify-content:center;
  background:var(--sidebar);border:1px solid var(--line);font-family:var(--mono);font-size:14px;color:var(--text);
  animation:pop .3s var(--ease) both;
}
.die-face.kept{border-color:var(--gold-line);background:rgba(214,183,116,.1);color:var(--gold)}
.die-face.drop{opacity:.4;text-decoration:line-through}
.die-face.crit{background:var(--green-bg);border-color:#2a5440;color:var(--green)}

.die-pad{display:grid;grid-template-columns:repeat(7,1fr);gap:7px;margin-top:16px;position:relative}
@media (max-width:520px){.die-pad{grid-template-columns:repeat(4,1fr)}}
.die-btn{
  padding:11px 4px;border-radius:var(--r-ctl);background:var(--sidebar);
  border:1px solid var(--line);color:var(--text);cursor:pointer;font-size:12px;
  font-family:var(--mono);transition:var(--mid) var(--ease);
}
.die-btn:hover{border-color:var(--gold-line);color:var(--gold);transform:translateY(-2px);background:rgba(214,183,116,.07)}
.die-btn:active{transform:translateY(1px) scale(.97)}

.stepper{display:inline-flex;align-items:center;border:1px solid var(--line-3);border-radius:var(--r-ctl);background:var(--bg-deep);overflow:hidden}
.stepper button{width:30px;height:34px;border:0;background:transparent;color:var(--muted);cursor:pointer;font-size:15px;transition:var(--fast)}
.stepper button:hover{background:rgba(255,255,255,.07);color:var(--text)}
.stepper input{width:52px;height:34px;text-align:center;border:0;border-left:1px solid var(--line-3);border-right:1px solid var(--line-3);border-radius:0;background:transparent;font-family:var(--mono)}
.stepper input:focus{box-shadow:none;border-color:var(--line-3)}

.roll-log{max-height:520px;overflow:auto}
.roll-item{
  display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--r-ctl);
  border:1px solid transparent;transition:var(--fast);font-size:12px;
}
.roll-item:hover{background:var(--sidebar);border-color:var(--line)}
.roll-item+.roll-item{margin-top:2px}
.roll-item .expr{font-family:var(--mono);color:var(--dim);flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.roll-item .res{font-family:var(--mono);font-weight:700;color:var(--gold);flex:0 0 auto}
.roll-item .t{font-size:10.5px;color:var(--ghost);flex:0 0 auto}

.check-panel{display:grid;gap:12px}

/* ==========================================================================
   8. 骰娘管理
   ========================================================================== */
.bot-card{
  display:flex;align-items:center;gap:12px;padding:12px;
  background:var(--sidebar);border:1px solid var(--line);border-radius:var(--r-card);transition:var(--mid) var(--ease);
}
.bot-card:hover{border-color:var(--line-hover);transform:translateY(-2px)}
.bot-card.on{border-color:var(--gold-line);background:rgba(214,183,116,.06);box-shadow:0 0 0 3px rgba(214,183,116,.08)}
.bot-card .bc-main{flex:1 1 auto;min-width:0}
.bot-card .bc-name{font-size:14px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.bot-card .bc-desc{font-size:11.5px;color:var(--muted);margin-top:3px;line-height:1.55}
.quip-item{
  display:flex;align-items:center;gap:8px;padding:7px 10px;background:var(--bg-deep);
  border:1px solid var(--line-soft);border-radius:var(--r-ctl);font-size:12.5px;color:var(--dim);
}
.quip-item+.quip-item{margin-top:6px}
.quip-item .del{margin-left:auto;opacity:0;transition:var(--fast)}
.quip-item:hover .del{opacity:1}
.quip-item:hover{border-color:var(--line)}

/* ==========================================================================
   9. AI 配置
   ========================================================================== */
.ai-status{
  display:inline-flex;align-items:center;gap:7px;font-size:11.5px;
  padding:3px 10px;border-radius:var(--r-pill);border:1px solid var(--line);color:var(--muted);background:var(--sidebar);
}
.ai-status.ok{border-color:#2a5440;color:var(--green);background:var(--green-bg)}
.ai-status.bad{border-color:#5a3038;color:var(--red);background:var(--red-bg)}
.ai-status.testing{border-color:var(--gold-line);color:var(--gold);background:rgba(214,183,116,.08)}
.tok-cost{font-family:var(--mono);font-size:11px;color:var(--muted)}

/* ==========================================================================
   10. 全局响应式
   ========================================================================== */
@media (max-width:1320px){
  .room-layout{grid-template-columns:220px minmax(0,1fr) 290px}
  .dice-layout{grid-template-columns:minmax(0,1fr) 310px}
}
@media (max-width:1180px){
  .room-layout{grid-template-columns:200px minmax(0,1fr) 270px}
  .dice-layout{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:980px){
  .room-page{height:auto}
  .room-layout{grid-template-columns:1fr;grid-auto-rows:auto}
  .room-peers,.room-side{overflow:visible;min-height:0}
  .room-main{min-height:58vh}
  .room-peers .peer-list{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}
  .room-peers .peer-card{flex:0 0 auto;width:196px;margin:0}
  .content{overflow:visible;height:auto}
}
@media (max-width:760px){
  .page-head-actions{width:100%}
  .room-header{padding:10px 12px;min-height:auto}
  .chat-list{padding:10px 12px}
  .chat-input{padding:8px}
  .chat-input input{height:46px}
  .chat-input button{width:48px}
  .room-side{padding:12px}
  .dice-result{font-size:44px}
  .stat .v{font-size:20px}
}
@media (max-width:520px){
  .filter-bar{padding:9px 10px}
  .modal-mask{padding:10px}
  .modal{max-height:calc(100dvh - 20px)}
  .sheet-attr-grid{grid-template-columns:repeat(3,1fr)}
}

/* ==========================================================================
   13. 世界书 / 世界状态 / GM 控制台 / 席位控制
   （由 DiceFrame v2.6.1 的设计迁移而来；样式为本站设计系统内新增）
   ========================================================================== */

/* ---------- 通用小药丸 ---------- */
.chip{
  display:inline-flex;align-items:center;gap:4px;
  font-size:11.5px;line-height:1.6;padding:3px 9px;border-radius:var(--r-pill);
  background:var(--sidebar);border:1px solid var(--line);color:var(--muted);
  cursor:pointer;transition:var(--fast);white-space:nowrap;font-family:inherit;
}
.chip:hover{border-color:var(--line-hover);color:var(--text)}
.chip.on{background:var(--panel);border-color:var(--gold-line);color:var(--gold);font-weight:600}
.chip.static{cursor:default}
.chip.static:hover{border-color:var(--line);color:var(--muted)}
.chip-row{display:flex;gap:6px;flex-wrap:wrap}

/* ---------- 13.1 世界书 ---------- */
.lb-layout{display:grid;gap:16px;grid-template-columns:300px minmax(0,1fr);align-items:start}
.lb-side{display:flex;flex-direction:column;max-height:calc(100dvh - 190px);overflow:hidden}
.lb-side-head{padding:12px 12px 0}
.lb-filters{padding:10px 12px;border-bottom:1px solid var(--line-soft)}
.lb-list{flex:1 1 auto;min-height:0;overflow:auto;padding:8px}
.lb-item{
  display:block;width:100%;text-align:left;font-family:inherit;
  background:transparent;border:1px solid transparent;border-radius:var(--r-ctl);
  padding:8px 9px;margin-bottom:3px;cursor:pointer;transition:var(--fast);
  border-left:3px solid transparent;
}
.lb-item:hover{background:var(--sidebar);border-color:var(--line)}
.lb-item.on{background:var(--raise);border-color:var(--line);border-left-color:var(--gold)}
.lb-item-top{display:flex;align-items:center;gap:6px;justify-content:space-between}
.lb-item-top b{font-size:13px;font-weight:600;color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lb-item-meta{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:5px}
.lb-item-meta .tag{font-size:10px;padding:1px 6px}
.lb-item-kw{font-size:11px;color:var(--faint);margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lb-main{min-width:0}

.lb-anchors{background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-card);padding:12px}
.lb-trace{background:var(--panel-2);border:1px solid var(--line-soft);border-radius:var(--r-card);padding:11px 12px}
.lb-trace-row{display:flex;gap:10px;font-size:12px;padding:3px 0;border-bottom:1px dashed var(--line-soft)}
.lb-trace-row:last-child{border-bottom:0}
.lb-trace-row .k{flex:0 0 116px;color:var(--muted)}
.lb-trace-row .v{flex:1 1 auto;min-width:0;color:var(--dim);word-break:break-word}

.lb-result{
  border:1px solid var(--line);border-radius:var(--r-card);padding:10px 12px;margin-bottom:8px;
  background:var(--sidebar);transition:var(--mid) var(--ease);
}
.lb-result:hover{border-color:var(--line-hover);transform:translateX(3px)}
.lb-result-head{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.lb-result-head b{font-size:13.5px;color:var(--text)}
.lb-idx{
  flex:0 0 auto;width:20px;height:20px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:var(--gold);color:var(--gold-ink);font-size:11px;font-weight:700;
}
.lb-result-body{font-size:12.5px;color:var(--dim);line-height:1.65;margin-top:6px}
.lb-result-foot{font-size:11px;color:var(--muted);margin-top:6px}
.lb-result-foot code,.lb-result-head code{color:var(--gold)}

.lb-prompt{
  font-family:var(--mono);font-size:11.5px;line-height:1.7;color:var(--dim);
  background:var(--bg-deep);border:1px solid var(--line-3);border-radius:var(--r-box);
  padding:12px;white-space:pre-wrap;word-break:break-word;margin:0;
  max-height:520px;overflow:auto;
}
.lb-prompt.small{font-size:11px;max-height:360px}

/* ---------- 13.2 世界状态 ---------- */
.ws-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) 330px;align-items:start}
.ws-clock{
  font-family:var(--mono);font-size:30px;font-weight:700;color:var(--gold);
  letter-spacing:1px;line-height:1.25;
}
.ws-table{min-width:560px;width:100%}
.ws-table th{font-weight:500;color:var(--muted);text-align:left;padding:5px 8px 5px 0;border-bottom:1px solid var(--line);white-space:nowrap}
.ws-table td{padding:5px 8px 5px 0;border-bottom:1px solid var(--line-soft);vertical-align:middle}
.ws-table td.c1 code{white-space:nowrap;color:var(--dim)}
.ws-table td.c6{color:var(--gold);font-family:var(--mono);font-size:12px}
.ws-table tr:hover td{background:rgba(255,255,255,.02)}
.ws-ev-form{background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-card);padding:12px}
.ws-ophelp{width:100%}
.ws-ophelp th{font-weight:500;color:var(--muted);text-align:left;padding:5px 10px 5px 0;border-bottom:1px solid var(--line)}
.ws-ophelp td{padding:6px 10px 6px 0;border-bottom:1px solid var(--line-soft);vertical-align:top}
.ws-ophelp td.c1 code{color:var(--gold);white-space:nowrap}
.ws-proj{display:grid;gap:12px;grid-template-columns:1fr 1fr}
.ws-log{max-height:calc(100dvh - 300px);min-height:120px;overflow:auto}
.ws-log-item{
  border-left:2px solid var(--line);padding:7px 0 7px 10px;margin-bottom:6px;
  transition:var(--fast);
}
.ws-log-item:hover{background:rgba(255,255,255,.02)}
.ws-log-item.bad{border-left-color:var(--red)}
.ws-log-head{display:flex;align-items:center;gap:7px}
.ws-log-head b{font-size:12.5px;color:var(--text);font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-log-dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto}
.ws-log-dot.ok{background:var(--green)}
.ws-log-dot.bad{background:var(--red)}
.ws-log-op{
  font-family:var(--mono);font-size:10.5px;color:var(--muted);
  margin-top:3px;word-break:break-all;
}
.ws-log-op.err{color:var(--red)}

/* ---------- 13.3 GM 控制台 ---------- */
.gm-steps{display:flex;align-items:stretch;gap:0;flex-wrap:wrap}
.gm-step{
  flex:1 1 0;min-width:150px;position:relative;
  background:var(--sidebar);border:1px solid var(--line);border-radius:var(--r-card);
  padding:10px 12px;margin-right:8px;
}
.gm-step:last-child{margin-right:0}
.gm-step.done{border-color:var(--gold-line)}
.gm-step.active{border-color:var(--violet);box-shadow:0 0 0 3px rgba(139,109,214,.12)}
.gm-step-no{font-family:var(--mono);font-size:10px;color:var(--ghost);letter-spacing:1px}
.gm-step b{display:block;font-size:13px;color:var(--text);margin-top:2px}
.gm-step span{font-size:11px;color:var(--muted);display:block;margin-top:3px;line-height:1.5}
.gm-check-plan{
  border:1px solid var(--line);border-radius:var(--r-card);padding:10px 12px;margin-bottom:8px;
  background:var(--panel-2);
}
.gm-check-plan .why{font-size:11.5px;color:var(--muted);margin-top:5px}
.gm-tagtable{width:100%;min-width:520px}
.gm-tagtable th{font-weight:500;color:var(--muted);text-align:left;padding:5px 8px 5px 0;border-bottom:1px solid var(--line)}
.gm-tagtable td{padding:5px 8px 5px 0;border-bottom:1px solid var(--line-soft);vertical-align:top;font-size:12px}
.gm-tagtable td.t1 code{color:var(--gold);white-space:nowrap}
.gm-tagtable td.t2 code{color:var(--teal);white-space:nowrap;font-size:11px}
.gm-tagtable tr[data-cat=check] td.t1 code{color:var(--violet)}
.gm-output{
  font-family:var(--mono);font-size:11.5px;line-height:1.7;white-space:pre-wrap;word-break:break-word;
  background:var(--bg-deep);border:1px solid var(--line-3);border-radius:var(--r-box);
  padding:12px;margin:0;max-height:460px;overflow:auto;
}
.gm-output.tags{border-color:var(--gold-line);background:rgba(212,175,55,.06)}
.gm-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) 340px;align-items:start}
.gm-status{display:flex;flex-direction:column}
.gm-tagrules{margin:0;padding-left:18px;font-size:12px;line-height:1.75;color:var(--dim)}
.gm-tagrules li{margin-bottom:6px}
.gm-tagrules li:last-child{margin-bottom:0}

/* ---------- 13.4 席位控制 ---------- */
.seat-list{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}
.seat-card{
  border:1px solid var(--line);border-radius:var(--r-card);padding:12px;
  background:var(--sidebar);transition:var(--mid) var(--ease);
}
.seat-card:hover{transform:translateY(-3px);box-shadow:var(--sh-2);border-color:var(--line-hover)}
.seat-card.mode-human{border-left:3px solid var(--green)}
.seat-card.mode-ai{border-left:3px solid var(--violet)}
.seat-card.mode-unclaimed{border-left:3px solid var(--faint)}
.seat-card.mode-temp{border-left:3px solid var(--gold)}
.seat-top{display:flex;align-items:center;gap:10px}
.seat-top .info{flex:1 1 auto;min-width:0}
.seat-top .nm{font-size:13.5px;color:var(--text);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.seat-top .sub{font-size:11px;color:var(--muted);margin-top:2px}
.seat-actions{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}
.seat-probe{
  margin-top:10px;padding:8px 10px;border-radius:var(--r-box);
  font-family:var(--mono);font-size:11px;background:var(--bg-deep);
  border:1px dashed var(--line-3);color:var(--muted);line-height:1.6;
}
.seat-probe.deny{border-color:#5a3038;color:var(--red)}
.seat-probe.allow{border-color:#2a5440;color:var(--green)}

/* ---------- 13.5 席位控制（名册表） ---------- */
.seat-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) 340px;align-items:start}
.seat-table{width:100%;min-width:640px;border-collapse:collapse;font-size:12.5px}
.seat-table th{
  text-align:left;font-size:11px;font-weight:600;color:var(--muted);
  padding:0 10px 8px 0;border-bottom:1px solid var(--line);white-space:nowrap;
}
.seat-table td{padding:11px 10px 11px 0;border-bottom:1px solid var(--line-soft);vertical-align:top}
.seat-table tr:last-child td{border-bottom:0}
.seat-table tbody tr{transition:background var(--fast)}
.seat-table tbody tr:hover{background:var(--panel-2)}
.seat-col-rev{width:52px;text-align:center}
.seat-who{display:flex;align-items:center;gap:9px}
.seat-av{
  flex:0 0 auto;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;
  background:var(--sidebar);border:1px solid var(--line);color:var(--gold);font-size:13px;font-weight:700;
}
.seat-txt{min-width:0}
.seat-txt b{font-size:13.5px;color:var(--text);font-weight:600}
.seat-sub{display:block;font-size:11px;color:var(--muted);margin-top:2px}
.seat-note{
  font-size:11px;color:var(--faint);margin-top:6px;line-height:1.55;
  padding-left:39px;max-width:330px;
}
.seat-presence{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
.seat-pill{
  font-family:inherit;font-size:11px;line-height:1;padding:5px 9px;border-radius:var(--r-pill);
  background:var(--bg-deep);border:1px solid var(--line-3);color:var(--muted);
  cursor:pointer;transition:var(--fast);white-space:nowrap;
}
.seat-pill:hover{border-color:var(--line-hover);color:var(--text);transform:translateY(-1px)}
.seat-pill.on{background:var(--green-bg);border-color:#2a5440;color:var(--green)}
.seat-pill.off{background:var(--red-bg);border-color:#5a3038;color:var(--red)}
.seat-acts{display:flex;gap:6px;flex-wrap:wrap;max-width:290px}
.seat-acts .btn{padding:5px 10px;font-size:11.5px}
.seat-warn{
  font-size:11.5px;line-height:1.65;color:var(--dim);
  background:var(--bg-deep);border:1px dashed var(--line-3);border-radius:var(--r-box);padding:9px 11px;
}
.seat-warn b{color:var(--gold)}
.seat-rules{margin:0;padding-left:18px;font-size:12px;line-height:1.75;color:var(--dim)}
.seat-rules li{margin-bottom:6px}
.seat-rules li:last-child{margin-bottom:0}
.seat-gate{
  background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-box);
  padding:11px 12px;min-height:56px;display:flex;align-items:center;
}
.sg-line{display:flex;gap:10px;align-items:flex-start;line-height:1.6}
.sg-line .sg-ico{font-size:15px;line-height:1.35;flex:0 0 auto}
.sg-line.ok{border-left:3px solid var(--green);padding-left:10px}
.sg-line.block{border-left:3px solid var(--red);padding-left:10px}
.seat-log{display:flex;flex-direction:column;gap:8px;max-height:calc(100dvh - 260px);min-height:90px;overflow:auto}
.sl-item{
  border-left:2px solid var(--line-3);padding:2px 0 2px 10px;
  font-size:12px;line-height:1.6;color:var(--dim);
  animation:fadeUp .26s var(--ease) both;
}
.sl-item.ok{border-left-color:var(--green)}
.sl-item.warn{border-left-color:var(--gold)}
.sl-item.bad{border-left-color:var(--red)}
.sl-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.sl-head b{color:var(--text);font-size:12.5px}
.sl-time{font-family:var(--mono);font-size:10.5px;color:var(--ghost)}
.seat-modes{display:flex;flex-direction:column;gap:9px}
.seat-modecard{
  background:var(--sidebar);border:1px solid var(--line);border-radius:var(--r-card);padding:10px 11px;
  transition:var(--mid) var(--ease);
}
.seat-modecard:hover{transform:translateX(3px);border-color:var(--line-hover)}
.smc-top{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:4px}
.smc-top code{font-size:12.5px;color:var(--gold)}

/* ---------- 13.6 记忆摘要 ---------- */
.mem-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) 340px;align-items:start}
.mem-recall{display:flex;flex-direction:column;gap:9px}
.mem-hit{
  background:var(--sidebar);border:1px solid var(--line);border-radius:var(--r-card);
  padding:10px 11px;transition:var(--mid) var(--ease);animation:fadeUp .26s var(--ease) both;
}
.mem-hit:hover{transform:translateY(-2px);border-color:var(--line-hover);box-shadow:var(--sh-1)}
.mh-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:6px}
.mh-conf{font-family:var(--mono);font-size:10.5px;color:var(--ghost);margin-left:auto}
.mh-conf+.mh-conf{margin-left:6px}
.mh-body{font-size:12.5px;line-height:1.6;color:var(--dim)}
.mh-body b{color:var(--text)}
.mh-rel{color:var(--muted);margin-left:6px}
.mh-arrow{color:var(--gold);margin:0 6px}
.mr-why{display:flex;gap:5px;flex-wrap:wrap;margin-top:6px}
.mr-why em{
  font-style:normal;font-size:10.5px;color:var(--muted);
  background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-pill);padding:2px 7px;
}
.mem-none{font-size:12px;color:var(--muted);padding:14px 12px;text-align:center;line-height:1.6}
.mem-table-wrap{max-height:340px;overflow:auto}
.mem-table{width:100%;min-width:520px;border-collapse:collapse;font-size:12.5px}
.mem-table th{
  position:sticky;top:0;z-index:1;background:var(--panel);
  text-align:left;font-size:11px;font-weight:600;color:var(--muted);
  padding:0 10px 8px 0;border-bottom:1px solid var(--line);white-space:nowrap;
}
.mem-table td{padding:8px 10px 8px 0;border-bottom:1px solid var(--line-soft);color:var(--dim)}
.mem-table tbody tr:last-child td{border-bottom:0}
.mem-table tbody tr{transition:background var(--fast)}
.mem-table tbody tr:hover{background:var(--panel-2)}
.mem-table td b{color:var(--text)}
.mem-rel{color:var(--muted)}
.mem-col-num{width:58px;text-align:center}
.mem-col-st{width:78px}
.mem-table tr.mem-dead{opacity:.45}
.mem-table tr.mem-dead td{text-decoration:line-through;text-decoration-color:var(--ghost)}
.mem-path{min-height:34px}
.mp-item{
  display:flex;align-items:center;gap:10px;font-size:12px;
  border-left:3px solid var(--line-3);padding:5px 0 5px 10px;animation:fadeUp .24s var(--ease) both;
}
.mp-item code{font-size:12.5px;color:var(--gold);flex:0 0 auto}
.mp-item span{color:var(--dim)}
.mp-item.insert{border-left-color:var(--green)}
.mp-item.update{border-left-color:var(--blue)}
.mp-item.touch{border-left-color:var(--muted)}
.mp-item.supersede{border-left-color:var(--gold)}
.mp-item.skip{border-left-color:var(--red)}
.mem-sum-grid{display:grid;gap:12px;grid-template-columns:1fr 1fr}
.mem-box{
  background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-box);
  padding:10px 11px;margin:0;font-size:11.5px;line-height:1.65;color:var(--dim);
  max-height:190px;overflow:auto;white-space:pre-wrap;word-break:break-word;
}
.mem-facts{display:flex;flex-direction:column;gap:6px}
.mem-fact{
  font-size:12px;color:var(--dim);background:var(--bg-deep);
  border:1px solid var(--line-soft);border-radius:var(--r-box);padding:6px 10px;line-height:1.6;
}
.mem-fact b{color:var(--gold);font-weight:600;margin-right:8px}
.mem-flow{display:flex;flex-direction:column;gap:7px}
.mf-step{
  border-left:2px solid var(--line-3);padding:2px 0 2px 10px;font-size:12px;line-height:1.6;color:var(--dim);
}
.mf-step code{color:var(--gold);margin-right:8px}
.mem-log{display:flex;flex-direction:column;gap:10px;max-height:340px;overflow:auto}
.ml-item{
  border-left:2px solid var(--line-3);padding:2px 0 2px 10px;line-height:1.6;
  font-size:12px;color:var(--dim);
}
.ml-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.ml-head b{color:var(--text);font-size:12.5px}
.ml-time{font-size:10.5px;color:var(--ghost)}

@media (max-width:1180px){
  .ws-layout{grid-template-columns:minmax(0,1fr)}
  .ws-log{max-height:260px}
  .seat-layout{grid-template-columns:minmax(0,1fr)}
  .seat-log{max-height:280px}
  .mem-layout{grid-template-columns:minmax(0,1fr)}
  .mem-log{max-height:280px}
  .gm-layout{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:980px){
  .lb-layout{grid-template-columns:minmax(0,1fr)}
  .lb-side{max-height:280px}
  .ws-proj{grid-template-columns:1fr}
  .mem-sum-grid{grid-template-columns:1fr}
}
/* ==========================================================================
   14.x 第三批：资料库 / 场次中心 / 创作空间 / 回放工坊 / 牌堆 / 骰娘扩展
   ========================================================================== */

/* ---------- 14.1 资料库（实体库 + 双链 + 关系图 + 时间线） ---------- */
.cx-layout{display:grid;gap:16px;grid-template-columns:296px minmax(0,1fr);align-items:start}
.cx-side{display:flex;flex-direction:column;max-height:calc(100dvh - 190px);overflow:hidden}
.cx-side-head{padding:12px 12px 0}
.cx-filters{padding:10px 12px;border-bottom:1px solid var(--line-soft)}
.cx-list{flex:1 1 auto;min-height:0;overflow:auto;padding:8px}
.cx-item{
  display:block;width:100%;text-align:left;font-family:inherit;
  background:transparent;border:1px solid transparent;border-left:3px solid transparent;
  border-radius:var(--r-ctl);padding:8px 9px;margin-bottom:3px;cursor:pointer;transition:var(--fast);
}
.cx-item:hover{background:var(--sidebar);border-color:var(--line)}
.cx-item.on{background:var(--raise);border-color:var(--line);border-left-color:var(--gold)}
.cx-it-top{display:flex;align-items:center;gap:6px}
.cx-it-top b{font-size:13px;color:var(--text);font-weight:600}
.cx-it-sub{font-size:11.5px;color:var(--muted);margin-top:3px;line-height:1.5}
.cx-it-tags{display:flex;gap:4px;flex-wrap:wrap;margin-top:5px}
.cx-type-grid{display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.cx-type{
  border:1px solid var(--line);border-radius:var(--r-ctl);background:var(--sidebar);
  padding:9px 10px;cursor:pointer;transition:var(--fast);
}
.cx-type:hover{border-color:var(--line-hover);transform:translateY(-2px)}
.cx-type.on{border-color:var(--gold-line);background:var(--panel)}
.cx-type .n{font-size:15px;font-weight:600;color:var(--text);margin-top:4px}
.cx-type .d{font-size:11px;color:var(--muted);margin-top:2px;line-height:1.5}
.cx-blocks{display:flex;flex-direction:column;gap:12px}
.cx-block{border-left:2px solid var(--line-3);padding-left:11px}
.cx-block>b{display:block;font-size:11.5px;color:var(--gold);font-weight:600;margin-bottom:5px}
.cx-block .tx{font-size:13px;line-height:1.72;color:var(--dim)}
.cx-link{
  color:var(--blue);border-bottom:1px dashed rgba(127,178,232,.5);cursor:pointer;
  transition:var(--fast);
}
.cx-link:hover{color:var(--gold);border-bottom-color:var(--gold-line)}
.cx-unresolved{color:var(--gold);border-bottom-style:dotted;border-bottom-color:var(--gold-line);opacity:.85}
.cx-unresolved::after{content:"＋";font-size:10px;margin-left:2px;vertical-align:super}
.cx-rel{display:flex;gap:7px;flex-wrap:wrap}
.cx-rel .pic{
  display:inline-flex;align-items:center;gap:5px;font-size:12px;cursor:pointer;
  background:var(--bg-deep);border:1px solid var(--line);border-radius:var(--r-pill);
  padding:4px 10px;color:var(--dim);transition:var(--fast);
}
.cx-rel .pic:hover{border-color:var(--gold-line);color:var(--gold)}
.cx-graph{width:100%;height:auto;display:block;background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-card)}
.cx-edge{stroke:var(--line-hover);stroke-width:1;fill:none}
.cx-node circle{fill:var(--sidebar);stroke:var(--line-hover);stroke-width:1.4;cursor:pointer;transition:var(--fast)}
.cx-node:hover circle{stroke:var(--gold);fill:var(--panel)}
.cx-node text{fill:var(--muted);font-size:10px;text-anchor:middle;pointer-events:none}
.cx-node:hover text{fill:var(--text)}
.cx-node.hub circle{stroke:var(--gold-line);stroke-width:2}
.cx-tl{display:flex;flex-direction:column;gap:0}
.cx-tl-row{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid var(--line-soft);transition:var(--fast)}
.cx-tl-row:last-child{border-bottom:0}
.cx-tl-row:hover{background:var(--panel-2)}
.cx-tl-year{
  flex:0 0 62px;font-family:var(--mono);font-size:13px;color:var(--gold);
  text-align:right;padding-top:1px;
}
.cx-tl-body{min-width:0}
.cx-tl-body b{font-size:13px;color:var(--text)}
.cx-tl-body p{margin:4px 0 0;font-size:12px;line-height:1.65;color:var(--muted)}

/* ---------- 14.2 场次中心 ---------- */
.sess-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) 330px;align-items:start}
.sess-list{display:flex;flex-direction:column;gap:12px}
.sess-card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);
  padding:14px 15px;cursor:pointer;transition:var(--mid) var(--ease);
}
.sess-card:hover{transform:translateY(-2px);border-color:var(--line-hover);box-shadow:var(--sh-1)}
.sess-card.on{border-color:var(--gold-line)}
.sc-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sc-top b{font-size:14px;color:var(--text)}
.sc-idx{font-family:var(--mono);font-size:11px;color:var(--ghost)}
.sc-meta{font-size:11.5px;color:var(--muted);margin-top:5px;line-height:1.6}
.sc-bars{display:flex;gap:14px;margin-top:10px;flex-wrap:wrap}
.sc-bar{flex:1 1 120px;min-width:110px}
.sc-bar .k{display:flex;justify-content:space-between;font-size:11px;color:var(--muted);margin-bottom:4px}
.sc-bar .track{height:5px;border-radius:3px;background:var(--bg-deep);overflow:hidden}
.sc-bar .track i{display:block;height:100%;background:var(--gold);border-radius:3px;transition:width .5s var(--ease)}
.sc-bar.g .track i{background:var(--green)}
.sc-foot{display:flex;align-items:center;gap:8px;margin-top:11px;padding-top:10px;border-top:1px solid var(--line-soft)}
.sess-flow{display:flex;flex-direction:column;gap:7px}
.sf-row{
  display:flex;gap:9px;align-items:flex-start;border-left:2px solid var(--line-3);
  padding:6px 0 6px 10px;transition:var(--fast);
}
.sf-row:hover{background:var(--panel-2)}
.sf-row.done{opacity:.55}
.sf-row.done .sf-t{text-decoration:line-through;text-decoration-color:var(--ghost)}
.sf-t{font-size:12.5px;color:var(--text);line-height:1.6}
.sf-n{font-size:11.5px;color:var(--muted);line-height:1.6;margin-top:2px}
.sf-min{font-family:var(--mono);font-size:11px;color:var(--ghost);margin-left:auto;flex:0 0 auto}
.sess-timer{font-family:var(--mono);font-size:38px;color:var(--text);letter-spacing:1px;text-align:center;padding:6px 0 2px}
.sess-timer.run{color:var(--gold)}
.sess-retro{display:flex;flex-direction:column;gap:9px}
.sess-retro .field{margin:0}

/* ---------- 14.3 创作空间 ---------- */
.st-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) 366px;align-items:start}
.st-chat{
  display:flex;flex-direction:column;gap:10px;max-height:min(58dvh,540px);overflow:auto;
  padding:4px 2px;
}
.st-msg{
  border-radius:var(--r-card);padding:10px 12px;font-size:13px;line-height:1.72;
  animation:fadeUp .26s var(--ease) both;max-width:96%;
}
.st-msg.user{align-self:flex-end;background:var(--raise);border:1px solid var(--line);color:var(--text)}
.st-msg.assistant{align-self:flex-start;background:var(--panel-2);border:1px solid var(--line-soft);color:var(--dim)}
.st-msg.system{align-self:center;background:transparent;border:1px dashed var(--line);color:var(--muted);font-size:11.5px;max-width:100%}
.st-role{font-size:10.5px;color:var(--ghost);margin-bottom:5px;letter-spacing:.4px}
.st-tx{white-space:pre-wrap;word-break:break-word}
.st-quick{display:flex;gap:6px;flex-wrap:wrap}
.st-srcs{display:flex;flex-direction:column;gap:6px}
.st-src{
  display:flex;align-items:center;gap:9px;background:var(--bg-deep);border:1px solid var(--line-soft);
  border-radius:var(--r-box);padding:7px 10px;font-size:12px;color:var(--dim);
}
.st-src .nm{flex:1 1 auto;min-width:0;font-weight:600;color:var(--text)}
.st-src .nt{font-size:10.5px;color:var(--muted);font-weight:400;margin-top:2px}
.st-src.off{opacity:.45}
.st-blocks{display:flex;flex-direction:column;gap:5px;max-height:300px;overflow:auto}
.st-blk{
  display:flex;align-items:center;gap:8px;font-size:11.5px;
  border-left:3px solid var(--line-3);padding:5px 0 5px 9px;
}
.st-blk.kept{border-left-color:var(--green)}
.st-blk.drop{border-left-color:var(--red);opacity:.5}
.st-blk.over{border-left-color:var(--gold)}
.st-blk .lb{flex:1 1 auto;min-width:0;color:var(--dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.st-blk .tk{font-family:var(--mono);font-size:10.5px;color:var(--ghost);flex:0 0 auto}
.st-bar{height:8px;border-radius:4px;background:var(--bg-deep);overflow:hidden;border:1px solid var(--line-soft)}
.st-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--green),var(--gold));transition:width .5s var(--ease)}
.st-bar.over i{background:var(--red)}
.st-mark{background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-box);padding:9px 10px;font-family:var(--mono);font-size:11.5px;color:var(--muted);white-space:pre-wrap;word-break:break-all;line-height:1.65}

/* ---------- 14.4 回放工坊 ---------- */
.rpl-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) 372px;align-items:start}
.rpl-editor{
  width:100%;min-height:330px;font-family:var(--mono);font-size:12.5px;line-height:1.75;
  resize:vertical;
}
.rpl-stats{display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(88px,1fr))}
.rpl-stat{background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-box);padding:7px 9px}
.rpl-stat .k{font-size:10.5px;color:var(--muted)}
.rpl-stat .v{font-family:var(--mono);font-size:16px;color:var(--text);margin-top:2px}
.rpl-sec{
  border:1px solid var(--line-soft);border-radius:var(--r-card);background:var(--panel-2);
  padding:9px 11px;margin-bottom:8px;
}
.rpl-sec-h{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.rpl-sec-h b{font-size:12.5px;color:var(--text);flex:1 1 auto;min-width:0}
.rpl-sec-h .tt{font-family:var(--mono);font-size:10.5px;color:var(--ghost)}
.rpl-line{display:flex;gap:8px;font-size:11.5px;line-height:1.7;color:var(--dim);padding:1px 0}
.rpl-line .kd{
  flex:0 0 84px;font-family:var(--mono);font-size:10.5px;color:var(--ghost);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.rpl-line.k-speak .kd{color:var(--blue)}
.rpl-line.k-bg .kd,.rpl-line.k-anim .kd{color:var(--teal)}
.rpl-line.k-bgm .kd{color:var(--violet)}
.rpl-line.k-dice .kd,.rpl-line.k-hp .kd{color:var(--gold)}
.rpl-line.warn .kd{color:var(--red)}
.rpl-line .pl{flex:1 1 auto;min-width:0;word-break:break-word}
.rpl-sfx{
  display:inline-flex;align-items:center;gap:3px;font-size:10.5px;color:var(--violet);
  border:1px solid var(--line);border-radius:var(--r-pill);padding:0 5px;margin:0 2px;
}
.rpl-sfx i{font-style:normal;color:var(--ghost);font-size:9.5px}
.rpl-ifx{font-family:var(--mono);font-size:10.5px;color:var(--teal);opacity:.9}
.rpl-a{color:var(--blue);border-bottom:1px solid var(--line-hover)}
.rpl-warn{
  display:flex;gap:8px;font-size:11.5px;line-height:1.65;color:var(--dim);
  border-left:3px solid var(--gold);padding:4px 0 4px 9px;
}
.rpl-warn.err{border-left-color:var(--red)}
.rpl-warn .ln{font-family:var(--mono);font-size:10.5px;color:var(--ghost);flex:0 0 46px}
.rpl-preview{
  background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-card);
  min-height:150px;padding:14px;display:flex;flex-direction:column;gap:8px;justify-content:center;
}
.rpl-pv-who{font-size:12px;color:var(--gold);font-weight:600}
.rpl-pv-tx{font-size:13.5px;line-height:1.75;color:var(--text);white-space:pre-wrap;word-break:break-word}
.rpl-pv-tx i{color:var(--muted)}
.rpl-pv-badge{font-size:10.5px;color:var(--muted);font-family:var(--mono)}
.rpl-track{height:4px;border-radius:2px;background:var(--line-soft);overflow:hidden;margin-top:4px}
.rpl-track i{display:block;height:100%;background:var(--gold);transition:width .18s linear}
.rpl-chars{display:flex;gap:6px;flex-wrap:wrap}

/* ---------- 14.5 牌堆（并入掷骰台） ---------- */
.dk-grid{display:grid;gap:9px;grid-template-columns:repeat(auto-fill,minmax(196px,1fr))}
.dk-card{
  background:var(--sidebar);border:1px solid var(--line);border-radius:var(--r-card);
  padding:10px 11px;cursor:pointer;transition:var(--mid) var(--ease);
}
.dk-card:hover{transform:translateY(-2px);border-color:var(--line-hover);box-shadow:var(--sh-1)}
.dk-card.on{border-color:var(--gold-line);background:var(--panel)}
.dk-card b{font-size:13px;color:var(--text)}
.dk-card .ds{font-size:11px;color:var(--muted);line-height:1.55;margin-top:4px}
.dk-card .ft{display:flex;align-items:center;justify-content:space-between;margin-top:8px;font-size:10.5px;color:var(--ghost);font-family:var(--mono)}
.dk-out{display:flex;flex-direction:column;gap:8px}
.dk-drawn{
  background:var(--panel-2);border:1px solid var(--line-soft);border-left:3px solid var(--gold);
  border-radius:var(--r-box);padding:9px 11px;font-size:13px;line-height:1.7;color:var(--text);
  animation:fadeUp .3s var(--ease) both;
}
.dk-drawn .no{font-family:var(--mono);font-size:10.5px;color:var(--ghost);margin-right:8px}
.dk-drawn .var{font-size:10.5px;color:var(--muted);margin-left:6px}
.dk-log{display:flex;flex-direction:column;gap:8px;max-height:300px;overflow:auto}
.dk-lrow{border-left:2px solid var(--line-3);padding:3px 0 3px 10px;font-size:11.5px;color:var(--muted);line-height:1.6}
.dk-lrow b{color:var(--text);font-size:12px}
.dk-lrow .t{font-family:var(--mono);font-size:10.5px;color:var(--ghost);margin-left:6px}
.dk-editor{font-family:var(--mono);font-size:12px;min-height:150px}

/* ---------- 14.6 骰娘扩展（自定义回复 / 敏感词 / 段子 / 手册） ---------- */
.bk-rule{
  background:var(--sidebar);border:1px solid var(--line);border-radius:var(--r-card);
  padding:11px 12px;margin-bottom:9px;transition:var(--fast);
}
.bk-rule.off{opacity:.5}
.bk-rule-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.bk-rule-h b{font-size:12.5px;color:var(--text)}
.bk-keys{display:flex;gap:5px;flex-wrap:wrap;margin-top:7px}
.bk-key{
  font-family:var(--mono);font-size:11px;color:var(--gold);background:var(--bg-deep);
  border:1px solid var(--line-soft);border-radius:var(--r-box);padding:2px 7px;
}
.bk-reply{
  font-size:12px;line-height:1.7;color:var(--dim);background:var(--bg-deep);
  border:1px solid var(--line-soft);border-radius:var(--r-box);padding:8px 10px;margin-top:8px;
}
.bk-reply code{color:var(--gold);font-size:11.5px}
.bk-vars{display:flex;gap:5px;flex-wrap:wrap;margin-top:6px}
.bk-var{
  font-family:var(--mono);font-size:10.5px;color:var(--blue);cursor:pointer;
  background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-pill);padding:2px 8px;
}
.bk-var:hover{border-color:var(--gold-line);color:var(--gold)}
.bk-wl{display:flex;flex-direction:column;gap:6px}
.bk-w{
  display:flex;align-items:center;gap:9px;background:var(--bg-deep);
  border:1px solid var(--line-soft);border-left:3px solid var(--muted);
  border-radius:var(--r-box);padding:7px 10px;font-size:12px;
}
.bk-w.block{border-left-color:var(--red)}
.bk-w.warn{border-left-color:var(--gold)}
.bk-w .wd{flex:0 0 auto;color:var(--text);font-weight:600}
.bk-w .nt{flex:1 1 auto;min-width:0;color:var(--muted);font-size:11px}
.bk-hit{background:var(--red-bg);border:1px solid var(--red);border-radius:var(--r-box);padding:9px 11px;font-size:12px;line-height:1.75;color:var(--dim);margin-top:10px}
.bk-hit mark{background:rgba(224,108,90,.35);color:var(--text);border-radius:2px;padding:0 1px}
.bk-joke{
  background:var(--panel-2);border:1px solid var(--line-soft);border-left:3px solid var(--violet);
  border-radius:var(--r-box);padding:11px 13px;font-size:13.5px;line-height:1.8;color:var(--text);
  animation:fadeUp .3s var(--ease) both;
}
.bk-help{
  background:var(--sidebar);border:1px solid var(--line);border-radius:var(--r-card);
  padding:10px 12px;margin-bottom:8px;
}
.bk-help code{color:var(--gold);font-size:12.5px;margin-right:8px}
.bk-help b{font-size:12.5px;color:var(--text)}
.bk-help p{margin:6px 0 0;font-size:11.5px;line-height:1.7;color:var(--muted)}
.bk-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.bk-tools .grow{flex:1 1 auto}
.bk-help .bk-hg{font-size:10.5px;color:var(--ghost);letter-spacing:.4px}
.bk-help .bk-al{font-size:10.5px;color:var(--muted);margin-left:6px}
.bk-joke .bk-jt{font-size:10.5px;color:var(--violet);letter-spacing:.4px;margin-bottom:5px}
.bk-none{font-size:12px;color:var(--muted);padding:14px 0;text-align:center}

/* ---------- 14.7 招募板（并入大厅） ---------- */
.rec-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
.rec-card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);
  padding:14px 15px;display:flex;flex-direction:column;
  transition:var(--mid) var(--ease);
}
.rec-card:hover{transform:translateY(-2px);border-color:var(--line-hover);box-shadow:var(--sh-1)}
.rec-top{display:flex;align-items:flex-start;gap:9px}
.rec-top b{font-size:14px;color:var(--text);line-height:1.5}
.rec-sub{font-size:11.5px;color:var(--muted);margin-top:5px;line-height:1.6}
.rec-pitch{font-size:12.5px;line-height:1.7;color:var(--dim);margin-top:9px;flex:1 1 auto}
.rec-need{display:flex;align-items:center;gap:8px;margin-top:11px}
.rec-slots{display:flex;gap:4px}
.rec-slot{width:16px;height:7px;border-radius:2px;background:var(--bg-deep);border:1px solid var(--line)}
.rec-slot.filled{background:var(--gold);border-color:var(--gold-line)}
.rec-foot{display:flex;align-items:center;gap:8px;margin-top:11px;padding-top:10px;border-top:1px solid var(--line-soft)}

/* ---------- 14.8 引继码（并入角色卡） ---------- */
.ci-panel{display:flex;flex-direction:column;gap:10px}
.ci-code{
  font-family:var(--mono);font-size:11.5px;line-height:1.7;word-break:break-all;
  background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-box);
  padding:9px 11px;color:var(--dim);max-height:150px;overflow:auto;
}
.ci-pick{display:flex;flex-direction:column;gap:6px}
.ci-row{
  display:flex;align-items:center;gap:9px;background:var(--bg-deep);
  border:1px solid var(--line-soft);border-radius:var(--r-box);padding:8px 10px;font-size:12px;color:var(--dim);
}
.ci-row.on{border-color:var(--gold-line)}
.ci-row b{color:var(--text);font-size:12.5px}
.ci-row .grow{min-width:0}
.ci-row span{font-size:11px;color:var(--muted)}

/* ---------- 14.9 记忆库扩展（重要度 / 标签） ---------- */
.mem-col-imp{width:104px}
.mem-imp{font-family:var(--mono);font-size:10.5px;letter-spacing:1px;color:var(--muted)}
.mem-imp.hi{color:var(--gold)}
.mem-imp.lo{color:var(--ghost)}
.mem-table td .btn.tiny{padding:2px 6px;min-height:0;line-height:1.4}

/* ---------- 14.10 规则模板 + 引继码输入框 ---------- */
.tpl-grid{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(232px,1fr))}
.tpl-card{
  background:var(--sidebar);border:1px solid var(--line);border-radius:var(--r-card);
  padding:12px 13px;cursor:pointer;transition:var(--fast);display:flex;flex-direction:column;
}
.tpl-card:hover{transform:translateY(-2px);border-color:var(--line-hover);box-shadow:var(--sh-1)}
.tpl-card.on{border-color:var(--gold-line);background:var(--panel)}
.tpl-card .th{display:flex;align-items:center;gap:8px}
.tpl-card .ico{font-size:18px;line-height:1}
.tpl-card b{font-size:13.5px;color:var(--text)}
.tpl-card .tt{font-size:10.5px;color:var(--ghost);font-family:var(--mono)}
.tpl-card .ds{font-size:11.5px;line-height:1.65;color:var(--muted);margin-top:8px;flex:1 1 auto}
.tpl-card .at{display:flex;gap:4px;flex-wrap:wrap;margin-top:10px}
.tpl-card .at span{
  font-family:var(--mono);font-size:10.5px;color:var(--gold);background:var(--bg-deep);
  border:1px solid var(--line-soft);border-radius:var(--r-box);padding:1px 6px;
}
.code-box{
  font-family:var(--mono);font-size:11.5px;line-height:1.7;word-break:break-all;
  background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-box);
  color:var(--dim);resize:vertical;
}
.code-peek{
  background:var(--bg-deep);border:1px solid var(--line-soft);border-left:3px solid var(--gold);
  border-radius:var(--r-box);padding:9px 11px;font-size:12px;line-height:1.7;color:var(--dim);margin-bottom:10px;
}
.code-peek b{color:var(--text)}
.code-peek .bad{border-left-color:var(--red)}

/* ---------- 14.11 站点偏好（字号密度）+ 备份列表 ---------- */
.bak-list{display:flex;flex-direction:column;gap:6px;max-height:230px;overflow:auto}
html[data-density="large"] .chat-list{font-size:15px}
html[data-density="large"] .st-msg,
html[data-density="large"] .rpl-pv-tx{font-size:15px}
html[data-density="compact"] .chat-list{font-size:12.5px}
html[data-density="compact"] .st-msg,
html[data-density="compact"] .rpl-pv-tx{font-size:12.5px}

/* ---------- 15. 能力总览（八个来源项目 → 落点索引） ---------- */
.ft-legend{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ft-legend .small{line-height:1.6}
.ft-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(430px,1fr));margin-top:16px}
.ft-card{display:flex;flex-direction:column}
.ft-head{display:flex;align-items:flex-start;gap:10px}
.ft-no{
  flex:0 0 auto;width:24px;height:24px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--mono);font-size:11.5px;font-weight:700;
  background:rgba(214,183,116,.14);border:1px solid var(--gold-line);color:var(--gold);
}
.ft-titles{flex:1 1 auto;min-width:0}
.ft-name{display:block;font-size:14.5px;font-weight:600;color:var(--text);line-height:1.4}
.ft-repo{font-family:var(--mono);font-size:11px;color:var(--muted);text-decoration:none;transition:var(--fast)}
.ft-repo:hover{color:var(--gold)}
.ft-badges{display:flex;gap:5px;flex-wrap:wrap;flex:0 0 auto;justify-content:flex-end}
.ft-what{font-size:12.5px;line-height:1.7;color:var(--muted);margin:9px 0 0}
.ft-items{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}
.ft-items li{
  display:flex;align-items:center;gap:10px;
  background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-box);
  padding:9px 11px;transition:var(--fast);
}
.ft-items li:hover{border-color:var(--line-hover);background:var(--panel-2)}
.fi-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}
.fi-name{font-size:13px;color:var(--text);font-weight:600}
.fi-desc{font-size:11.5px;color:var(--muted);line-height:1.6}
.fi-where{font-size:10.5px;color:var(--faint);font-family:var(--mono)}
.fi-go{flex:0 0 auto}
.ft-index{display:flex;flex-direction:column;gap:6px}
.ft-row{
  display:grid;grid-template-columns:150px minmax(0,1fr) 180px;gap:12px;align-items:center;
  padding:9px 11px;background:var(--bg-deep);border:1px solid var(--line-soft);border-radius:var(--r-box);
  transition:var(--fast);
}
.ft-row:hover{border-color:var(--line-hover)}
.fr-left{display:flex;align-items:center;gap:7px;min-width:0}
.fr-file{font-family:var(--mono);font-size:12px;color:var(--gold);text-decoration:none}
.fr-file:hover{text-decoration:underline}
.fr-mid{display:flex;gap:5px;flex-wrap:wrap;min-width:0}
.fr-item{
  font-size:11.5px;color:var(--dim);background:var(--panel-2);
  border:1px solid var(--line-soft);border-radius:var(--r-box);padding:1px 7px;
}
.fr-src{font-size:10.5px;color:var(--faint);text-align:right}

@media (max-width:1180px){
  .sess-layout{grid-template-columns:minmax(0,1fr)}
  .st-layout{grid-template-columns:minmax(0,1fr)}
  .rpl-layout{grid-template-columns:minmax(0,1fr)}
  .cx-layout{grid-template-columns:250px minmax(0,1fr)}
  .sess-timer{font-size:32px}
}
@media (max-width:900px){
  .cx-layout{grid-template-columns:minmax(0,1fr)}
  .cx-side{max-height:300px}
  .cx-side-head{padding-top:0}
  .st-chat{max-height:none}
  .rpl-draw-tabs{flex-wrap:wrap}
}
@media (max-width:760px){
  .rpl-line{flex-direction:column;gap:1px}
  .rpl-line .kd{flex:0 0 auto}
  .sess-timer{font-size:28px}
  .cx-type-grid{grid-template-columns:1fr 1fr}
  .rec-grid{grid-template-columns:1fr}
  .dk-grid{grid-template-columns:1fr}
}

@media (max-width:760px){
  .ws-clock{font-size:24px}
  .lb-trace-row{flex-direction:column;gap:2px}
  .lb-trace-row .k{flex:0 0 auto}
  .gm-step{margin-right:0;margin-bottom:8px;flex:1 1 100%}
  /* 名册表在窄屏转卡片式：表头隐藏，每行占满一屏宽 */
  .seat-table{min-width:0;font-size:12px}
  .seat-table thead{display:none}
  .seat-table tbody tr{
    display:grid;gap:8px;padding:12px 0;border-bottom:1px solid var(--line-soft);
  }
  .seat-table td{padding:0;border-bottom:0}
  .seat-col-rev{width:auto;text-align:left}
  .seat-note{padding-left:0;max-width:none}
  .seat-acts{max-width:none}
  .seat-presence{flex-direction:row;flex-wrap:wrap}
  .mem-table-wrap{max-height:280px}
  /* 能力总览：窄屏一列，直达按钮换到下一行 */
  .ft-grid{grid-template-columns:minmax(0,1fr)}
  .ft-items li{flex-wrap:wrap;gap:8px}
  .fi-main{flex:1 1 100%}
  .ft-row{grid-template-columns:minmax(0,1fr);gap:6px}
  .fr-src{text-align:left}
}
