:root{
  --night:#071c25;--night2:#0c2b32;--paper:#f6edda;--paper2:#ead9b9;
  --ink:#26322e;--gold:#e9b95d;--gold2:#ffd98a;--red:#b9523f;--teal:#2d7773;
  --white:#fffaf0;--shadow:0 22px 70px rgba(0,0,0,.36)
}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden}
body{font-family:"Microsoft YaHei","PingFang SC","Noto Sans SC",sans-serif;color:var(--white);background:var(--night)}
button,input{font:inherit}button{cursor:pointer}button:focus-visible{outline:3px solid var(--gold2);outline-offset:3px}
#app{position:relative;width:100vw;height:100dvh;min-height:560px;overflow:hidden;background:var(--night)}
.world{position:absolute;inset:0;overflow:hidden}.world>img{width:100%;height:100%;object-fit:cover;object-position:center;filter:saturate(.88) brightness(.68);transform:scale(1.02)}
.world:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(3,14,19,.86),rgba(3,14,19,.24) 50%,rgba(3,14,19,.68)),linear-gradient(0deg,rgba(3,14,19,.74),transparent 55%,rgba(3,14,19,.28))}
.grain{pointer-events:none;position:absolute;inset:0;z-index:2;opacity:.12;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='80' height='80'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.3'/%3E%3C/svg%3E")}
.topbar{position:absolute;z-index:40;left:0;right:0;top:0;height:66px;padding:10px clamp(14px,3vw,38px);display:flex;align-items:center;gap:16px;background:linear-gradient(rgba(3,14,19,.83),transparent)}
.brand{display:flex;align-items:center;gap:10px;font-family:"STKaiti","KaiTi",serif;font-size:clamp(17px,2vw,23px);font-weight:700;letter-spacing:2px;white-space:nowrap}.brand-mark{display:grid;place-items:center;width:36px;height:36px;border:1px solid rgba(255,217,138,.55);transform:rotate(45deg);background:rgba(233,185,93,.12)}.brand-mark span{transform:rotate(-45deg);color:var(--gold2)}
.top-spacer{flex:1}.tools{display:flex;gap:8px}.tool{min-width:42px;height:42px;border:1px solid rgba(255,255,255,.18);border-radius:14px;background:rgba(7,28,37,.7);color:#f9e7c2;backdrop-filter:blur(12px);transition:.2s}.tool:hover{transform:translateY(-2px);border-color:rgba(255,217,138,.6);background:rgba(24,63,69,.85)}
.screen{position:absolute;z-index:5;inset:0;padding:76px clamp(18px,5vw,72px) 34px;display:none;overflow:auto;animation:reveal .45s ease}.screen.active{display:flex}.screen::-webkit-scrollbar{width:8px}.screen::-webkit-scrollbar-thumb{background:#d7ad6066;border-radius:8px}
@keyframes reveal{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.intro{align-items:center}.intro-copy{width:min(690px,100%);padding:clamp(10px,3vw,30px) 0}.eyebrow{display:inline-flex;align-items:center;gap:8px;padding:7px 13px;border:1px solid rgba(255,217,138,.35);border-radius:99px;color:#f4d18d;background:rgba(6,30,38,.58);letter-spacing:2px;font-size:13px}.title{margin:23px 0 12px;font-family:"STKaiti","KaiTi",serif;font-size:clamp(45px,7vw,88px);line-height:.98;letter-spacing:3px;text-shadow:0 5px 28px #000}.title span{display:block;margin-top:14px;color:var(--gold2);font-size:.46em;letter-spacing:8px}.lead{max-width:590px;margin:24px 0;color:#f7ead0;line-height:1.9;font-size:clamp(16px,2vw,21px);text-shadow:0 2px 12px #000}.cta-row{display:flex;gap:12px;flex-wrap:wrap;margin-top:28px}
.btn{min-height:48px;border:0;border-radius:16px;padding:0 22px;font-weight:800;letter-spacing:1px;transition:.22s}.btn:hover{transform:translateY(-2px);filter:brightness(1.08)}.btn.primary{color:#2c2415;background:linear-gradient(135deg,var(--gold2),#d89238);box-shadow:0 9px 25px #d8923840}.btn.ghost{color:#f8e6c4;background:rgba(7,28,37,.72);border:1px solid rgba(255,217,138,.3)}.btn.red{color:#fff;background:linear-gradient(135deg,#c8614b,#963b31)}
.case-note{position:absolute;right:clamp(24px,6vw,90px);bottom:clamp(48px,9vh,100px);width:min(300px,24vw);padding:22px 20px 18px;color:var(--ink);background:linear-gradient(145deg,#fff5dc,#e6d1a8);box-shadow:var(--shadow);transform:rotate(2deg);border-radius:3px}.case-note:before{content:"机密委托";position:absolute;right:18px;top:16px;padding:4px 8px;color:#a44536;border:2px solid #a44536;transform:rotate(8deg);font-weight:900;letter-spacing:2px}.case-note h3{margin:0 0 16px;font-family:"STKaiti","KaiTi",serif;font-size:27px}.case-note p{margin:0;line-height:1.8;font-size:14px}.fragment-row{display:flex;gap:8px;margin-top:16px}.mini-frag{width:36px;height:42px;display:grid;place-items:center;background:#d8c299;color:#8b7758;clip-path:polygon(7% 0,100% 4%,95% 93%,4% 100%,0 10%);font-size:18px}.mini-frag.on{background:#b54f3e;color:#fff;box-shadow:0 4px 12px #7f271f40}
.map{flex-direction:column;align-items:center}.section-head{text-align:center;margin:6px auto 18px}.section-head small{color:var(--gold);letter-spacing:3px}.section-head h2{margin:7px 0;font-family:"STKaiti","KaiTi",serif;font-size:clamp(32px,5vw,56px)}.section-head p{margin:0;color:#e5d7bd}
.map-grid{width:min(1180px,100%);margin:auto;display:grid;grid-template-columns:repeat(5,1fr);gap:14px}.hall-card{position:relative;min-height:360px;padding:20px 18px;border:1px solid rgba(255,255,255,.14);border-radius:22px;overflow:hidden;color:#fff;background:linear-gradient(180deg,var(--hall),rgba(5,21,26,.95));box-shadow:0 15px 35px rgba(0,0,0,.25);transition:.25s;text-align:left}.hall-card:before{content:"";position:absolute;width:140px;height:140px;right:-55px;top:-55px;border:1px solid rgba(255,255,255,.17);border-radius:50%;box-shadow:0 0 0 22px rgba(255,255,255,.035),0 0 0 45px rgba(255,255,255,.025)}.hall-card:not(.locked):hover{transform:translateY(-8px);border-color:rgba(255,217,138,.55)}.hall-card.locked{filter:grayscale(.6);opacity:.52;cursor:not-allowed}.hall-card.done{border-color:rgba(255,217,138,.72);box-shadow:0 0 0 1px #e9b95d44,0 15px 35px rgba(0,0,0,.25)}.hall-no{font-size:12px;letter-spacing:3px;color:#ffe4ad}.hall-icon{margin:48px 0 18px;font-size:46px;filter:drop-shadow(0 6px 12px rgba(0,0,0,.3))}.hall-card h3{min-height:58px;margin:0;font-family:"STKaiti","KaiTi",serif;font-size:25px;line-height:1.25}.hall-card p{margin:14px 0 24px;color:#efe5d3;font-size:13px;line-height:1.65}.hall-status{position:absolute;left:18px;right:18px;bottom:17px;display:flex;align-items:center;justify-content:space-between;color:#ffe5af;font-size:12px}.seal{display:grid;place-items:center;width:32px;height:32px;border:1px dashed #ffd98a;border-radius:50%;font-size:15px}.done .seal{background:#b54f3e;border-style:solid;color:#fff;transform:rotate(-8deg)}
.mission{align-items:center;justify-content:center}.mission-wrap{width:min(1040px,100%);display:grid;grid-template-columns:240px 1fr;gap:22px}.mission-side,.case-paper{border:1px solid rgba(255,255,255,.12);box-shadow:var(--shadow)}.mission-side{align-self:stretch;padding:26px 20px;border-radius:22px;background:rgba(5,26,32,.83);backdrop-filter:blur(16px)}.mission-side .large-icon{font-size:56px}.mission-side h2{margin:13px 0 8px;font-family:"STKaiti","KaiTi",serif;font-size:30px}.mission-side p{color:#d6c9b3;font-size:13px;line-height:1.7}.q-dots{display:flex;gap:8px;margin-top:24px}.q-dot{width:28px;height:7px;border-radius:9px;background:#ffffff20}.q-dot.now{background:var(--gold)}.q-dot.ok{background:#66bb89}.back-map{margin-top:30px;padding:0;border:0;background:none;color:#e7c985}.case-paper{position:relative;min-height:470px;padding:clamp(25px,4vw,46px);border-radius:8px;color:var(--ink);background:radial-gradient(circle at 90% 5%,#fff9e8,#f2e4c7 56%,#dfcba7);overflow:hidden}.case-paper:after{content:"";position:absolute;inset:10px;border:1px solid rgba(107,78,40,.18);pointer-events:none}.case-label{display:inline-block;padding:5px 10px;background:#2f6e6a;color:#fff;border-radius:4px;font-size:12px;letter-spacing:2px}.question{position:relative;z-index:1;margin:19px 0 20px;font-family:"STKaiti","KaiTi",serif;font-size:clamp(23px,3.4vw,38px);line-height:1.42}.evidence{position:relative;z-index:1;margin:0 0 22px;padding:13px 16px;border-left:4px solid #b34f3f;background:#fffaf078;color:#5c4d3a;line-height:1.75;font-size:15px}.options{position:relative;z-index:1;display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.option{min-height:96px;padding:13px;border:1px solid #b89e7377;border-radius:15px;background:#fffaf0;color:#2f3b36;font-weight:800;transition:.2s;display:flex;align-items:center;gap:11px;text-align:left}.option:hover{transform:translateY(-2px);border-color:#99733d;background:#fff}.option img{width:52px;height:66px;object-fit:cover;border-radius:9px;filter:sepia(.1)}.option.wrong{animation:shake .32s;background:#f1c9c1;border-color:#bd5d4e}.option.correct{background:#cbe7cf;border-color:#4c9563}.option:disabled{cursor:default}.feedback{position:relative;z-index:1;min-height:52px;margin-top:18px;color:#6c5b45;font-size:14px;line-height:1.65}.feedback strong{color:#9f4134}.next-q{display:none;position:absolute;z-index:3;right:40px;bottom:28px}.next-q.show{display:block}
@keyframes shake{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}
.reward{align-items:center;justify-content:center}.reward-card{width:min(690px,95%);padding:clamp(26px,5vw,54px);text-align:center;color:var(--ink);background:linear-gradient(145deg,#fff6df,#e7d0a4);border-radius:24px;box-shadow:var(--shadow);position:relative;overflow:hidden}.reward-card:before,.reward-card:after{content:"";position:absolute;width:170px;height:170px;border:1px solid #9a7a4944;border-radius:50%}.reward-card:before{left:-85px;top:-85px}.reward-card:after{right:-85px;bottom:-85px}.reward-seal{width:110px;height:110px;margin:0 auto 20px;display:grid;place-items:center;border:5px double #b84d3c;border-radius:50%;color:#a63b30;font-family:"STKaiti","KaiTi",serif;font-size:50px;font-weight:900;transform:rotate(-7deg);animation:stamp .5s cubic-bezier(.2,1.5,.5,1)}@keyframes stamp{from{transform:scale(2) rotate(-18deg);opacity:0}to{transform:scale(1) rotate(-7deg);opacity:1}}.reward-card h2{margin:0;font-family:"STKaiti","KaiTi",serif;font-size:42px}.reward-card p{line-height:1.85;color:#5d4e3b}.fragment{display:inline-block;margin:8px;padding:12px 20px;background:#b54f3e;color:#fff;clip-path:polygon(5% 2%,98% 0,100% 92%,8% 100%,0 12%);font-family:"STKaiti","KaiTi",serif;font-size:23px;letter-spacing:3px}.reward-actions{display:flex;justify-content:center;gap:12px;margin-top:24px}
.final{align-items:center;justify-content:center}.final-card{width:min(980px,100%);display:grid;grid-template-columns:310px 1fr;gap:46px;align-items:center;padding:35px;border:1px solid rgba(255,217,138,.28);border-radius:28px;background:rgba(4,23,29,.88);box-shadow:var(--shadow);backdrop-filter:blur(15px)}.book{position:relative;width:240px;height:330px;margin:auto;padding:35px 26px;background:linear-gradient(145deg,#a94c39,#722b25);border-radius:4px 13px 13px 4px;box-shadow:-12px 12px 0 #e1c99d,0 25px 50px #0008;transform:perspective(800px) rotateY(8deg);border-left:9px solid #5c211c;color:#fbeac6;text-align:center}.book:after{content:"";position:absolute;inset:14px;border:1px solid #f1cc7777}.book-kicker{font-size:12px;letter-spacing:4px}.book h3{margin:48px 0 20px;font-family:"STKaiti","KaiTi",serif;font-size:29px;line-height:1.5}.book-author{font-size:14px;color:#eac97f}.final-copy small{color:var(--gold);letter-spacing:4px}.final-copy h2{margin:12px 0;font-family:"STKaiti","KaiTi",serif;font-size:clamp(34px,5vw,58px);line-height:1.18}.final-copy p{color:#e8dbc5;line-height:1.9}.quote{margin:22px 0;padding:17px 20px;border-left:3px solid var(--gold);background:#ffffff0b;color:#ffedc8;font-family:"STKaiti","KaiTi",serif;font-size:21px;line-height:1.75}.final-actions{display:flex;gap:12px;flex-wrap:wrap}
.atlas{position:absolute;z-index:80;inset:0;display:none;padding:72px 4vw 30px;background:rgba(3,15,20,.95);backdrop-filter:blur(16px);overflow:auto}.atlas.open{display:block}.atlas-head{position:sticky;top:-72px;z-index:2;display:flex;align-items:center;gap:14px;padding:18px 0;background:linear-gradient(#061a21 70%,transparent)}.atlas-head h2{margin:0;font-family:"STKaiti","KaiTi",serif;font-size:34px}.atlas-head input{flex:1;min-width:80px;max-width:420px;height:43px;border:1px solid #ffffff24;border-radius:14px;padding:0 16px;color:#fff;background:#ffffff0c;outline:none}.atlas-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px;padding-bottom:30px}.author{display:grid;grid-template-columns:78px 1fr;gap:14px;padding:13px;border:1px solid #ffffff18;border-radius:17px;background:#ffffff0b;transition:.2s}.author:hover{transform:translateY(-3px);border-color:#e9b95d66}.author img{width:78px;height:98px;object-fit:cover;border-radius:11px;background:#d7c39d}.author h3{margin:2px 0 4px;font-family:"STKaiti","KaiTi",serif;font-size:23px}.author p{margin:3px 0;color:#dccfb8;font-size:12px;line-height:1.5}.author button{margin-top:7px;padding:0;border:0;background:none;color:#f0c973}.detail-modal{position:absolute;z-index:95;inset:0;display:none;place-items:center;padding:20px;background:#021015d9}.detail-modal.open{display:grid}.detail-card{width:min(720px,96vw);max-height:86vh;overflow:auto;padding:26px;border-radius:22px;color:var(--ink);background:var(--paper);box-shadow:var(--shadow)}.detail-top{display:flex;gap:20px}.detail-top img{width:120px;height:155px;object-fit:cover;border-radius:13px}.detail-top h2{margin:5px 0;font-family:"STKaiti","KaiTi",serif;font-size:38px}.detail-card p{line-height:1.75}.story-box{padding:16px;border-radius:14px;background:#e7d5b4}.close-x{float:right;width:40px;height:40px;border:0;border-radius:50%;background:#263a37;color:#fff}.toast{position:absolute;z-index:110;left:50%;bottom:30px;transform:translate(-50%,25px);padding:11px 18px;border-radius:99px;background:#0b292f;color:#ffe5ae;box-shadow:0 8px 22px #0006;opacity:0;pointer-events:none;transition:.25s}.toast.show{opacity:1;transform:translate(-50%,0)}.spark{position:absolute;z-index:120;width:8px;height:8px;border-radius:50%;background:var(--gold2);pointer-events:none;animation:fly .7s ease-out forwards}@keyframes fly{to{transform:translate(var(--dx),var(--dy)) scale(0);opacity:0}}
@media(max-width:980px){.case-note{display:none}.intro-copy{margin:auto}.map-grid{grid-template-columns:repeat(3,1fr)}.hall-card{min-height:260px}.hall-icon{margin:25px 0 10px}.mission-wrap{grid-template-columns:1fr}.mission-side{padding:15px 20px}.mission-side .large-icon{font-size:34px;float:left;margin-right:12px}.mission-side p{display:none}.q-dots{margin-top:12px}.back-map{position:absolute;top:80px;left:25px;margin:0}.case-paper{min-height:430px}.final-card{grid-template-columns:250px 1fr}.book{width:210px;height:290px}.book h3{margin-top:35px;font-size:25px}}
@media(max-width:680px){#app{min-height:520px}.topbar{height:58px;padding:8px 12px}.brand{font-size:14px;letter-spacing:0}.brand-mark{width:31px;height:31px}.tools{gap:5px}.tool{min-width:38px;height:38px}.screen{padding:66px 13px 20px}.intro{align-items:flex-end}.intro-copy{padding-bottom:4vh}.title{font-size:43px}.title span{letter-spacing:4px}.lead{font-size:15px}.map-grid{grid-template-columns:1fr 1fr;gap:9px}.hall-card{min-height:205px;padding:14px}.hall-card h3{min-height:auto;font-size:20px}.hall-card p{display:none}.hall-icon{margin:21px 0 8px;font-size:33px}.hall-status{left:14px;right:14px}.mission{align-items:flex-start}.mission-wrap{gap:9px}.mission-side{padding:10px 14px}.mission-side h2{font-size:22px;margin:5px}.mission-side .large-icon{font-size:28px}.q-dots{float:right;margin-top:11px}.case-paper{min-height:445px;padding:23px 16px}.case-paper:after{inset:6px}.question{font-size:23px}.evidence{font-size:13px;margin-bottom:14px;padding:10px 12px}.options{grid-template-columns:1fr;gap:8px}.option{min-height:62px;padding:8px}.option img{width:42px;height:48px}.feedback{margin-top:10px;font-size:12px}.next-q{position:relative;right:auto;bottom:auto;float:right;margin-top:4px}.reward-card h2{font-size:31px}.reward-seal{width:88px;height:88px;font-size:40px}.final-card{display:block;padding:20px;text-align:center}.book{display:none}.final-copy h2{font-size:35px}.quote{font-size:17px}.final-actions{justify-content:center}.atlas{padding:62px 12px 20px}.atlas-head{top:-62px;flex-wrap:wrap}.atlas-head h2{font-size:27px}.atlas-grid{grid-template-columns:1fr}.detail-top img{width:88px;height:116px}.detail-top h2{font-size:30px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
/* ================= ✦ 作家对话之旅 v8（对话系统升级版） ================= */
.journey-banner{display:flex;align-items:center;gap:14px;width:min(1180px,100%);margin:2px auto 16px;padding:12px 18px;border:1px solid rgba(255,217,138,.4);border-radius:16px;background:linear-gradient(90deg,rgba(233,185,93,.18),rgba(233,185,93,.04))}
.jb-icon{font-size:24px;color:var(--gold2)}
.jb-text{flex:1;text-align:left;color:#f3e7cd;font-size:14px;line-height:1.6}
.jb-text b{color:#ffd98a}
.jb-btn{min-height:40px}
/* —— 展厅选择 / 作家选择 —— */
.j-halls,.j-authors{flex-direction:column;align-items:center}
.j-grid{width:min(1180px,100%);margin:auto;display:grid;grid-template-columns:repeat(5,1fr);gap:14px}
.j-back-row{margin-top:20px}
.j-author-grid{width:min(1080px,100%);margin:auto;display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.j-author-card{display:flex;gap:15px;padding:15px;border:1px solid rgba(255,255,255,.16);border-radius:18px;background:rgba(8,34,41,.85);color:#fff;text-align:left;transition:.2s;align-items:center}
.j-author-card:hover{transform:translateY(-4px);border-color:rgba(255,217,138,.65);box-shadow:0 12px 28px rgba(0,0,0,.3)}
.j-author-card img{width:72px;height:92px;object-fit:cover;border-radius:11px;background:#d7c39d;flex-shrink:0}
.ja-info{flex:1}
.j-author-card h4{margin:0 0 5px;font-family:"STKaiti","KaiTi",serif;font-size:22px}
.j-author-card p{margin:3px 0;color:#dccfb8;font-size:12px;line-height:1.5}
.ja-badge{display:inline-block;margin-top:7px;padding:3px 11px;border-radius:99px;font-size:11px;border:1px solid;letter-spacing:1px}
.ja-badge.done{color:#8fe3b0;border-color:#8fe3b066;background:#8fe3b01c}
.ja-badge.todo{color:#ffd98a;border-color:#ffd98a55}
/* —— 进度仪表盘（路线图） —— */
.j-dash{width:min(1180px,100%);margin:0 auto 18px;padding:16px 20px;border:1px solid rgba(255,217,138,.35);border-radius:18px;background:rgba(8,34,41,.85);display:flex;flex-direction:column;gap:12px}
.j-dash-top{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.j-dash-title{font-family:"STKaiti","KaiTi",serif;font-size:20px;color:#ffd98a;letter-spacing:2px}
.j-stat{display:inline-flex;align-items:center;gap:6px;padding:6px 13px;border-radius:99px;border:1px solid rgba(255,255,255,.18);color:#f3e7cd;font-size:13px;background:rgba(255,255,255,.04)}
.j-stat b{color:#ffd98a}
.j-dash-btns{margin-left:auto;display:flex;gap:9px;flex-wrap:wrap}
.j-dash-btn{padding:8px 16px;border-radius:99px;border:1px solid rgba(255,217,138,.5);background:linear-gradient(135deg,rgba(255,217,138,.16),rgba(255,217,138,.05));color:#ffd98a;font-size:13px;letter-spacing:1px;cursor:pointer;transition:.15s}
.j-dash-btn:hover{transform:translateY(-2px);border-color:var(--gold2)}
.j-prog-track{height:16px;border-radius:99px;background:rgba(255,255,255,.1);overflow:hidden;border:1px solid rgba(255,255,255,.12)}
.j-prog-fill{height:100%;border-radius:99px;background:linear-gradient(90deg,#e9b95d,#ffd98a);transition:width .6s ease}
.j-dots{display:flex;gap:4px;justify-content:space-between;flex-wrap:wrap}
.j-dot{width:14px;height:14px;border-radius:50%;background:rgba(255,255,255,.14);transition:.3s;display:grid;place-items:center;font-size:9px;color:#1e2a28}
.j-dot.on{background:radial-gradient(circle,#ffe9ae,#e9b95d);box-shadow:0 0 6px #ffd98a88}
.j-dash-hint{color:#b9ad97;font-size:12px;text-align:right}
/* —— 分步聊天 —— */
.j-chat{flex-direction:column;justify-content:center}
.j-chat-wrap{width:min(880px,100%);margin:auto;display:flex;flex-direction:column}
.j-chat-head{display:flex;align-items:center;gap:12px;padding:12px 16px;border:1px solid rgba(255,255,255,.14);border-bottom:0;border-radius:18px 18px 0 0;background:rgba(5,26,32,.92);backdrop-filter:blur(12px)}
.j-avatar-wrap{position:relative;flex-shrink:0}
.j-chat-head .j-avatar-wrap img{width:44px;height:56px;object-fit:cover;border-radius:9px;background:#d7c39d;flex-shrink:0;display:block}
.j-emo-badge{position:absolute;bottom:-7px;right:-9px;font-size:16px;background:#fff;border-radius:50%;width:23px;height:23px;display:grid;place-items:center;box-shadow:0 2px 8px rgba(0,0,0,.4);animation:jPop .45s ease}
@keyframes jPop{0%{transform:scale(0)}70%{transform:scale(1.35)}100%{transform:scale(1)}}
img.jAct-nod{animation:jNod 1.1s ease}
@keyframes jNod{0%,100%{transform:rotate(0)}25%{transform:rotate(-8deg) translateY(2px)}60%{transform:rotate(7deg) translateY(-1px)}}
img.jAct-wave{animation:jWave 1.1s ease}
@keyframes jWave{0%,100%{transform:rotate(0)}20%{transform:rotate(-12deg) translateX(-3px)}50%{transform:rotate(10deg) translateX(2px)}80%{transform:rotate(-6deg)}}
img.jAct-shake{animation:jShake .6s ease}
@keyframes jShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-5px) rotate(-3deg)}40%{transform:translateX(5px) rotate(3deg)}60%{transform:translateX(-4px)}80%{transform:translateX(4px)}}
img.jAct-jump{animation:jJump .9s ease}
@keyframes jJump{0%,100%{transform:translateY(0)}40%{transform:translateY(-9px) rotate(4deg)}70%{transform:translateY(-3px)}}
.jc-name{font-family:"STKaiti","KaiTi",serif;font-size:22px;line-height:1.2}
.jc-sub{color:#c9bda6;font-size:12px;margin-top:2px}
.jc-scene{color:#8fe3b0;font-size:11.5px;margin-top:2px;letter-spacing:1px}
.j-score{display:flex;flex-direction:column;gap:2px;margin-left:6px;padding:5px 11px;border-radius:12px;background:rgba(255,217,138,.1);border:1px solid rgba(255,217,138,.35);text-align:center}
.j-score b{color:#ffd98a;font-size:16px;line-height:1}
.j-score span{color:#c9bda6;font-size:10px;letter-spacing:1px}
.j-back-link{padding:0;border:0;background:none;color:#e7c985;font-size:13px;white-space:nowrap}
.j-back-link:hover{color:#ffd98a}
.j-steps{display:flex;gap:6px;margin-left:auto;flex-wrap:wrap}
.j-step{padding:4px 10px;border-radius:99px;font-size:11px;border:1px solid rgba(255,255,255,.22);color:#c9bda6;letter-spacing:1px}
.j-step.on{background:var(--gold);color:#2c2415;border-color:var(--gold);font-weight:800}
.j-step.done{border-color:#66bb89;color:#8fe3b0}
/* —— 5套对话场景背景 —— */
.j-chat-body{position:relative;min-height:300px;max-height:52vh;overflow-y:auto;padding:20px;display:flex;flex-direction:column;gap:13px;border-left:1px solid rgba(255,255,255,.14);border-right:1px solid rgba(255,255,255,.14);background:rgba(4,22,28,.74);backdrop-filter:blur(10px);transition:background .8s}
.sc-study{background:linear-gradient(158deg,rgba(46,32,14,.92),rgba(58,40,18,.84) 55%,rgba(34,24,12,.94))}
.sc-class{background:linear-gradient(158deg,rgba(10,44,36,.92),rgba(14,56,44,.85) 55%,rgba(8,34,28,.94))}
.sc-hometown{background:linear-gradient(158deg,rgba(14,40,54,.92),rgba(20,54,64,.85) 55%,rgba(10,32,42,.94))}
.sc-night{background:linear-gradient(158deg,rgba(16,18,44,.94),rgba(26,28,60,.86) 55%,rgba(12,14,36,.95))}
.sc-warm{background:linear-gradient(158deg,rgba(56,28,16,.92),rgba(70,36,20,.85) 55%,rgba(44,24,14,.94))}
.j-scene-tag{position:absolute;left:14px;top:10px;font-size:11px;letter-spacing:2px;color:#ffd98acc;pointer-events:none;z-index:2}
/* —— 气泡 —— */
.j-bubble-row{display:flex;gap:11px;animation:jIn .4s ease}
@keyframes jIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.j-bubble-row>img{width:42px;height:53px;object-fit:cover;border-radius:8px;background:#d7c39d;flex-shrink:0}
.j-bubble{padding:12px 16px;border-radius:4px 16px 16px 16px;color:var(--ink);background:linear-gradient(145deg,#fff6df,#ecd9b2);line-height:1.85;font-size:15px;max-width:82%;box-shadow:0 6px 18px rgba(0,0,0,.28)}
.j-bubble b{color:#8a4a2f}
.jb-title{display:block;margin-bottom:5px;color:#a44536;font-weight:800;letter-spacing:2px;font-size:11.5px}
.jb-emo{color:#a44536;font-weight:700;font-size:13px;margin-right:2px}
/* —— 名言特效 —— */
.jq-quote{margin:6px 0;padding:10px 14px;border-left:4px solid #b84d3c;background:#fff3dd;border-radius:8px;font-family:"STKaiti","KaiTi",serif;font-size:19px;color:#7c2d1e;text-align:center;line-height:1.7}
.jq-blink{animation:jqBlink 1.6s ease infinite}
@keyframes jqBlink{0%,100%{text-shadow:0 0 0 rgba(184,77,60,0)}50%{text-shadow:0 0 14px rgba(184,77,60,.55)}}
.jq-shake{animation:jShake .7s ease 2}
.jq-big{animation:jqBig .8s ease}
@keyframes jqBig{0%{transform:scale(.75);opacity:0}60%{transform:scale(1.06)}100%{transform:scale(1);opacity:1}}
/* —— 追问按钮 —— */
.j-ask-btn{align-self:flex-start;display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:99px;border:1.5px dashed #ffd98a;background:rgba(255,217,138,.12);color:#ffd98a;font-size:13.5px;letter-spacing:1px;cursor:pointer;transition:.2s;animation:jIn .4s ease}
.j-ask-btn:hover{background:rgba(255,217,138,.22);transform:translateY(-2px)}
.j-ask-btn.used{opacity:.45;pointer-events:none;text-decoration:line-through}
/* —— 分支选项 —— */
.j-branch{display:flex;flex-direction:column;gap:9px;margin-top:10px}
.j-branch-btn{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:14px;border:1px solid rgba(255,217,138,.4);background:rgba(255,217,138,.07);color:#f7e9cd;font-size:14.5px;text-align:left;line-height:1.6;transition:.18s;cursor:pointer}
.j-branch-btn:hover{border-color:var(--gold2);background:rgba(255,217,138,.16);transform:translateX(5px)}
.j-branch-btn .bno{flex-shrink:0;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;background:rgba(255,217,138,.2);color:#ffd98a;font-weight:800;font-size:13px}
/* —— QTE 限时反应 —— */
.j-qte{margin:10px 0;padding:16px 18px;border-radius:16px;border:2px solid #e9b95d;background:linear-gradient(145deg,rgba(255,217,138,.14),rgba(233,185,93,.05));animation:jqBig .5s ease}
.j-qte-t{color:#ffd98a;font-weight:800;letter-spacing:2px;font-size:13px;display:flex;align-items:center;gap:8px}
.j-qte-q{color:#fff;font-size:16px;margin:9px 0;line-height:1.7;font-weight:700}
.j-qte-bar{height:10px;border-radius:99px;background:rgba(255,255,255,.14);overflow:hidden;margin:10px 0}
.j-qte-fill{height:100%;width:100%;border-radius:99px;background:linear-gradient(90deg,#e96a5a,#ffd98a)}
.j-qte-opts{display:flex;gap:9px;flex-wrap:wrap}
.j-qte-opt{padding:9px 16px;border-radius:12px;border:1px solid rgba(255,255,255,.3);background:rgba(255,255,255,.07);color:#fff;font-size:14px;cursor:pointer;transition:.15s}
.j-qte-opt:hover{border-color:#ffd98a;transform:translateY(-2px)}
.j-qte-opt.ok{background:#2e7d54;border-color:#8fe3b0;font-weight:800}
.j-qte-opt.no{background:#8a3a30;border-color:#e08a7d}
.j-qte-rs{margin-top:9px;font-size:13.5px;color:#f3e7cd;line-height:1.7}
/* —— 积分飘字 —— */
.j-pts-pop{position:fixed;left:50%;top:16%;transform:translateX(-50%);z-index:9999;padding:10px 22px;border-radius:99px;background:linear-gradient(135deg,#e9b95d,#ffd98a);color:#2c2415;font-weight:900;font-size:18px;letter-spacing:1px;box-shadow:0 10px 30px rgba(233,185,93,.45);animation:ptsUp 1.6s ease forwards;pointer-events:none}
@keyframes ptsUp{0%{opacity:0;transform:translate(-50%,14px)}18%{opacity:1;transform:translate(-50%,0)}75%{opacity:1}100%{opacity:0;transform:translate(-50%,-26px)}}
/* —— 成就勋章提示 —— */
.j-medal-toast{position:fixed;left:50%;top:26%;transform:translateX(-50%);z-index:9999;display:flex;align-items:center;gap:13px;padding:15px 24px;border-radius:18px;background:rgba(10,38,44,.96);border:1.5px solid #ffd98a;box-shadow:0 14px 40px rgba(0,0,0,.5);animation:medalIn .5s ease,medalOut .5s ease 2.6s forwards;pointer-events:none}
@keyframes medalIn{from{opacity:0;transform:translate(-50%,-22px)}to{opacity:1;transform:translate(-50%,0)}}
@keyframes medalOut{to{opacity:0;transform:translate(-50%,-18px)}}
.j-medal-ico{font-size:38px;animation:jPop .6s ease}
.j-medal-tx small{display:block;color:#ffd98a;font-size:11px;letter-spacing:3px}
.j-medal-tx b{display:block;color:#fff;font-size:17px;margin-top:3px;font-family:"STKaiti","KaiTi",serif;letter-spacing:1px}
/* —— 底部操作区 —— */
.j-chat-actions{padding:15px 16px;border:1px solid rgba(255,255,255,.14);border-radius:0 0 18px 18px;background:rgba(5,26,32,.92);backdrop-filter:blur(12px)}
.j-action-title{color:#ffd98a;font-size:13px;letter-spacing:1px;margin-bottom:10px}
.j-chips{display:flex;flex-wrap:wrap;gap:8px}
.j-chip{padding:8px 15px;border-radius:99px;border:1px solid rgba(255,217,138,.45);background:rgba(255,217,138,.08);color:#f7e9cd;font-size:14px;transition:.15s;cursor:pointer}
.j-chip:hover{border-color:var(--gold2);transform:translateY(-2px)}
.j-chip.sel{background:linear-gradient(135deg,var(--gold2),#d89238);color:#2c2415;font-weight:800;border-color:transparent}
.j-input{width:100%;margin-top:10px;min-height:66px;border-radius:14px;border:1px solid rgba(255,255,255,.22);background:#ffffff0d;color:#fff;padding:11px 14px;outline:none;resize:vertical;font-size:14px;line-height:1.7;font-family:inherit}
.j-input:focus{border-color:var(--gold)}
.j-input::placeholder{color:#8f8672}
.j-next-row{display:flex;gap:10px;margin-top:14px;align-items:center;flex-wrap:wrap}
.j-skip{padding:0;border:0;background:none;color:#b9ad97;font-size:13px;text-decoration:underline;cursor:pointer}
.j-skip:hover{color:#ffd98a}
/* —— 视频导入卡 —— */
.j-video-card{margin:auto 0;max-width:560px;padding:clamp(18px,3vw,30px);border-radius:18px;color:var(--ink);background:linear-gradient(145deg,#fff6df,#e7d0a4);box-shadow:var(--shadow);position:relative}
.j-video-card small{color:#a44536;letter-spacing:3px;font-weight:800}
.j-video-card h3{margin:8px 0 10px;font-family:"STKaiti","KaiTi",serif;font-size:26px}
.j-video-card p{line-height:1.85;font-size:14.5px;margin:8px 0}
.j-watch-list{margin:12px 0;padding:12px 16px;border-radius:12px;background:#ffffff7d;line-height:2;font-size:14px}
.j-video-tip{color:#8b7758;font-size:13px}
/* —— 档案卡 —— */
.j-card-screen{flex-direction:column;align-items:center;justify-content:center;gap:16px}
.j-profile-card{width:min(700px,96%);max-height:62vh;overflow-y:auto;padding:clamp(20px,4vw,38px);border-radius:22px;color:var(--ink);background:radial-gradient(circle at 90% 5%,#fff9e8,#f2e4c7 56%,#dfcba7);box-shadow:var(--shadow);position:relative}
.j-profile-card::-webkit-scrollbar{width:8px}
.j-profile-card::-webkit-scrollbar-thumb{background:#d7ad6066;border-radius:8px}
.jp-seal{position:absolute;right:24px;top:22px;width:74px;height:74px;display:grid;place-items:center;border:4px double #b84d3c;border-radius:50%;color:#a63b30;font-family:"STKaiti","KaiTi",serif;font-size:32px;font-weight:900;transform:rotate(8deg)}
.jp-top{display:flex;gap:18px;align-items:center;margin:12px 0 6px}
.jp-top img{width:90px;height:116px;object-fit:cover;border-radius:13px;border:3px solid #fff;box-shadow:0 6px 16px rgba(0,0,0,.2)}
.jp-top h2{margin:0;font-family:"STKaiti","KaiTi",serif;font-size:32px}
.jp-tag{display:inline-block;margin:5px 5px 0 0;padding:3px 10px;border-radius:6px;background:#2f6e6a;color:#fff;font-size:12px;letter-spacing:1px}
.jp-row{margin:11px 0;padding:11px 15px;border-radius:12px;background:#fffaf07d;line-height:1.85;font-size:14.5px}
.jp-row b{color:#8a4a2f}
.jp-foot{margin-top:12px;text-align:center;color:#8b7758;font-size:12px;line-height:1.8}
.jp-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
/* —— 知识卡片弹层 —— */
.j-know{width:min(560px,94%);margin:auto 0;padding:clamp(20px,3vw,30px);border-radius:20px;color:var(--ink);background:radial-gradient(circle at 12% 8%,#fff9e8,#f2e4c7 60%,#e0cba6);box-shadow:var(--shadow);position:relative;animation:jqBig .5s ease}
.j-know small{color:#a44536;letter-spacing:3px;font-weight:800}
.j-know h3{font-family:"STKaiti","KaiTi",serif;font-size:28px;margin:8px 0 2px}
.j-know .krow{margin:10px 0;padding:10px 14px;border-radius:12px;background:#fffaf08c;line-height:1.85;font-size:14px}
.j-know .krow b{color:#8a4a2f}
/* —— 档案室 / 成就墙 / 分享 —— */
.j-board{flex-direction:column;align-items:center}
.j-board-head{width:min(1180px,100%);margin:auto 0 14px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.j-board-title{font-family:"STKaiti","KaiTi",serif;font-size:26px;color:#ffd98a;letter-spacing:3px}
.j-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-left:auto}
.j-tab{padding:7px 15px;border-radius:99px;border:1px solid rgba(255,255,255,.25);background:transparent;color:#c9bda6;font-size:13px;cursor:pointer;letter-spacing:1px}
.j-tab.on{background:var(--gold);color:#2c2415;border-color:var(--gold);font-weight:800}
.j-arch-list{width:min(1080px,100%);margin:0 auto;display:flex;flex-direction:column;gap:11px;max-height:60vh;overflow-y:auto;padding:4px}
.j-arch-item{display:flex;gap:13px;padding:14px 16px;border-radius:15px;border:1px solid rgba(255,255,255,.14);background:rgba(8,34,41,.85);align-items:flex-start}
.j-arch-item>img{width:44px;height:56px;object-fit:cover;border-radius:9px;background:#d7c39d;flex-shrink:0}
.j-arch-c{flex:1;min-width:0}
.j-arch-c .an{font-family:"STKaiti","KaiTi",serif;font-size:17px;color:#ffd98a}
.j-arch-c .at{color:#f3e7cd;font-size:14px;line-height:1.8;margin-top:5px}
.j-arch-c .at.q{font-family:"STKaiti","KaiTi",serif;font-size:16px;color:#ffe9ae}
.j-arch-meta{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin-top:7px}
.j-tagchip{padding:2px 10px;border-radius:99px;font-size:11px;border:1px solid #8fe3b066;color:#8fe3b0;background:#8fe3b014}
.j-timechip{font-size:11px;color:#b9ad97}
.j-note-btn{padding:4px 12px;border-radius:99px;border:1px solid rgba(255,217,138,.4);background:transparent;color:#ffd98a;font-size:11.5px;cursor:pointer}
.j-note-form{margin-top:8px;display:flex;gap:8px;flex-wrap:wrap}
.j-note-form input{flex:1;min-width:150px;padding:8px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.25);background:#ffffff10;color:#fff;font-size:13px;outline:none}
.j-empty{padding:40px 20px;text-align:center;color:#b9ad97;font-size:14px;line-height:2}
.j-ach-grid{width:min(1080px,100%);margin:0 auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:13px;max-height:62vh;overflow-y:auto;padding:4px}
.j-ach-item{padding:17px 16px;border-radius:16px;border:1px solid rgba(255,255,255,.14);background:rgba(8,34,41,.85);text-align:center;position:relative}
.j-ach-item .mi{font-size:40px;display:block}
.j-ach-item b{display:block;margin-top:7px;color:#ffd98a;font-size:15px;letter-spacing:1px}
.j-ach-item p{margin:6px 0 0;color:#c9bda6;font-size:12px;line-height:1.7}
.j-ach-item.locked{opacity:.42;filter:grayscale(.9)}
.j-ach-item.got::after{content:"✓";position:absolute;right:10px;top:8px;color:#8fe3b0;font-weight:900}
.j-ach-item.rare{border-color:#e9b95d;background:linear-gradient(160deg,rgba(233,185,93,.16),rgba(8,34,41,.9))}
/* —— 分享卡 —— */
.j-share-wrap{flex-direction:column;align-items:center;gap:14px}
.j-share-cv{max-width:min(420px,92%);border-radius:18px;box-shadow:0 16px 50px rgba(0,0,0,.45);border:3px solid #ffd98a}
.j-share-name{padding:9px 16px;border-radius:12px;border:1px solid rgba(255,255,255,.3);background:#ffffff10;color:#fff;font-size:15px;outline:none;min-width:200px;text-align:center}
/* —— 新手序章 —— */
.j-pro{flex-direction:column;justify-content:center}
.j-pro-wrap{width:min(640px,94%);padding:clamp(20px,4vw,34px);border-radius:20px;color:var(--ink);background:linear-gradient(145deg,#fff6df,#e7d0a4);box-shadow:var(--shadow);text-align:center}
.j-pro-wrap small{color:#a44536;letter-spacing:3px;font-weight:800}
.j-pro-wrap h2{font-family:"STKaiti","KaiTi",serif;font-size:30px;margin:8px 0 4px}
.j-pro-steps{display:flex;gap:8px;justify-content:center;margin:14px 0}
.j-pro-dot{width:34px;height:8px;border-radius:99px;background:#d7c39d88}
.j-pro-dot.on{background:#b84d3c}
.j-pro-box{margin:12px 0;padding:16px;border-radius:14px;background:#fffaf08c;line-height:1.9;font-size:14.5px;text-align:left}
.j-pro-box b{color:#8a4a2f}
@media(max-width:980px){.j-grid{grid-template-columns:repeat(3,1fr)}.j-author-grid{grid-template-columns:1fr 1fr}.j-steps{display:none}.j-bubble{max-width:88%}.j-dash-btns{margin-left:0}}
@media(max-width:680px){.j-grid{grid-template-columns:1fr 1fr}.j-grid .hall-card{min-height:150px;padding:12px}.j-grid .hall-card p{display:none}.j-grid .hall-icon{margin:12px 0 8px;font-size:30px}.j-grid .hall-card h3{min-height:auto;font-size:17px}.j-author-grid{grid-template-columns:1fr}.journey-banner{flex-direction:column;text-align:center;gap:8px}.j-chat-body{max-height:44vh;padding:13px;min-height:240px}.j-bubble{font-size:14px;max-width:90%}.j-video-card h3{font-size:21px}.jp-seal{width:58px;height:58px;font-size:26px;right:16px;top:14px}.jp-top img{width:70px;height:92px}.jp-top h2{font-size:26px}.j-dash{padding:12px 13px}.j-score b{font-size:14px}.j-dot{width:11px;height:11px}}

/* ================== ✦ v9 · 编号001 文学小侦探人设层 ================== */
/* —— 开场小侦探形象卡 —— */
.det-mascot{display:flex;align-items:center;gap:13px;margin:0 0 16px;padding:10px 16px;width:fit-content;border:1px solid rgba(255,217,138,.35);border-radius:99px;background:rgba(6,30,38,.58);backdrop-filter:blur(8px)}
.det-avatar{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;font-size:25px;background:linear-gradient(145deg,#f5e6c8,#d9c49a);border:2px solid #2b3a67;box-shadow:0 4px 12px rgba(0,0,0,.4)}
.det-id b{display:block;font-family:"STKaiti","KaiTi",serif;font-size:17px;letter-spacing:1px;color:#ffe9b8}
.det-id small{display:block;margin-top:2px;color:#cdbf9f;font-size:11.5px;letter-spacing:1px}
/* —— 民国腔侦探提示行（闯关反馈区） —— */
.det-line{margin-top:9px;padding:9px 13px;border-left:3px solid #c73e3e;border-radius:0 10px 10px 0;background:#2b3a6714;color:#4d4030;font-size:13px;line-height:1.7}
.det-line b{color:#9f4134}
.det-act{display:block;font-style:normal;color:#8a7a5c;font-size:12px;margin-bottom:2px}
/* —— 通关电子侦探证书条 —— */
.det-cert{margin:20px 0 4px;padding:14px 17px;border:1px dashed #c73e3e;border-radius:12px;background:rgba(199,62,62,.1);color:#ffe4c4;font-size:14px;line-height:1.8;font-family:"STKaiti","KaiTi",serif;letter-spacing:1px}
.det-cert b{color:#ffd98a}
/* —— 民国蓝点缀：线索标签由青转蓝 —— */
.case-label{background:#2b3a67}
/* —— 顶栏徽记：探案红 —— */
.brand-mark{background:rgba(199,62,62,.16);border-color:rgba(230,120,110,.6)}
.brand-mark span{color:#f3b7ad}
