@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=DM+Sans:wght@400;500;700&display=swap');

:root{
  --ink:#12100e; --ink2:#1c1916; --ink3:#26221d;
  --paper:#efe7d6; --paper2:#e4d9c3; --paper3:#f6f1e5;
  --cinnabar:#9c2b21; --cinnabar2:#77201a; --gold:#b08b4f; --jade:#4f6b5a;
  --muted:#8b8274; --line:#cdbfa4; --line2:#3a342c; --white:#fbf7ee;
  --shadow:0 20px 60px rgba(10,8,6,.28);
}
*{box-sizing:border-box}
html,body{margin:0}
body{
  background:
    radial-gradient(circle at 18% -10%, #241f19 0%, transparent 55%),
    radial-gradient(circle at 88% 8%, #221c16 0%, transparent 45%),
    var(--ink);
  color:var(--paper3);
  font-family:'DM Sans','Noto Serif SC',system-ui,sans-serif;
  min-height:100vh;
}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
.hidden{display:none!important}
.shell{max-width:1280px;margin:0 auto;padding:0 34px}
main{min-height:calc(100vh - 150px);padding:36px 0 60px}

/* ---------- 顶栏 ---------- */
.topbar{height:84px;display:flex;align-items:center;gap:26px;border-bottom:1px solid var(--line2)}
.brand{display:flex;align-items:center;gap:14px;color:inherit;text-decoration:none}
.seal{
  width:44px;height:44px;display:grid;place-items:center;
  border:2px solid var(--cinnabar);color:var(--cinnabar);
  font:600 21px 'Noto Serif SC',serif;background:rgba(156,43,33,.08);
  box-shadow:inset 0 0 0 2px rgba(156,43,33,.18);transform:rotate(-4deg);
}
.brand-text strong{display:block;font:600 17px 'Noto Serif SC',serif;letter-spacing:.16em}
.brand-text small{display:block;font-size:10px;letter-spacing:.2em;color:var(--muted);margin-top:4px}
.topnav{display:flex;gap:4px;margin-left:auto}
.topnav button{background:none;border:0;color:var(--muted);font-size:12px;letter-spacing:.08em;padding:9px 14px}
.topnav button:hover{color:var(--paper)}
.topnav button.active{color:var(--gold);box-shadow:inset 0 -2px 0 var(--gold)}
.account{display:flex;align-items:center;gap:9px;font-size:12px;color:var(--muted)}
.dot{width:6px;height:6px;border-radius:50%;background:var(--jade);box-shadow:0 0 8px var(--jade)}
.link{background:none;border:0;color:var(--gold);font-size:11px;letter-spacing:.05em;padding:3px 2px}
.link:hover{color:var(--paper)}
.link.back{display:block;margin-bottom:16px;color:var(--muted)}

/* ---------- 通用 ---------- */
.eyebrow{margin:0 0 12px;color:var(--gold);font-size:10px;letter-spacing:.28em;font-weight:700}
.kicker{margin:0 0 10px;color:var(--gold);font-size:9px;letter-spacing:.22em;font-weight:700}
h1,h2{font-family:'Noto Serif SC',serif;font-weight:500;margin:0}
h1{font-size:40px;letter-spacing:.04em;line-height:1.3}
h2{font-size:20px;letter-spacing:.05em}
.muted{color:var(--muted);font-size:12px;line-height:1.8;margin:6px 0 0}
.hint{color:var(--muted);font-size:10px;line-height:1.7;margin:8px 0 0}
.err{color:#e08578;font-size:11px;min-height:16px;margin:8px 0 0}
.card{background:linear-gradient(180deg,rgba(255,253,246,.045),rgba(255,253,246,.015));
  border:1px solid var(--line2);padding:22px;position:relative}
.card:before{content:'';position:absolute;inset:5px;border:1px solid rgba(205,191,164,.12);pointer-events:none}
.card h2{margin-bottom:12px}
.stack{display:grid;gap:2px;margin-top:12px}
label{display:block;font-size:10px;letter-spacing:.12em;color:var(--muted);font-weight:700;margin:0 0 14px}
.fnote{color:var(--gold);margin-left:7px;font-weight:500;letter-spacing:.04em}
input,select,textarea{
  display:block;width:100%;margin-top:7px;padding:11px 12px;
  background:rgba(0,0,0,.32);border:1px solid var(--line2);color:var(--paper3);
  outline:none;border-radius:0;font-size:13px;letter-spacing:.02em;
}
textarea{resize:vertical;line-height:1.75;font-family:'Noto Serif SC',serif;font-size:12.5px}
input:focus,select:focus,textarea:focus{border-color:var(--gold);background:rgba(0,0,0,.5)}
input::placeholder,textarea::placeholder{color:#6a6357}
select{appearance:none}
.btn{
  border:1px solid var(--gold);background:transparent;color:var(--gold);
  padding:11px 18px;font-size:11px;letter-spacing:.14em;font-weight:700;transition:.18s;
}
.btn:hover{background:rgba(176,139,79,.14)}
.btn.primary{background:var(--cinnabar);border-color:var(--cinnabar);color:#fdf6ee}
.btn.primary:hover{background:var(--cinnabar2)}
.btn.ghost{border-color:var(--line2);color:var(--paper2)}
.btn.ghost:hover{border-color:var(--gold);color:var(--gold)}
.btn.danger{border-color:#7a3a33;color:#d99083}
.btn.danger:hover{background:rgba(122,58,51,.22)}
.btn.small{padding:8px 13px;font-size:10px}
.btn.full{width:100%;margin-top:6px}
.badge{font-size:9px;letter-spacing:.16em;padding:4px 9px;border:1px solid var(--line2);color:var(--muted)}
.badge.draft{color:#c9a86a;border-color:#5c4a2c}
.badge.published{color:#8fbf9d;border-color:#3d5a48}
.filebtn{display:inline-block;border:1px dashed var(--line2);padding:9px 13px;font-size:10px;
  letter-spacing:.1em;color:var(--paper2);cursor:pointer;margin:6px 0}
.filebtn:hover{border-color:var(--gold);color:var(--gold)}
.filebtn input{display:none}
.note{display:flex;gap:10px;margin-top:20px;padding:12px;background:rgba(0,0,0,.26);border-left:2px solid var(--gold)}
.note p{margin:0;font-size:10px;line-height:1.8;color:var(--muted)}
.note-mark{color:var(--gold);font-size:12px}

/* ---------- 登录 ---------- */
.auth-split{display:grid;grid-template-columns:1.15fr .85fr;gap:70px;align-items:center;min-height:600px}
.auth-art h1{font-size:clamp(34px,4.4vw,56px);margin:0 0 20px}
.auth-art h1 em{font-style:normal;color:var(--cinnabar)}
.lede{max-width:440px;color:var(--muted);font-size:13px;line-height:2}
.rules-line{list-style:none;padding:0;margin:38px 0 0;display:flex;flex-wrap:wrap;gap:0}
.rules-line li{font-size:10px;letter-spacing:.14em;color:var(--gold);padding-right:18px;margin-right:18px;border-right:1px solid var(--line2)}
.rules-line li:last-child{border:0}
.auth-card{background:var(--paper);color:var(--ink);box-shadow:var(--shadow);padding:30px 30px 24px}
.auth-card:before{border-color:rgba(120,100,70,.22)}
.auth-card label{color:#6d6455}
.auth-card input{background:rgba(255,255,255,.55);border-color:#c9bda4;color:var(--ink)}
.auth-card input:focus{background:#fff}
.auth-card .hint{color:#8b8274}
.tabs{display:flex;gap:22px;border-bottom:1px solid #cdbfa4;margin-bottom:22px}
.tabs button{background:none;border:0;padding:0 0 12px;color:#9a9182;font-size:13px;letter-spacing:.08em}
.tabs button.active{color:var(--ink);box-shadow:inset 0 -2px 0 var(--cinnabar)}

/* ---------- 大厅 ---------- */
.hall-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:26px}
.hall-head h1{font-size:36px}
.hall-grid{display:grid;grid-template-columns:1fr 1fr 1.15fr;gap:16px;align-items:start}
.join-row{display:flex;gap:8px;margin-top:16px}
.join-row input{margin:0;flex:1}
.shelf-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}
.shelf-card{display:flex;flex-direction:column}
.shelf{display:grid;grid-template-columns:1fr 1fr;gap:10px;max-height:330px;overflow:auto}
.shelf-item{border:1px solid var(--line2);padding:0;cursor:pointer;background:none;text-align:left;color:inherit}
.shelf-item:hover{border-color:var(--gold)}
.shelf-item img{width:100%;height:92px;object-fit:cover;display:block;background:var(--ink3)}
.shelf-item .ph{width:100%;height:92px;display:grid;place-items:center;background:var(--ink3);color:#57503f;font:12px 'Noto Serif SC',serif}
.shelf-body{padding:8px 9px}
.shelf-body strong{display:block;font:500 12.5px 'Noto Serif SC',serif;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.shelf-body span{font-size:9px;color:var(--muted);letter-spacing:.08em}
.block{margin-top:42px}
.block-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.room-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.room-card{border:1px solid var(--line2);padding:16px;cursor:pointer;background:rgba(255,253,246,.03)}
.room-card:hover{border-color:var(--gold);background:rgba(176,139,79,.07)}
.room-card strong{display:block;font:500 15px 'Noto Serif SC',serif;margin-bottom:8px}
.room-card span{font-size:10px;color:var(--muted);letter-spacing:.06em}
.empty{padding:18px;border:1px dashed var(--line2);color:var(--muted);font-size:11px;line-height:1.8}

/* ---------- 工坊 ---------- */
.ws-actions{display:flex;align-items:center;gap:8px}
.ws-grid{display:grid;grid-template-columns:.95fr 1.05fr;gap:16px;align-items:start}
.ws-col{display:grid;gap:16px}
.cover-row{display:flex;gap:16px;align-items:flex-start}
.cover-thumb{width:112px;height:150px;border:1px solid var(--line2);display:grid;place-items:center;
  font-size:10px;color:var(--muted);overflow:hidden;background:var(--ink3)}
.cover-thumb img{width:100%;height:100%;object-fit:cover}
.cover-thumb.small{width:56px;height:74px}
.cover-actions{flex:1}
.role-list{display:grid;gap:10px}
.role-item{border:1px solid var(--line2);padding:12px}
.role-item .role-top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.role-item strong{font:500 14px 'Noto Serif SC',serif}
.role-item .role-blurb{font-size:10px;color:var(--muted);margin:6px 0 0}
.role-item .role-book{margin:10px 0 0;padding:9px 10px;background:rgba(0,0,0,.3);border-left:2px solid var(--cinnabar);
  font:12px/1.8 'Noto Serif SC',serif;color:#d8cdba;white-space:pre-wrap;max-height:120px;overflow:auto}
.role-item .row-actions{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.adder{margin-top:14px;border-top:1px solid var(--line2);padding-top:12px}
.adder summary{font-size:10px;letter-spacing:.14em;color:var(--gold);cursor:pointer;list-style:none}
.adder summary::-webkit-details-marker{display:none}
.adder summary:before{content:'＋ '}
.clue-groups{display:grid;gap:14px}
.clue-round{border-left:1px solid var(--line2);padding-left:12px}
.clue-round h3{margin:0 0 8px;font:500 12px 'Noto Serif SC',serif;color:var(--gold);letter-spacing:.1em}
.clue-mini{border:1px solid var(--line2);padding:9px 10px;margin-bottom:7px;display:flex;gap:10px;align-items:flex-start}
.clue-mini img{width:44px;height:44px;object-fit:cover;border:1px solid var(--line2)}
.clue-mini .cm-body{flex:1}
.clue-mini strong{display:block;font-size:12px;font-family:'Noto Serif SC',serif}
.clue-mini p{margin:4px 0 0;font-size:10px;color:var(--muted);line-height:1.7}
.tag-role{font-size:9px;color:#d18a7c;border:1px solid #6b3a33;padding:2px 6px;margin-left:6px}
.upload-row{display:flex;gap:10px;flex-wrap:wrap}
.media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:8px;margin-top:12px}
.media-item{position:relative;border:1px solid var(--line2);aspect-ratio:1;overflow:hidden;cursor:zoom-in}
.media-item img{width:100%;height:100%;object-fit:cover}
.media-item .k{position:absolute;left:0;bottom:0;font-size:8px;letter-spacing:.1em;background:rgba(0,0,0,.66);padding:2px 5px;color:var(--gold)}
.media-item .del{position:absolute;right:0;top:0;background:rgba(0,0,0,.66);border:0;color:#e08578;font-size:11px;padding:2px 6px}
.doc-list{display:grid;gap:6px;margin-top:10px}
.doc-item{display:flex;justify-content:space-between;gap:8px;font-size:10px;color:var(--muted);
  border-bottom:1px dotted var(--line2);padding-bottom:5px}

/* ---------- 房间 ---------- */
.room-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:22px}
.room-head h1{font-size:32px}
.room-side{display:flex;gap:14px;align-items:flex-end}
.invite{border:1px solid var(--line2);padding:10px 14px;text-align:right;background:rgba(0,0,0,.24)}
.invite span{display:block;font-size:9px;letter-spacing:.16em;color:var(--muted)}
.invite strong{display:block;font:600 19px 'DM Sans',sans-serif;letter-spacing:.22em;color:var(--gold);margin:4px 0}
.room-grid{display:grid;grid-template-columns:.8fr 1.2fr;gap:16px;align-items:start}
.room-col{display:grid;gap:16px}
.seats{display:grid;gap:8px}
.seat{display:flex;align-items:center;gap:10px;padding:10px;background:rgba(0,0,0,.28);border-left:2px solid var(--line2)}
.seat.me{border-left-color:var(--gold)}
.seat .av{width:30px;height:30px;display:grid;place-items:center;background:var(--ink3);color:var(--gold);
  font:13px 'Noto Serif SC',serif;border:1px solid var(--line2)}
.seat .nm{flex:1;font-size:12px}
.seat .rl{font-size:10px;color:var(--gold)}
.seat .rd{font-size:9px;color:var(--muted)}
.seat .rd.on{color:#8fbf9d}
.seat select{margin:0;width:auto;padding:5px 7px;font-size:10px}
.owner-tools{border-top:1px solid var(--line2);margin-top:16px;padding-top:14px;display:grid;gap:8px}
.stage-card{min-height:560px;display:flex;flex-direction:column}
.stage-tabs{margin-bottom:14px;border-bottom:1px solid var(--line2)}
.stage-tabs button{font-size:11px;letter-spacing:.1em}
.tabs{border-bottom-color:var(--line2)}
.tabs button.active{color:var(--paper);box-shadow:inset 0 -2px 0 var(--cinnabar)}
.stage{flex:1;display:flex;flex-direction:column;min-height:0}
.chat{flex:1;overflow:auto;max-height:340px;display:flex;flex-direction:column;gap:9px;padding:4px 2px}
.msg{max-width:86%;padding:9px 12px;font-size:12px;line-height:1.8;white-space:pre-wrap;
  background:rgba(255,253,246,.055);border-left:2px solid var(--line2)}
.msg.mine{align-self:flex-end;background:rgba(156,43,33,.16);border-left:0;border-right:2px solid var(--cinnabar)}
.msg.host{border-left-color:var(--gold);background:rgba(176,139,79,.1)}
.msg.clue{border-left-color:#7f9c86;background:rgba(79,107,90,.14)}
.msg .who{font-size:9px;letter-spacing:.14em;color:var(--muted);margin-bottom:4px}
.chat-row{display:flex;gap:7px;margin-top:8px}
.chat-row input{margin:0;flex:1}
.host-row{margin-top:6px}
.book-pane,.clue-pane{overflow:auto;max-height:400px}
.book-title{font:500 18px 'Noto Serif SC',serif;color:var(--gold);margin-bottom:4px}
.book-body{margin-top:12px;font:13px/2 'Noto Serif SC',serif;white-space:pre-wrap;color:#ded3c0}
.clue-card{border:1px solid var(--line2);margin-bottom:10px;display:flex;gap:12px;padding:12px}
.clue-card img{width:84px;height:84px;object-fit:cover;border:1px solid var(--line2);cursor:zoom-in}
.clue-card .cc-body{flex:1}
.clue-card strong{display:block;font:500 13px 'Noto Serif SC',serif;margin-bottom:5px}
.clue-card p{margin:0;font-size:11px;line-height:1.85;color:#c8bda9;white-space:pre-wrap}
.clue-round-label{font:500 11px 'Noto Serif SC',serif;color:var(--gold);letter-spacing:.12em;margin:14px 0 8px}
.public-pane{margin:0;font:12.5px/2 'Noto Serif SC',serif;white-space:pre-wrap;color:#cdc2ae;max-height:420px;overflow:auto}

/* ---------- 其它 ---------- */
footer{height:64px;border-top:1px solid var(--line2);display:flex;align-items:center;justify-content:space-between;
  color:#6a6357;font-size:9px;letter-spacing:.16em}
.toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,16px);background:var(--paper3);color:var(--ink);
  padding:11px 18px;font-size:11px;letter-spacing:.06em;opacity:0;transition:.24s;pointer-events:none;box-shadow:var(--shadow)}
.toast.show{opacity:1;transform:translate(-50%,0)}
.lightbox{position:fixed;inset:0;background:rgba(8,6,5,.9);display:grid;place-items:center;gap:14px;padding:40px;z-index:50}
.lightbox img{max-width:min(90vw,900px);max-height:78vh;border:1px solid var(--line2)}

@media(max-width:1080px){
  .hall-grid{grid-template-columns:1fr 1fr}
  .shelf-card{grid-column:1/-1}
  .room-grid,.ws-grid{grid-template-columns:1fr}
  .auth-split{grid-template-columns:1fr;gap:30px;min-height:0}
}
@media(max-width:720px){
  .shell{padding:0 16px}
  .topbar{height:auto;padding:14px 0;flex-wrap:wrap;gap:12px}
  .topnav{margin-left:0;width:100%;overflow:auto}
  .hall-grid,.shelf{grid-template-columns:1fr}
  .room-grid{grid-template-columns:1fr}
  .hall-head{flex-direction:column;align-items:flex-start;gap:12px}
  .room-head{flex-direction:column}
  .room-side{width:100%;justify-content:space-between}
  h1{font-size:28px}
}

/* ---------- 后台 ---------- */
.seal.alt{border-color:var(--gold);color:var(--gold);background:rgba(176,139,79,.1);box-shadow:inset 0 0 0 2px rgba(176,139,79,.18)}
.hall-grid.two{grid-template-columns:1fr 1.25fr}
.room-grid.one{grid-template-columns:1fr}
.admin-login{min-height:560px;display:grid;place-items:center}
.admin-login .auth-card{max-width:420px;width:100%;background:var(--paper);color:var(--ink);box-shadow:var(--shadow)}
.admin-login .auth-card:before{border-color:rgba(120,100,70,.22)}
.admin-login .auth-card label{color:#6d6455}
.admin-login .auth-card input{background:rgba(255,255,255,.55);border-color:#c9bda4;color:var(--ink)}
.admin-login .auth-card .hint{color:#8b8274}
.admin-login .kicker{color:#8a6d3b}
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.stat{border:1px solid var(--line2);padding:18px;background:linear-gradient(180deg,rgba(255,253,246,.05),rgba(255,253,246,.015))}
.stat span{display:block;font-size:10px;letter-spacing:.14em;color:var(--muted);margin-bottom:10px}
.stat strong{font:600 26px 'DM Sans','Noto Serif SC',sans-serif;color:var(--gold);letter-spacing:.02em}
.script-table{display:grid;gap:8px;margin-top:22px}
.script-row{display:flex;align-items:center;gap:14px;border:1px solid var(--line2);padding:10px;cursor:pointer;background:rgba(255,253,246,.03)}
.script-row:hover{border-color:var(--gold);background:rgba(176,139,79,.07)}
.script-row img,.script-row .ph{width:44px;height:58px;object-fit:cover;border:1px solid var(--line2);background:var(--ink3);display:grid;place-items:center;font-size:9px;color:#57503f}
.sr-body{flex:1;min-width:0}
.sr-body strong{display:block;font:500 14px 'Noto Serif SC',serif;margin-bottom:4px}
.sr-body span{font-size:10px;color:var(--muted);letter-spacing:.05em}
.admin-list{display:grid;gap:8px;max-height:420px;overflow:auto}
.admin-row{display:flex;align-items:center;gap:12px;border:1px solid var(--line2);padding:10px 12px;background:rgba(0,0,0,.24)}
.ar-main{flex:1;min-width:0}
.ar-main strong{display:block;font-size:12.5px;font-family:'Noto Serif SC',serif;margin-bottom:3px}
.ar-main span{font-size:10px;color:var(--muted)}
.sec{animation:fade .25s ease}
@keyframes fade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@media(max-width:1080px){.stat-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.hall-grid.two{grid-template-columns:1fr}.stat-grid{grid-template-columns:1fr 1fr}}
/* ---------- 指认投票 / 结算 ---------- */
.vote-pane{overflow:auto;max-height:420px}
.vote-list{display:grid;gap:8px;margin:12px 0}
.vote-item{display:flex;align-items:center;gap:10px;border:1px solid var(--line2);padding:11px 12px;
  margin:0;cursor:pointer;background:rgba(0,0,0,.24);font-size:12px;letter-spacing:0;color:var(--paper2)}
.vote-item input{width:auto;margin:0;accent-color:var(--cinnabar)}
.vote-item span{flex:1}
.vote-item em{font-style:normal;font-size:10px;color:var(--gold)}
.vote-item.on{border-color:var(--cinnabar);background:rgba(156,43,33,.16)}
.verdict{border:1px solid var(--line2);padding:16px;margin-bottom:14px;background:rgba(0,0,0,.26);display:grid;gap:8px}
.verdict.win{border-color:#3d5a48;background:rgba(79,107,90,.16)}
.verdict.lose{border-color:#6b3a33;background:rgba(156,43,33,.14)}
.verdict-label{font:600 18px 'Noto Serif SC',serif;color:var(--gold)}
.verdict.win .verdict-label{color:#9ecfae}
.verdict.lose .verdict-label{color:#e08e80}
.verdict-culprit{font-size:11px;color:var(--muted);letter-spacing:.06em}
.tally{display:grid;gap:6px;margin-bottom:12px}
.tally-row{display:flex;justify-content:space-between;gap:10px;border-bottom:1px dotted var(--line2);
  padding:7px 2px;font-size:12px}
.tally-row strong{color:var(--gold);font-family:'DM Sans',sans-serif}