:root{
  --bg:#0d0b14; --bg2:#141020; --panel:#1a1526; --panel2:#221a33;
  --gold:#c9a227; --gold2:#e6c65a; --ink:#ece7f5; --muted:#9a90b3;
  --line:#2e2740; --accent:#7b4fd6; --danger:#c0392b;
  --gryf:#7f0909; --slyth:#0d6217; --raven:#0e1a40; --huff:#ecb939;
  --shadow:0 8px 30px rgba(0,0,0,.5);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);
  font-family:"Noto Serif SC",ui-serif,Georgia,"Songti SC",serif;
  overflow:hidden}
#app{display:flex;flex-direction:column;height:100dvh;max-width:820px;margin:0 auto;
  background:linear-gradient(180deg,#0f0b18,#0b0812);position:relative}

/* 顶栏 */
#topbar{display:flex;align-items:center;justify-content:space-between;
  padding:10px 14px;background:linear-gradient(180deg,#1c1430,#150f24);
  border-bottom:1px solid var(--line);box-shadow:0 2px 10px rgba(0,0,0,.4);z-index:5}
.brand{display:flex;align-items:center;gap:10px}
.crest{font-size:26px;filter:drop-shadow(0 0 6px rgba(201,162,39,.5))}
.title{font-size:17px;font-weight:700;color:var(--gold2);letter-spacing:1px}
.subtitle{font-size:11px;color:var(--muted);margin-top:2px}
.topbtns{display:flex;gap:6px}
.iconbtn{width:38px;height:38px;border:1px solid var(--line);background:var(--panel);
  color:var(--ink);border-radius:10px;font-size:17px;cursor:pointer;transition:.15s}
.iconbtn:active{transform:scale(.92);background:var(--panel2)}

/* 舞台 */
#stage{flex:1;overflow-y:auto;padding:16px 14px 8px;scroll-behavior:smooth}
#stage::-webkit-scrollbar{width:6px}
#stage::-webkit-scrollbar-thumb{background:#3a2f52;border-radius:3px}
#log{display:flex;flex-direction:column;gap:14px}

.msg{animation:fade .35s ease}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.msg.user{align-self:flex-end;max-width:82%}
.msg.user .bubble{background:linear-gradient(135deg,#3a2a6b,#4a2f7a);
  padding:10px 14px;border-radius:14px 14px 4px 14px;color:#efeaff;
  border:1px solid #5a44a0;box-shadow:var(--shadow);font-size:15px;line-height:1.6}
.msg.ai{align-self:stretch}
.msgtools{display:flex;gap:6px;justify-content:flex-end;margin-top:6px;padding-right:2px}{background:var(--panel);border:1px solid var(--line);color:var(--muted);
  border-radius:8px;padding:5px 12px;font-size:14px;cursor:pointer;transition:.15s}
.mt-btn:active{transform:scale(.9);background:var(--panel2);color:var(--ink)}
.editbox{width:100%;min-height:140px;background:#0c0912;border:1px solid var(--accent);
  color:var(--ink);border-radius:8px;padding:12px;font-size:15px;line-height:1.7;
  font-family:inherit;resize:vertical}
.editbox:focus{outline:none}
.editrow{display:flex;gap:8px;justify-content:flex-end;margin-top:8px}

/* 选项按钮 */
.options{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.opt-btn{display:flex;align-items:center;gap:10px;text-align:left;cursor:pointer;
  background:linear-gradient(180deg,#191322,#140f1f);border:1px solid var(--line);
  border-radius:10px;padding:10px 13px;transition:.15s;color:var(--ink);font-family:inherit}
.opt-btn:active{transform:scale(.98)}
.opt-btn:hover{border-color:var(--gold);background:#1e1730}
.opt-tag{flex:none;font-size:12px;font-weight:700;color:var(--gold2);
  min-width:62px;padding:3px 8px;background:#0e0a16;border:1px solid var(--line);border-radius:6px;text-align:center}
.opt-txt{font-size:14px;line-height:1.5;color:#e7e1f2}
.opt-free{opacity:.85}
.opt-free .opt-tag{color:var(--accent)}
.scene{background:linear-gradient(180deg,#191322,#150f1f);
  border:1px solid var(--line);border-left:3px solid var(--gold);
  border-radius:10px;padding:14px 16px;box-shadow:var(--shadow)}
.scene p{margin:0 0 10px;line-height:1.85;font-size:15.5px;color:#e7e1f2;text-align:justify}
.scene p:last-child{margin-bottom:0}
.scene img{max-width:100%;border-radius:8px;margin:8px 0;border:1px solid var(--line)}
.scene .illu-missing{display:inline-block;padding:2px 8px;margin:4px 0;font-size:12px;
  color:var(--muted);background:#0e0a16;border:1px dashed #3a2f52;border-radius:6px}

/* 状态栏卡片(内嵌在剧情后) */
.statuscard{margin-top:10px;background:#0f0b18;border:1px solid var(--line);
  border-radius:10px;overflow:hidden;font-size:13px}
.statuscard .sc-head{background:linear-gradient(90deg,#2a1f45,#1e1733);
  padding:7px 12px;font-size:12px;color:var(--gold2);font-weight:700;
  display:flex;align-items:center;gap:6px;border-bottom:1px solid var(--line)}
.statuscard .sc-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line)}
.statuscard .sc-item{background:#120d1c;padding:7px 11px;line-height:1.5}
.statuscard .sc-item .k{color:var(--muted);font-size:11px}
.statuscard .sc-item .v{color:#e7e1f2}
.statuscard .sc-item.full{grid-column:1/-1}

.msg.system{align-self:center;font-size:12px;color:var(--muted);
  background:#140f1f;border:1px solid var(--line);padding:6px 12px;border-radius:20px}

/* 打字指示 */
.typing{display:flex;gap:5px;padding:12px 16px}
.typing span{width:8px;height:8px;border-radius:50%;background:var(--gold);
  animation:bounce 1.2s infinite}
.typing span:nth-child(2){animation-delay:.2s}
.typing span:nth-child(3){animation-delay:.4s}
@keyframes bounce{0%,60%,100%{transform:translateY(0);opacity:.4}30%{transform:translateY(-7px);opacity:1}}
.hidden{display:none!important}

/* 输入区 */
#composer{border-top:1px solid var(--line);background:linear-gradient(180deg,#150f24,#0f0b18);padding:8px 10px 10px}
.quickbar{display:flex;gap:6px;overflow-x:auto;padding-bottom:6px;scrollbar-width:none}
.quickbar::-webkit-scrollbar{display:none}
.quickchip{white-space:nowrap;font-size:12px;padding:5px 12px;border-radius:16px;
  background:var(--panel);border:1px solid var(--line);color:var(--muted);cursor:pointer;flex:none}
.quickchip:active{background:var(--panel2);color:var(--ink)}
.inputrow{display:flex;gap:8px;align-items:flex-end}
.modelrow{display:flex;gap:8px;align-items:center}
.modelrow input{flex:1}
.modelrow .mt-btn{flex:none;padding:9px 14px}
.modelhint{font-size:11.5px;margin-top:4px;color:var(--muted);min-height:14px}
.modelhint.ok{color:#7fd18a}
.modelhint.err{color:#ff8a7a}
.sec-title{font-size:13px;color:var(--gold2);font-weight:700;margin:2px 0 -4px;
  padding-bottom:4px;border-bottom:1px solid var(--line)}
#input{flex:1;resize:none;max-height:120px;background:#0c0912;border:1px solid var(--line);
  color:var(--ink);border-radius:12px;padding:11px 14px;font-size:15px;font-family:inherit;line-height:1.5}
#input:focus{outline:none;border-color:var(--accent)}
.sendbtn{width:46px;height:46px;flex:none;border:none;border-radius:12px;
  background:linear-gradient(135deg,var(--gold),#a8851d);color:#1a1206;font-size:18px;
  font-weight:700;cursor:pointer;box-shadow:var(--shadow);transition:.15s}
.sendbtn:active{transform:scale(.9)}
.sendbtn:disabled{opacity:.4;cursor:not-allowed}

/* 抽屉 */
.drawer{position:fixed;top:0;right:0;height:100dvh;width:min(360px,86vw);
  background:linear-gradient(180deg,#161020,#100b1a);border-left:1px solid var(--line);
  box-shadow:-10px 0 40px rgba(0,0,0,.6);z-index:30;display:flex;flex-direction:column;
  animation:slideIn .25s ease}
@keyframes slideIn{from{transform:translateX(100%)}to{transform:none}}
.drawer-head{display:flex;justify-content:space-between;align-items:center;
  padding:14px 16px;border-bottom:1px solid var(--line);color:var(--gold2);font-weight:700}
.drawer-body{flex:1;overflow-y:auto;padding:14px}
.drawer-body .empty{color:var(--muted);text-align:center;margin-top:40px}
.st-section{margin-bottom:16px}
.st-section h4{margin:0 0 8px;font-size:13px;color:var(--gold2);
  border-bottom:1px solid var(--line);padding-bottom:5px}
.st-row{display:flex;justify-content:space-between;gap:10px;padding:5px 0;font-size:13px;line-height:1.5}
.st-row .k{color:var(--muted);flex:none}
.st-row .v{color:#e7e1f2;text-align:right}

/* 弹窗 */
.modal{position:fixed;inset:0;background:rgba(4,2,8,.72);z-index:40;
  display:flex;align-items:center;justify-content:center;padding:16px;backdrop-filter:blur(3px)}
.modal-card{width:100%;max-width:400px;max-height:88dvh;overflow-y:auto;
  background:linear-gradient(180deg,#1a1428,#120d1e);border:1px solid var(--gold);
  border-radius:16px;box-shadow:var(--shadow);animation:fade .25s}
.modal-head{display:flex;justify-content:space-between;align-items:center;
  padding:16px;border-bottom:1px solid var(--line);color:var(--gold2);font-weight:700;font-size:16px}
.modal-body{padding:16px;display:flex;flex-direction:column;gap:12px}
.modal-body label{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--muted)}
.modal-body input,.modal-body select,.modal-body textarea{
  background:#0c0912;border:1px solid var(--line);color:var(--ink);
  border-radius:9px;padding:10px 12px;font-size:14px;font-family:inherit}
.modal-body input:focus,.modal-body select:focus,.modal-body textarea:focus{outline:none;border-color:var(--accent)}
.row2{display:flex;gap:10px}.row2 label{flex:1}
.chk{flex-direction:row!important;align-items:center;gap:8px!important;color:var(--ink)!important}
.chk input{width:auto}
.hint{font-size:11.5px;color:var(--muted);line-height:1.6;background:#0e0a16;
  padding:9px 11px;border-radius:8px;border:1px solid var(--line)}
.primary{background:linear-gradient(135deg,var(--gold),#a8851d);color:#1a1206;
  border:none;border-radius:10px;padding:13px;font-size:15px;font-weight:700;cursor:pointer;margin-top:4px}
.primary:active{transform:scale(.98)}
.menubtn{background:var(--panel);border:1px solid var(--line);color:var(--ink);
  border-radius:10px;padding:13px;font-size:14px;cursor:pointer;text-align:left;transition:.15s}
.menubtn:active{background:var(--panel2)}
.menubtn.danger{color:#ff8a7a;border-color:#5a2020}
.closebtn{background:none;border:none;color:var(--muted);font-size:18px;cursor:pointer}

.toast{position:fixed;bottom:90px;left:50%;transform:translateX(-50%);
  background:#241a3a;border:1px solid var(--gold);color:var(--gold2);
  padding:10px 18px;border-radius:24px;font-size:13px;z-index:50;box-shadow:var(--shadow);
  animation:fade .2s}

@media(max-width:480px){
  .title{font-size:15px}
  .statuscard .sc-grid{grid-template-columns:1fr}
}
