@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;600;900&family=Ma+Shan+Zheng&family=ZCOOL+XiaoWei&display=swap');
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
:root{--buy:#9b2226;--mai:#b8860b;--yu:#1f6f78;--qing:#6a3d8c;--ink:#3a2a1a;--gold:#c9a85f}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{font-family:"Noto Serif SC",serif;background:radial-gradient(ellipse at top,#f4e8d0 0%,#e8d5b0 40%,#c9b483 100%);min-height:100vh;min-height:100dvh;color:var(--ink);overflow-x:hidden;padding-bottom:calc(72px + env(safe-area-inset-bottom))}
body::before{content:"";position:fixed;inset:0;z-index:0;pointer-events:none;background-image:repeating-linear-gradient(0deg,rgba(120,80,30,.03) 0 2px,transparent 2px 5px),radial-gradient(circle at 20% 30%,rgba(120,70,20,.08),transparent 40%),radial-gradient(circle at 80% 70%,rgba(90,50,10,.10),transparent 45%)}

/* 顶部滚动进度条 */
#scrollBar{position:fixed;top:0;left:0;height:3px;width:0;background:linear-gradient(90deg,#9b2226,#b8860b,#1f6f78,#6a3d8c);z-index:200;transition:width .1s}

.petals{position:fixed;inset:0;pointer-events:none;z-index:2;overflow:hidden}
.petal{position:absolute;top:-30px;font-size:16px;animation:fall linear infinite;filter:drop-shadow(0 2px 2px rgba(120,40,40,.3))}
@keyframes fall{0%{transform:translateY(-30px) rotate(0);opacity:0}8%{opacity:.7}100%{transform:translateY(105vh) rotate(540deg);opacity:0}}

.wrap{position:relative;z-index:1;max-width:1100px;margin:0 auto}
header{text-align:center;padding:24px 16px 10px}
.title{font-family:"Ma Shan Zheng",cursive;font-size:44px;color:#7a1f1f;letter-spacing:5px;text-shadow:2px 2px 0 #e8d5b0,3px 3px 5px rgba(0,0,0,.2);animation:inkIn 1.6s ease-out both}
@keyframes inkIn{0%{letter-spacing:22px;opacity:0;filter:blur(8px)}60%{opacity:1;filter:blur(2px)}100%{letter-spacing:5px;opacity:1;filter:blur(0)}}
.subtitle{font-size:13px;color:#5a3a1a;margin-top:4px;letter-spacing:4px;animation:fadeUp 1.4s .6s ease-out both}
@keyframes fadeUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
.divider{width:70%;height:14px;margin:10px auto 0;background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='760' height='18'><line x1='0' y1='9' x2='340' y2='9' stroke='%237a1f1f' stroke-width='1'/><line x1='420' y1='9' x2='760' y2='9' stroke='%237a1f1f' stroke-width='1'/><circle cx='380' cy='9' r='6' fill='none' stroke='%237a1f1f' stroke-width='1.5'/><circle cx='380' cy='9' r='2' fill='%237a1f1f'/></svg>") no-repeat center/contain}

/* 顶部统计条 */
.stats{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin:10px 16px 0}
.stat{background:rgba(255,250,235,.7);border:1px solid #b8924a;border-radius:20px;padding:4px 12px;font-size:12px;color:#5a3a1a;display:flex;align-items:center;gap:5px}
.stat b{color:#7a1f1f;font-family:"Ma Shan Zheng";font-size:14px}

.tabs{position:sticky;top:0;z-index:30;display:flex;background:rgba(122,31,31,.95);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);padding:6px 4px;padding-top:calc(6px + env(safe-area-inset-top));box-shadow:0 3px 12px rgba(60,40,10,.4);margin-top:12px}
.tab{flex:1;text-align:center;padding:9px 2px;color:#e8d5b0;border-radius:8px;margin:0 2px;cursor:pointer;transition:background .25s,color .25s,transform .15s;font-family:"Ma Shan Zheng";font-size:15px}
.tab.active{background:#f4e8d0;color:#7a1f1f}
.tab:active{transform:scale(.94)}
.tab .badge{display:inline-block;background:#c0392b;color:#fff;font-size:10px;border-radius:10px;padding:1px 6px;margin-left:2px;vertical-align:top;font-family:"Noto Serif SC"}

.panel{display:none;padding:16px;animation:fadeUp .5s ease-out}
.panel.active{display:block}

/* 关系图 */
.graph-hint{text-align:center;font-size:12px;color:#6a4a2a;font-style:italic;margin-bottom:8px}
.graph-viewport{overflow:auto;-webkit-overflow-scrolling:touch;touch-action:pan-x pan-y;border:2px solid #8a6a2a;border-radius:8px;background:rgba(255,250,235,.4);box-shadow:0 6px 20px rgba(60,40,10,.25);position:relative}
.graph-scaler{width:1320px;height:920px;transform-origin:top left;position:relative}
.stage{position:relative;width:1320px;height:920px}
svg.lines{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.flow-couple{stroke-dasharray:14 10;animation:flow 2s linear infinite}
.flow-affair{stroke-dasharray:10 8;animation:flow 1.6s linear infinite}
.flow-close{stroke-dasharray:3 7;animation:flow 1.2s linear infinite}
.flow-envy{stroke-dasharray:10 8;animation:flow 1.8s linear infinite reverse}
.flow-kin{stroke-dasharray:1 0}
@keyframes flow{to{stroke-dashoffset:-48}}
.pulse-heart{animation:pulse 1.4s ease-in-out infinite;transform-origin:center;transform-box:fill-box}
@keyframes pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.4);opacity:.6}}
.stage.dim .lines path{opacity:.12}.stage.dim .lines text{opacity:.15}
.lines path.lit{opacity:1!important;filter:drop-shadow(0 0 6px currentColor)}
.person.dim{opacity:.35;filter:grayscale(.6)}
.family{position:absolute;width:340px;height:220px;border:2px solid;border-radius:10px;padding:12px;background:rgba(255,253,245,.55);box-shadow:0 6px 18px rgba(60,40,10,.2)}
.family .fname{font-family:"Ma Shan Zheng";font-size:26px;letter-spacing:4px;border-bottom:1px dashed currentColor;padding-bottom:4px;margin-bottom:8px;display:flex;justify-content:space-between;align-items:baseline}
.family .fsub{font-size:12px;opacity:.8}
.family .fquote{font-family:"ZCOOL XiaoWei";font-size:13px;color:#5a3a1a;line-height:1.7;font-style:italic}
.f-buy{left:60px;top:90px;border-color:var(--buy);color:var(--buy)}.f-mai{right:60px;top:90px;border-color:var(--mai);color:#9a6f08}.f-yu{left:60px;bottom:90px;border-color:var(--yu);color:var(--yu)}.f-qing{right:60px;bottom:90px;border-color:var(--qing);color:var(--qing)}
.person{position:absolute;width:120px;padding:8px 6px 6px;background:#fffdf6;border:2px solid #5a3a1a;border-radius:8px;text-align:center;cursor:pointer;box-shadow:0 3px 8px rgba(60,40,10,.25);z-index:3;transition:transform .2s,box-shadow .2s,opacity .3s,filter .3s;animation:popIn .6s ease-out both}
@keyframes popIn{0%{opacity:0;transform:translateY(10px) scale(.85)}70%{transform:translateY(0) scale(1.04)}100%{opacity:1;transform:scale(1)}}
.person:active{transform:scale(.95)}
.person .avatar{width:46px;height:46px;margin:0 auto 4px;border-radius:50%;background:linear-gradient(135deg,#e9d8b0,#c9a85f);border:2px solid #5a3a1a;display:flex;align-items:center;justify-content:center;font-family:"Ma Shan Zheng";font-size:22px}
.person .pname{font-weight:900;font-size:16px;letter-spacing:1px}
.person .prole{font-size:10.5px;color:#6a4a2a;margin-top:2px;line-height:1.3}
.person .gender{position:absolute;top:4px;right:5px;font-size:9px;width:15px;height:15px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:bold}
.gender.m{background:#2c6e8f}.gender.f{background:#c0392b}
.person.heir .avatar{background:linear-gradient(135deg,#f6d365,#d4a017);animation:glowGold 2.5s ease-in-out infinite}
.person.heir{border-color:#7a1f1f}
@keyframes glowGold{0%,100%{box-shadow:0 0 0 0 rgba(212,160,23,0)}50%{box-shadow:0 0 12px 3px rgba(212,160,23,.6)}}
.person.outsider{border-style:dashed;border-color:#3a3a3a;background:#f7f7f2}
.person.outsider .avatar{background:linear-gradient(135deg,#cfd8dc,#90a4ae);border-color:#3a3a3a}
.person.mystery{border-style:dashed;border-color:#6a3d8c;background:linear-gradient(160deg,#f3eef8,#e6d9f2);opacity:0;pointer-events:none;transform:scale(.5)}
.person.mystery.show{opacity:1;pointer-events:auto;transform:scale(1);animation:popIn .6s ease-out both}
.person.mystery .avatar{background:linear-gradient(135deg,#9b7bb8,#6a3d8c);border-color:#4a2a6a;color:#f4e8d0}
.legend-toggle{display:flex;align-items:center;justify-content:center;gap:6px;font-size:13px;color:#7a1f1f;padding:8px;margin-top:10px;cursor:pointer}
.act-badge{text-align:center;font-family:"Ma Shan Zheng";font-size:16px;letter-spacing:3px;color:#7a1f1f;background:linear-gradient(90deg,rgba(155,34,38,.1),rgba(184,134,11,.1),rgba(31,111,120,.1),rgba(106,61,140,.1));border:1px solid #b8924a;border-radius:20px;padding:6px 18px;margin:0 auto 10px;max-width:520px;transition:all .4s}
.act-badge.flash{animation:badgeFlash 1.2s ease-out}
@keyframes badgeFlash{0%{box-shadow:0 0 0 0 rgba(122,31,31,.5);transform:scale(1)}30%{box-shadow:0 0 20px 6px rgba(122,31,31,.4);transform:scale(1.04)}100%{box-shadow:0 0 0 0 rgba(122,31,31,0);transform:scale(1)}}
.graph-empty{text-align:center;color:#8a6a2a;font-style:italic;padding:40px 16px;line-height:1.9}
.legend-box{display:none;flex-wrap:wrap;gap:10px 16px;justify-content:center;background:rgba(255,250,235,.7);border:1px solid #b8924a;border-radius:8px;padding:12px;margin-top:6px;font-size:12px}
.legend-box.show{display:flex}
.legend-item{display:flex;align-items:center;gap:8px}
.legend-line{width:30px;height:0}
.ll-couple{border-top:3px solid #c0392b}.ll-affair{border-top:3px dashed #8e44ad}.ll-close{border-top:3px dotted #2c6e8f}.ll-envy{border-top:3px dashed #d35400}.ll-kin{border-top:3px solid #888}
.swatch{width:14px;height:14px;border:1px solid #555}

.sec-title{font-family:"Ma Shan Zheng";font-size:26px;color:#7a1f1f;letter-spacing:3px;text-align:center;margin:6px 0 14px}
.sub-hint{text-align:center;font-size:12px;color:#6a4a2a;font-style:italic;margin-bottom:14px;line-height:1.8}

/* 人物志 */
.fam-section{margin-bottom:22px}
.fam-head{font-family:"Ma Shan Zheng";font-size:20px;letter-spacing:3px;padding:8px 14px;border-radius:6px;color:#fff;margin-bottom:10px;display:flex;justify-content:space-between;align-items:center}
.fam-head .fh-sub{font-family:"Noto Serif SC";font-size:11px;opacity:.85;font-weight:400}
.fh-buy{background:var(--buy)}.fh-mai{background:#9a6f08}.fh-yu{background:var(--yu)}.fh-qing{background:var(--qing)}.fh-out{background:#4a4a4a}.fh-mystery{background:linear-gradient(90deg,#3a2a4a,#6a3d8c)}
.char-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px}
.char-card{background:#fffdf6;border:2px solid #5a3a1a;border-radius:10px;padding:12px 8px 10px;text-align:center;cursor:pointer;transition:transform .15s,box-shadow .15s;box-shadow:0 3px 8px rgba(60,40,10,.2);position:relative}
.char-card:active{transform:scale(.96)}
.char-card .cc-avatar{width:52px;height:52px;margin:0 auto 6px;border-radius:50%;background:linear-gradient(135deg,#e9d8b0,#c9a85f);border:2px solid #5a3a1a;display:flex;align-items:center;justify-content:center;font-family:"Ma Shan Zheng";font-size:24px}
.char-card .cc-name{font-weight:900;font-size:15px;letter-spacing:1px}
.char-card .cc-role{font-size:11px;color:#6a4a2a;margin-top:3px;line-height:1.3}
.char-card .cc-gen{position:absolute;top:6px;left:6px;font-size:10px;width:16px;height:16px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:bold}
.cc-gen.m{background:#2c6e8f}.cc-gen.f{background:#c0392b}
.char-card.heir .cc-avatar{background:linear-gradient(135deg,#f6d365,#d4a017)}
.char-card.outsider{border-style:dashed;border-color:#3a3a3a;background:#f7f7f2}
.char-card.outsider .cc-avatar{background:linear-gradient(135deg,#cfd8dc,#90a4ae);border-color:#3a3a3a}
.char-card.mystery{border-style:dashed;border-color:#6a3d8c;background:linear-gradient(160deg,#f3eef8,#e6d9f2);overflow:hidden}
.char-card.mystery .cc-avatar{background:linear-gradient(135deg,#9b7bb8,#6a3d8c);border-color:#4a2a6a;color:#f4e8d0;filter:blur(3px)}
.char-card.mystery .cc-name{color:#4a2a6a}
.char-card.mystery .cc-role{color:#6a3d8c}
.char-card.mystery::after{content:"待解之谜";position:absolute;top:6px;right:-22px;background:#6a3d8c;color:#fff;font-size:9px;padding:2px 24px;transform:rotate(35deg)}
.char-card.mystery.unlocked .cc-avatar{filter:none}
.char-card.mystery.unlocked::after{content:"已揭晓";background:#2c6e8f}

/* 纪事 / 幕 —— 层层推进 */
.progress-wrap{background:rgba(255,250,235,.7);border:1px solid #b8924a;border-radius:20px;height:22px;margin:0 4px 16px;overflow:hidden;position:relative}
.progress-fill{height:100%;width:0;background:linear-gradient(90deg,#9b2226,#c0392b,#b8860b);transition:width .5s}
.progress-text{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:11px;color:#3a2a1a;font-weight:600}
.act{margin:20px 0 6px}
.act-head{font-family:"Ma Shan Zheng";font-size:20px;letter-spacing:3px;text-align:center;padding:8px;border-radius:6px;color:#fff;margin-bottom:4px}
.act1{background:linear-gradient(90deg,#9b2226,#c0392b)}.act2{background:linear-gradient(90deg,#6a3d8c,#1f6f78)}.act3{background:linear-gradient(90deg,#3a2a4a,#7a1f1f)}
.act-sub{text-align:center;font-size:12px;color:#6a4a2a;font-style:italic;margin-bottom:12px}
.timeline{position:relative;padding-left:28px}
.timeline::before{content:"";position:absolute;left:10px;top:6px;bottom:6px;width:2px;background:linear-gradient(180deg,#7a1f1f,#b8860b,#1f6f78,#6a3d8c)}
.tl-item{position:relative;margin-bottom:16px;background:rgba(255,253,245,.7);border:1px solid #b8924a;border-radius:8px;padding:14px 16px;box-shadow:0 4px 12px rgba(60,40,10,.15);opacity:0;transform:translateX(-16px);transition:opacity .7s,transform .7s}
.tl-item.show{opacity:1;transform:translateX(0)}
.tl-item::before{content:"";position:absolute;left:-23px;top:20px;width:12px;height:12px;border-radius:50%;background:#7a1f1f;border:2px solid #f4e8d0;box-shadow:0 0 0 2px #7a1f1f}
.tl-item.locked{opacity:.45;filter:grayscale(.7)}
.tl-item.locked::before{background:#999;box-shadow:0 0 0 2px #999}
.tl-item.locked .tl-body,.tl-item.locked .tl-actions{display:none}
.tl-item.read::before{background:#2c6e8f;box-shadow:0 0 0 2px #2c6e8f}
.tl-year{font-family:"Ma Shan Zheng";font-size:17px;color:#7a1f1f;letter-spacing:2px;margin-bottom:4px;display:flex;align-items:center;gap:8px}
.tl-year .lock-icon{font-size:13px;color:#999}
.tl-year .read-mark{font-size:12px;color:#2c6e8f;background:rgba(44,110,143,.12);padding:1px 8px;border-radius:10px;font-family:"Noto Serif SC"}
.tl-title{font-weight:900;font-size:15px;margin-bottom:5px}
.tl-teaser{font-size:13px;color:#6a4a2a;font-style:italic;line-height:1.7;margin-bottom:8px}
.tl-item.locked .tl-teaser::after{content:" 🔒"}
.tl-body{font-size:13.5px;line-height:1.85;color:#4a3a2a;display:none}
.tl-item.expanded .tl-body{display:block}
.tl-item.expanded .tl-teaser{display:none}
.tl-body em{color:#7a1f1f;font-style:normal;font-weight:600}
.tl-body .clue{display:inline-block;background:rgba(201,168,95,.2);border:1px solid #c9a85f;border-radius:4px;padding:1px 6px;font-size:11px;color:#7a5a1a;margin:2px 2px;cursor:pointer}
.tl-body .clue:hover{background:rgba(201,168,95,.4)}
.tl-actions{margin-top:12px;display:flex;gap:8px;flex-wrap:wrap}
.tl-btn{font-family:"Ma Shan Zheng";font-size:14px;letter-spacing:2px;border:none;border-radius:6px;padding:7px 16px;cursor:pointer;color:#fff;transition:transform .15s,box-shadow .2s}
.tl-btn:active{transform:scale(.95)}
.btn-reveal{background:#7a1f1f}.btn-done{background:#1f6f78;box-shadow:0 3px 8px rgba(31,111,120,.3)}
.tl-reveal-only{background:#9a6f08;cursor:pointer}
.tl-reveal-only:hover{background:#b8860b}
.tl-item:not(.locked):not(.expanded){cursor:pointer}
.tl-item.expanded{cursor:default}

.gens{margin:18px 0}
.gen-card{background:rgba(255,253,245,.7);border:1px solid #b8924a;border-radius:10px;padding:14px 16px;margin-bottom:12px;box-shadow:0 4px 14px rgba(60,40,10,.18)}
.gen-card h3{font-family:"Ma Shan Zheng";font-size:20px;letter-spacing:3px;margin-bottom:8px;padding-bottom:6px;border-bottom:1px dashed #b8924a}
.gen-card p{font-size:13.5px;line-height:1.85;color:#4a3a2a}
.gen-card em{color:#7a1f1f;font-style:normal;font-weight:600}
.g1{color:#9b2226}.g2{color:#1f6f78}

.prev-grid{display:grid;grid-template-columns:1fr;gap:10px;margin-top:10px}
.prev-card{background:rgba(106,61,140,.08);border:1px dashed #6a3d8c;border-radius:8px;padding:12px 14px}
.prev-card .pc-pair{font-family:"Ma Shan Zheng";font-size:16px;color:#4a2a6a;letter-spacing:2px;margin-bottom:4px}
.prev-card .pc-text{font-size:13px;line-height:1.8;color:#4a3a2a}

/* 真相确认区 */
.truth-callout{background:linear-gradient(135deg,rgba(31,111,120,.12),rgba(122,31,31,.1));border:2px solid #1f6f78;border-radius:10px;padding:14px 16px;margin:16px 0}
.truth-callout .tc-title{font-family:"Ma Shan Zheng";font-size:18px;color:#1f6f78;letter-spacing:2px;margin-bottom:6px}
.truth-locked{text-align:center;padding:18px 10px;color:#1f6f78;font-style:italic}
.truth-locked .lock-big{font-size:30px;display:block;margin-bottom:8px}
.truth-reveal-btn{margin-top:10px;font-family:"Ma Shan Zheng";font-size:15px;letter-spacing:2px;background:#1f6f78;color:#fff;border:none;border-radius:6px;padding:9px 22px;cursor:pointer}
.truth-reveal-btn:active{transform:scale(.95)}
.truth-reveal-btn:disabled{background:#999;cursor:not-allowed;opacity:.6;box-shadow:none}
/* 终局「暂不可访问·下回分解」占位 */
.truth-tbc{text-align:center;padding:14px 10px 6px}
.truth-tbc .tbc-icon{font-size:34px;margin-bottom:6px}
.truth-tbc .tbc-title{font-family:"Ma Shan Zheng";font-size:22px;color:#1f6f78;letter-spacing:4px;margin-bottom:8px}
.truth-tbc .tbc-text{font-size:15px;color:#4a3a2a;line-height:1.9;font-style:italic}
.truth-content{display:none;font-size:13.5px;line-height:1.85;color:#3a2a1a}
.truth-content.show{display:block;animation:fadeUp .6s}
.truth-content em{color:#1f6f78;font-style:normal;font-weight:700}

.mystery-intro{text-align:center;font-size:13px;color:#6a3d8c;font-style:italic;line-height:1.8;margin-bottom:16px;padding:14px;background:rgba(106,61,140,.08);border:1px dashed #6a3d8c;border-radius:8px}

/* 线索图鉴 */
.clue-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.clue-card{background:#fffdf6;border:2px solid #8a6a2a;border-radius:10px;padding:14px 12px;text-align:center;cursor:pointer;transition:transform .15s,box-shadow .15s,opacity .3s;box-shadow:0 3px 8px rgba(60,40,10,.2);position:relative}
.clue-card:active{transform:scale(.96)}
.clue-card.viewed{border-color:#2c6e8f}
.clue-card.viewed::after{content:"已阅";position:absolute;top:6px;right:6px;font-size:9px;background:#2c6e8f;color:#fff;padding:1px 6px;border-radius:8px}
.clue-card .cl-icon{font-size:34px;margin-bottom:6px}
.clue-card .cl-name{font-family:"Ma Shan Zheng";font-size:17px;color:#7a1f1f;letter-spacing:2px}
.clue-card .cl-desc{font-size:11px;color:#6a4a2a;margin-top:4px;line-height:1.4}
.clue-new{position:absolute;top:-6px;left:-6px;background:#c0392b;color:#fff;font-size:10px;padding:2px 7px;border-radius:10px;animation:pulse 1.4s infinite}

/* 底部弹层 */
.sheet-mask{position:fixed;inset:0;background:rgba(20,10,0,.55);z-index:100;opacity:0;visibility:hidden;transition:opacity .3s,visibility .3s;backdrop-filter:blur(2px)}
.sheet-mask.show{opacity:1;visibility:visible}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:101;background:#fffdf6;border-radius:20px 20px 0 0;box-shadow:0 -8px 30px rgba(0,0,0,.3);transform:translateY(100%);transition:transform .35s cubic-bezier(.22,.9,.3,1);max-height:84vh;max-height:84dvh;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:0 0 calc(24px + env(safe-area-inset-bottom))}
.sheet.show{transform:translateY(0)}
.sheet-handle{width:40px;height:5px;background:#b8924a;border-radius:3px;margin:10px auto 4px}
.sheet-close{position:absolute;top:12px;right:14px;width:32px;height:32px;border-radius:50%;background:rgba(122,31,31,.1);color:#7a1f1f;border:none;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center}
.sheet-head{display:flex;gap:14px;align-items:center;padding:8px 20px 14px;border-bottom:1px dashed #b8924a}
.sheet-head .sh-avatar{width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#e9d8b0,#c9a85f);border:2px solid #5a3a1a;display:flex;align-items:center;justify-content:center;font-family:"Ma Shan Zheng";font-size:30px;flex-shrink:0}
.sheet-head.heir .sh-avatar{background:linear-gradient(135deg,#f6d365,#d4a017)}
.sheet-head.outsider .sh-avatar{background:linear-gradient(135deg,#cfd8dc,#90a4ae);border-color:#3a3a3a}
.sheet-head.mystery .sh-avatar{background:linear-gradient(135deg,#9b7bb8,#6a3d8c);border-color:#4a2a6a;color:#f4e8d0}
.sheet-head .sh-name{font-family:"Ma Shan Zheng";font-size:26px;color:#7a1f1f;letter-spacing:2px}
.sheet-head .sh-meta{font-size:12px;color:#6a4a2a;margin-top:3px}
.sheet-body{padding:16px 20px}
.sb-section{margin-bottom:16px}
.sb-label{font-family:"Ma Shan Zheng";font-size:16px;color:#7a1f1f;letter-spacing:2px;margin-bottom:6px;display:flex;align-items:center;gap:6px}
.sb-label::before{content:"";width:4px;height:16px;background:#c9a85f;border-radius:2px}
.sb-text{font-size:14px;line-height:1.85;color:#3a2a1a}
.sb-rel{display:flex;flex-wrap:wrap;gap:8px}
.sb-tag{background:rgba(122,31,31,.08);border:1px solid #c9a85f;border-radius:14px;padding:4px 12px;font-size:12px;color:#5a3a1a}
.sb-secret{background:rgba(106,61,140,.1);border-left:3px solid #6a3d8c;padding:10px 14px;border-radius:0 8px 8px 0;font-size:13px;line-height:1.8;color:#4a2a4a;font-style:italic}
/* 真相确认按钮（sheet内） */
.sb-truth-lock{text-align:center;background:rgba(31,111,120,.08);border:2px dashed #1f6f78;border-radius:10px;padding:18px 14px}
.sb-truth-lock .tlock-icon{font-size:30px;display:block;margin-bottom:6px}
.sb-truth-lock .tlock-tip{font-size:13px;color:#1f6f78;font-style:italic;margin-bottom:12px;line-height:1.7}
.sb-truth-lock .tlock-btn{font-family:"Ma Shan Zheng";font-size:15px;letter-spacing:2px;background:#1f6f78;color:#fff;border:none;border-radius:6px;padding:9px 22px;cursor:pointer}
.sb-truth-lock .tlock-btn:active{transform:scale(.95)}
.sb-truth{display:none;background:linear-gradient(135deg,rgba(31,111,120,.12),rgba(201,168,95,.1));border:2px solid #1f6f78;border-radius:8px;padding:12px 14px;font-size:13.5px;line-height:1.8;color:#1f4a4a}
.sb-truth.show{display:block;animation:fadeUp .6s}
.sb-truth .bt-title{font-family:"Ma Shan Zheng";font-size:16px;color:#1f6f78;letter-spacing:2px;margin-bottom:6px}

/* 自定义确认弹窗 */
.cf-input{display:none;width:100%;margin:10px 0 4px;padding:10px 12px;font-size:15px;border:1px solid #8a6a2a;border-radius:8px;background:rgba(255,250,235,.92);color:#4a3a2a;text-align:center;letter-spacing:6px;box-sizing:border-box}
.cf-input:focus{outline:2px solid #b8924a}
.cf-input.shake{animation:shakeX .45s ease}
@keyframes shakeX{0%,100%{transform:translateX(0)}20%{transform:translateX(-8px)}40%{transform:translateX(8px)}60%{transform:translateX(-5px)}80%{transform:translateX(5px)}}
.confirm-mask{position:fixed;inset:0;background:rgba(20,10,0,.6);z-index:300;display:none;align-items:center;justify-content:center;padding:30px;backdrop-filter:blur(3px)}
.confirm-mask.show{display:flex;animation:fadeUp .25s}
.confirm-box{background:#fffdf6;border:2px solid #8a6a2a;border-radius:14px;padding:24px 22px;max-width:360px;width:100%;box-shadow:0 14px 40px rgba(0,0,0,.4);text-align:center;animation:popIn .3s}
.confirm-box .cf-icon{font-size:38px;margin-bottom:8px}
.confirm-box .cf-title{font-family:"Ma Shan Zheng";font-size:22px;color:#7a1f1f;letter-spacing:2px;margin-bottom:8px}
.confirm-box .cf-text{font-size:13.5px;color:#4a3a2a;line-height:1.8;margin-bottom:18px}
.confirm-box .cf-actions{display:flex;gap:10px;justify-content:center}
.confirm-box .cf-btn{font-family:"Ma Shan Zheng";font-size:15px;letter-spacing:2px;border:none;border-radius:6px;padding:9px 22px;cursor:pointer;color:#fff}
.cf-ok{background:#7a1f1f}.cf-no{background:#888}
.cf-btn:active{transform:scale(.95)}

/* Toast */
#toast{position:fixed;left:50%;bottom:calc(90px + env(safe-area-inset-bottom));transform:translateX(-50%) translateY(20px);background:rgba(42,26,10,.95);color:#f4e8d0;padding:12px 22px;border-radius:24px;font-size:13px;z-index:250;opacity:0;transition:opacity .3s,transform .3s;border:1px solid #8a6a2a;max-width:90%;text-align:center;box-shadow:0 8px 24px rgba(0,0,0,.4)}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
#toast b{color:#e8b94a;font-family:"Ma Shan Zheng"}

.footer{text-align:center;padding:24px 16px 10px;color:#5a3a1a;font-size:12px;letter-spacing:2px}
.footer .quote{font-family:"Ma Shan Zheng";font-size:20px;color:#7a1f1f;margin-bottom:6px;letter-spacing:4px}
.reset-btn{margin-top:14px;font-size:11px;color:#888;background:none;border:1px dashed #aaa;border-radius:14px;padding:4px 14px;cursor:pointer}
.footer-actions{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin-top:14px}
.fa-btn{font-family:"Ma Shan Zheng";font-size:13px;letter-spacing:2px;color:#5a3a1a;background:rgba(255,250,235,.7);border:1px solid #b8924a;border-radius:18px;padding:5px 16px;cursor:pointer;transition:background .2s,transform .15s}
.fa-btn:active{transform:scale(.95)}
.fa-btn:hover{background:rgba(255,250,235,.95)}

/* 鸣谢 / 更新说明 弹窗（居中小页面） */
.ack-mask{position:fixed;inset:0;background:rgba(20,10,0,.6);z-index:120;display:none;align-items:center;justify-content:center;padding:24px 16px;backdrop-filter:blur(3px)}
.ack-mask.show{display:flex;animation:fadeUp .3s}
.ack-box{background:#fffdf6;border:2px solid #8a6a2a;border-radius:16px;max-width:480px;width:100%;max-height:80vh;max-height:80dvh;overflow-y:auto;-webkit-overflow-scrolling:touch;box-shadow:0 16px 50px rgba(0,0,0,.45);position:relative;animation:popIn .3s}
.ack-close{position:absolute;top:10px;right:12px;width:30px;height:30px;border-radius:50%;background:rgba(122,31,31,.1);color:#7a1f1f;border:none;font-size:17px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:2}
.ack-head{padding:22px 22px 12px;text-align:center;border-bottom:1px dashed #b8924a}
.ack-head .ah-title{font-family:"Ma Shan Zheng";font-size:26px;color:#7a1f1f;letter-spacing:4px}
.ack-head .ah-sub{font-size:12px;color:#6a4a2a;margin-top:4px;font-style:italic}
.ack-body{padding:18px 22px 22px}
/* 鸣谢名单 */
.ack-list{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
.ack-chip{font-family:"Ma Shan Zheng";font-size:16px;letter-spacing:1px;color:#fff;padding:8px 16px;border-radius:20px;box-shadow:0 3px 8px rgba(60,40,10,.25);transition:transform .2s}
.ack-chip:hover{transform:translateY(-3px) scale(1.06)}
.ack-note{text-align:center;font-size:12px;color:#8a6a2a;font-style:italic;margin-top:16px;line-height:1.8}
/* 更新说明 */
.cl-item{border:1px solid #d4c39a;border-radius:8px;margin-bottom:10px;overflow:hidden;background:rgba(255,253,245,.6)}
.cl-head{display:flex;justify-content:space-between;align-items:center;padding:11px 14px;cursor:pointer;transition:background .2s}
.cl-head:hover{background:rgba(201,168,95,.15)}
.cl-ver{font-family:"Ma Shan Zheng";font-size:16px;color:#7a1f1f;letter-spacing:1px}
.cl-date{font-size:11px;color:#8a6a2a}
.cl-toggle{color:#b8924a;font-size:13px;transition:transform .3s}
.cl-item.open .cl-toggle{transform:rotate(90deg)}
.cl-body{max-height:0;overflow:hidden;transition:max-height .35s ease;padding:0 14px}
.cl-item.open .cl-body{max-height:300px;padding:0 14px 12px}
.cl-body ul{margin:0;padding-left:18px}
.cl-body li{font-size:13px;color:#4a3a2a;line-height:1.8;list-style:'· '}
.cl-body li b{color:#1f6f78}

/* ========== 彩蛋 / 成就样式 ========== */
/* 标题印章 */
.title-wrap{position:relative;display:inline-block}
.title-stamp{position:absolute;top:-6px;right:-42px;width:46px;height:46px;border:3px solid #9b2226;color:#9b2226;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:bold;opacity:0;transform:rotate(-18deg) scale(.4);pointer-events:none;transition:none}
.title-stamp.show{opacity:.92;animation:stampIn .5s ease-out forwards}
@keyframes stampIn{0%{transform:rotate(-30deg) scale(1.6);opacity:0}60%{transform:rotate(-12deg) scale(.92);opacity:1}100%{transform:rotate(-18deg) scale(1);opacity:.92}}
.title.blood{background:linear-gradient(90deg,#5a0a0a,#9b2226,#5a0a0a);-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:0 0 12px rgba(155,34,38,.4)}

/* 七七彩蛋行 */
.tl-title.july7-target{cursor:pointer;text-decoration:underline dotted rgba(155,34,38,.55);text-underline-offset:4px;transition:background .3s;border-radius:4px}
.tl-title.july7-target:hover{background:rgba(155,34,38,.06)}
.july7-line{font-size:12px;color:#9b2226;font-weight:bold;margin-top:4px;letter-spacing:2px;animation:fadeIn 1s ease}

/* 阅毕印 */
.read-stamp{position:absolute;top:6px;right:10px;border:3px double #8a6a2a;color:#8a6a2a;padding:3px 10px;font-size:13px;font-weight:bold;letter-spacing:3px;border-radius:4px;opacity:0;transform:rotate(-8deg) scale(.5);pointer-events:none}
.read-stamp.show{opacity:.9;animation:stampIn .5s ease-out forwards}
.footer{position:relative}

/* 顶部进度条撒金粉 */
#scrollBar.gold{background:linear-gradient(90deg,#b8860b,#f5d76e,#b8860b,#f5d76e)!important;box-shadow:0 0 10px rgba(245,215,110,.8)}
#scrollBar.gold::after{content:'';position:absolute;right:0;top:-2px;width:8px;height:8px;border-radius:50%;background:#f5d76e;box-shadow:0 0 8px #f5d76e}

/* 夜读开关按钮高亮 */
#nightBtn.night-on{background:#2c2720;color:#e8d5b0;border-color:#8a6a2a}

/* 深夜夜读模式 */
body.night{background:radial-gradient(ellipse at top,#2a2418 0%,#1e1a12 40%,#15110b 100%);color:#c9b890}
body.night .wrap{background:rgba(30,26,18,.6)}
body.night .petal{filter:grayscale(.8) brightness(.7)}
body.night .clue-card[data-idx="6"]{background:linear-gradient(160deg,#2a2620,#1e1a14);position:relative;overflow:hidden}
body.night .clue-card[data-idx="6"]::before{content:'';position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0,transparent 6px,rgba(120,180,200,.08) 6px,rgba(120,180,200,.08) 8px);animation:waveShift 2s linear infinite;pointer-events:none}
@keyframes waveShift{from{background-position:0 0}to{background-position:16px 0}}

/* 隐藏奖励道具卡 */
.clue-card.bonus{border:2px dashed #9b2226;background:linear-gradient(160deg,#fdf6e8,#f0e2c8);animation:popIn .5s ease-out}
.clue-card.bonus .clue-new{background:#9b2226}

/* 通用彩蛋 overlay */
.egg-overlay{position:fixed;inset:0;z-index:500;display:flex;align-items:center;justify-content:center;background:rgba(15,8,0,.78);opacity:0;transition:opacity .4s ease;backdrop-filter:blur(2px);cursor:pointer}
.egg-overlay.show{opacity:1}
.egg-inner{text-align:center;max-width:88vw}

/* 留声片波纹 */
.egg-wave .wave-rings{width:120px;height:120px;margin:0 auto 18px;border-radius:50%;border:3px solid #6a3d8c;position:relative;animation:wavePulse 1.4s ease-out infinite}
.egg-wave .wave-rings::before,.egg-wave .wave-rings::after{content:'';position:absolute;inset:0;border-radius:50%;border:2px solid #6a3d8c;animation:wavePulse 1.4s ease-out infinite}
.egg-wave .wave-rings::before{animation-delay:.4s}
.egg-wave .wave-rings::after{animation-delay:.8s}
@keyframes wavePulse{0%{transform:scale(.5);opacity:.9}100%{transform:scale(1.6);opacity:0}}
.egg-wave .wave-text{color:#c9a0dc;font-size:22px;letter-spacing:4px;font-style:italic;animation:fadeIn 1.5s ease}

/* 船票 */
.egg-ticket .ticket-svg{width:min(300px,80vw);height:auto;filter:drop-shadow(0 4px 16px rgba(0,0,0,.5));animation:popIn .5s ease-out}

/* 匿名信 */
.egg-letter .letter-paper{background:linear-gradient(160deg,#f4e8d0,#e8d5b0);padding:28px 30px;max-width:340px;border:1px solid #8a6a2a;box-shadow:0 8px 30px rgba(0,0,0,.5);font-family:"Noto Serif SC",serif;animation:popIn .5s ease-out}
.egg-letter .letter-title{font-size:20px;color:#5a3a1a;font-weight:bold;letter-spacing:4px;margin-bottom:14px}
.egg-letter .letter-body{font-size:15px;color:#4a3a2a;line-height:2;letter-spacing:1px}
.egg-letter .letter-sig{margin-top:16px;font-size:13px;color:#7a5a2a;text-align:right;font-style:italic}

@keyframes popIn{0%{transform:scale(.6);opacity:0}60%{transform:scale(1.05);opacity:1}100%{transform:scale(1)}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}

/* 成就页 */
.ach-box{max-width:520px}
.ach-item{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid rgba(138,106,42,.3);border-radius:8px;margin-bottom:10px;background:rgba(255,250,235,.4);transition:transform .2s}
.ach-item.unlocked{border-color:#9b2226;background:linear-gradient(90deg,rgba(155,34,38,.08),rgba(255,250,235,.4))}
.ach-icon{width:42px;height:42px;flex:none;display:flex;align-items:center;justify-content:center;font-size:22px;background:rgba(138,106,42,.15);border-radius:50%}
.ach-item.unlocked .ach-icon{background:rgba(155,34,38,.15)}
.ach-info{flex:1;min-width:0}
.ach-name{font-size:15px;font-weight:bold;color:#4a3a2a}
.ach-item:not(.unlocked) .ach-name{color:#9a8a6a}
.ach-desc{font-size:12px;color:#7a6a4a;margin-top:2px}
.ach-state{font-size:11px;color:#9a8a6a;flex:none}
.ach-item.unlocked .ach-state{color:#9b2226;font-weight:bold}

/* 成就解锁 toast（右下角） */
.ach-toast{position:fixed;right:16px;bottom:16px;z-index:600;display:flex;align-items:center;gap:12px;padding:12px 16px;background:linear-gradient(135deg,#3a2a14,#5a3a1a);border:1px solid #b8860b;border-radius:10px;box-shadow:0 8px 30px rgba(0,0,0,.5);opacity:0;transform:translateX(120%);transition:transform .4s cubic-bezier(.2,.9,.3,1.3),opacity .4s;pointer-events:none;max-width:min(320px,86vw)}
.ach-toast.show{opacity:1;transform:translateX(0)}
.ach-toast .at-icon{font-size:30px;flex:none;filter:drop-shadow(0 0 6px rgba(245,215,110,.6))}
.ach-toast .at-body{flex:1;min-width:0}
.ach-toast .at-title{font-size:13px;font-weight:bold;color:#f5d76e;letter-spacing:1px}
.ach-toast .at-desc{font-size:12px;color:#d9c8a0;margin-top:2px}

@media(min-width:760px){
  .title{font-size:58px;letter-spacing:8px}
  .char-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}
  .clue-grid{grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}
  .prev-grid{grid-template-columns:1fr 1fr}
}
