:root{--blood:#ff2b3e;--amber:#ffb347;--paper:#e8e0cf;--green:#39ff88;--ding:#ff7a1a}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{width:100%;height:100%;background:#000;overflow:hidden;font-family:"Noto Sans SC","PingFang SC","Hiragino Sans TC","Microsoft YaHei",system-ui,sans-serif;color:var(--paper);user-select:none;-webkit-user-select:none}
body[lang=en]{font-family:Georgia,"Times New Roman",system-ui,serif;letter-spacing:.02em}
#stage{position:fixed;inset:0;background:#000}
canvas#game{position:absolute;inset:0;width:100%;height:100%;display:block;filter:saturate(.82) contrast(1.08)}
#vignette{position:absolute;inset:0;pointer-events:none;z-index:5;background:radial-gradient(ellipse at center,transparent 42%,rgba(0,0,0,.55) 78%,rgba(0,0,0,.92) 100%)}
#damage{position:absolute;inset:0;pointer-events:none;z-index:6;opacity:0;transition:opacity .12s;background:radial-gradient(ellipse at center,transparent 35%,rgba(255,20,40,.55) 100%)}
#grain{position:absolute;inset:-40px;pointer-events:none;z-index:7;opacity:.09;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='1'/%3E%3C/svg%3E");animation:grain .35s steps(3) infinite}
@keyframes grain{0%{transform:translate(0,0)}33%{transform:translate(-14px,9px)}66%{transform:translate(11px,-13px)}100%{transform:translate(0,0)}}
body.calm #grain{animation:none;opacity:.05}
#hud{position:absolute;top:0;left:0;right:0;z-index:20;display:flex;justify-content:space-between;align-items:flex-start;padding:12px 14px;pointer-events:none;font-size:14px}
.hud-box{background:rgba(5,5,8,.72);border:1px solid rgba(255,255,255,.14);border-radius:10px;padding:8px 12px;backdrop-filter:blur(6px);box-shadow:0 4px 24px rgba(0,0,0,.6)}
#clock{font-variant-numeric:tabular-nums;letter-spacing:2px;font-size:20px;font-weight:800;color:#fff;text-shadow:0 0 12px rgba(255,60,60,.8)}
#clock small{display:block;font-size:11px;letter-spacing:4px;color:var(--blood);font-weight:700}
#clock.flicker{animation:clkflick .9s infinite}
@keyframes clkflick{0%,100%{opacity:1}92%{opacity:1}93%{opacity:.35}94%{opacity:1}96%{opacity:.5}97%{opacity:1}}
#floor-line{margin-top:4px;font-size:12px;font-weight:800;letter-spacing:2px;color:var(--amber)}
#objective{margin-top:6px;font-size:12.5px;line-height:1.7;color:#d8d2bd;max-width:330px}
#objective b{color:#fff}
#state-line{margin-top:6px;font-size:12px;font-weight:700;letter-spacing:2px}
#state-line.safe{color:var(--green)}#state-line.warn{color:var(--amber)}#state-line.dead{color:var(--blood)}
#stack-box{text-align:right}
#relic-bar{font-size:18px;min-height:24px;letter-spacing:2px}
#stack-icons{font-size:22px;line-height:1.25;letter-spacing:1px;min-height:28px;filter:drop-shadow(0 2px 6px #000)}
#stack-num{font-size:12px;color:#cfc8ae;margin-top:2px}
#stack-num b{color:var(--amber);font-size:16px}
#door-bar{margin-top:6px;height:6px;background:#222;border-radius:3px;overflow:hidden;display:none}
#door-fill{height:100%;width:0%;background:linear-gradient(90deg,var(--green),#b6ff5e)}
#minimap{position:absolute;top:12px;left:50%;transform:translateX(-50%);z-index:20;opacity:.92;border:1px solid rgba(255,255,255,.18);border-radius:8px;background:rgba(0,0,0,.6)}
#msgs{position:absolute;right:12px;bottom:12px;z-index:30;display:flex;flex-direction:column;gap:10px;width:min(330px,86vw)}
.msg{background:linear-gradient(180deg,#1c1e26,#121319);border:1px solid rgba(255,255,255,.16);border-left:4px solid var(--ding);border-radius:12px;padding:10px 12px 12px;position:relative;box-shadow:0 10px 40px rgba(0,0,0,.75);animation:msgin .28s cubic-bezier(.2,1.4,.4,1)}
@keyframes msgin{from{transform:translateX(60px) scale(.9);opacity:0}to{transform:none;opacity:1}}
.msg.shake{animation:msgshake .4s}
@keyframes msgshake{0%,100%{transform:none}25%{transform:translateX(-5px)}50%{transform:translateX(4px)}75%{transform:translateX(-2px)}}
.msg .from{font-size:12px;font-weight:800;letter-spacing:1px}
.msg .from .app{display:inline-block;font-size:10px;background:var(--ding);color:#000;border-radius:4px;padding:1px 5px;margin-right:6px;vertical-align:1px}
.msg .from.wx .app{background:var(--green)}
.msg .text{font-size:13.5px;margin-top:5px;line-height:1.6;color:#f2ecdb}
.msg .timer{height:4px;background:#2a2c36;border-radius:2px;margin-top:8px;overflow:hidden}
.msg .timer i{display:block;height:100%;width:100%;background:linear-gradient(90deg,var(--ding),var(--blood))}
.msg button{position:absolute;top:6px;right:6px;width:26px;height:26px;border-radius:8px;border:1px solid rgba(255,255,255,.25);background:#2a2d38;color:#fff;font-size:14px;cursor:pointer;line-height:1}
.msg button:hover{background:var(--blood);border-color:var(--blood)}
.msg button:active{transform:scale(.9)}
#subtitle{position:absolute;left:50%;bottom:17%;transform:translateX(-50%);z-index:25;max-width:min(680px,90vw);text-align:center;font-size:clamp(15px,2.4vw,21px);line-height:1.9;color:#fff;pointer-events:none;text-shadow:0 2px 18px #000,0 0 30px rgba(255,0,40,.35);letter-spacing:1px}
#touch{position:absolute;inset:auto 0 0 0;z-index:22;display:none;justify-content:space-between;align-items:flex-end;padding:0 16px 86px;pointer-events:none}
body.touch #touch{display:flex}
#joy{width:118px;height:118px;border-radius:50%;border:2px solid rgba(255,255,255,.3);background:rgba(255,255,255,.06);position:relative;pointer-events:auto}
#knob{position:absolute;left:50%;top:50%;width:52px;height:52px;border-radius:50%;background:rgba(255,255,255,.35);transform:translate(-50%,-50%)}
.tbtn{pointer-events:auto;width:64px;height:64px;border-radius:50%;border:2px solid rgba(255,255,255,.3);background:rgba(10,10,14,.6);color:#fff;font-size:12px;font-weight:800;margin-left:10px}
.tbtn:active{background:rgba(255,43,62,.5)}
#touch-btns{display:flex}
.overlay{position:absolute;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse at 50% 40%,rgba(20,4,8,.88),rgba(0,0,0,.96));padding:20px}
.overlay.hidden{display:none}
.hidden{display:none !important}
.card{max-width:620px;width:100%;background:rgba(12,12,16,.92);border:1px solid rgba(255,43,62,.35);border-radius:18px;padding:clamp(20px,4vw,40px);box-shadow:0 0 80px rgba(255,0,40,.15),0 30px 80px rgba(0,0,0,.8);text-align:center;max-height:92vh;overflow:auto}
.card.wide{max-width:760px}
.card h1{font-size:clamp(26px,5vw,44px);letter-spacing:6px;color:#fff;text-shadow:0 0 24px rgba(255,43,62,.9),0 4px 0 #400}
.card h1 small{display:block;font-size:12px;letter-spacing:8px;color:var(--blood);margin-top:6px}
.card .story{margin:16px auto 6px;font-size:14.5px;line-height:2;color:#cfc8b4;text-align:left;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:14px 16px}
.card .story b{color:#fff}.card .story em{color:var(--amber);font-style:normal;font-weight:700}
.ctrls{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;margin:14px 0 4px;font-size:12.5px;color:#bdb69e;text-align:left}
.ctrls div b{display:inline-block;min-width:86px;color:#fff;background:#23252f;border:1px solid #3a3d4d;border-radius:6px;padding:1px 8px;margin-right:6px;font-size:12px}
.btn{display:inline-block;margin-top:16px;padding:13px 44px;font-size:17px;font-weight:900;letter-spacing:4px;color:#fff;background:linear-gradient(180deg,#c21428,#6b060f);border:1px solid #ff5b6a;border-radius:12px;cursor:pointer;box-shadow:0 0 30px rgba(255,43,62,.45)}
.btn:hover{filter:brightness(1.2)}.btn:active{transform:scale(.96)}
.btn.ghost{background:#191b23;border-color:#3a3d4d;box-shadow:none;font-size:13px;padding:9px 22px;letter-spacing:2px}
.row{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.menu-row{margin-top:2px}.menu-row .btn{margin-top:10px}
.tog{margin-top:12px;font-size:12px;color:#9d9682;display:flex;gap:16px;justify-content:center;flex-wrap:wrap}
.tog label{cursor:pointer;display:flex;align-items:center;gap:6px}
.seedrow{margin-top:12px;display:flex;gap:8px;justify-content:center}
.seedrow input{background:#101218;border:1px solid #3a3d4d;color:#fff;border-radius:8px;padding:8px 12px;font-size:13px;width:170px;letter-spacing:1px}
.seedrow .btn{margin-top:0}
.donate{margin-top:14px;font-size:13px}
.donate a{color:var(--amber);text-decoration:none;border:1px solid rgba(255,179,71,.4);border-radius:20px;padding:5px 16px}
.donate a:hover{background:rgba(255,179,71,.12)}
#end-title{font-size:clamp(24px,4.6vw,38px);letter-spacing:5px}
#end-body{margin-top:12px;font-size:14.5px;line-height:2.05;color:#d9d2ba;text-align:left;white-space:pre-line}
#end-stats{display:flex;gap:10px;justify-content:center;margin-top:14px;flex-wrap:wrap}
.stat{background:#17181f;border:1px solid rgba(255,255,255,.12);border-radius:10px;padding:8px 16px;font-size:12px;color:#aaa}
.stat b{display:block;font-size:20px;color:#fff}
.relic-card{background:#15161d;border:1px solid rgba(255,179,71,.45);border-radius:14px;padding:16px 14px;width:200px;cursor:pointer;transition:transform .15s}
.relic-card:hover{transform:translateY(-4px) scale(1.03);border-color:var(--amber);box-shadow:0 0 30px rgba(255,179,71,.25)}
.relic-card .ic{font-size:40px}
.relic-card .nm{margin-top:8px;font-weight:900;color:#fff;font-size:15px}
.relic-card .ds{margin-top:6px;font-size:12.5px;line-height:1.7;color:#cfc8b4}
.gal-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-top:10px}
.gal-item{background:#15161d;border:1px solid rgba(255,255,255,.12);border-radius:10px;padding:10px;font-size:12px;line-height:1.6;color:#bdb69e}
.gal-item.got{border-color:var(--green);color:#e8f5e9}
.gal-item b{display:block;color:#fff;font-size:13px}
.gal-sec{margin-top:14px;font-size:13px;font-weight:800;letter-spacing:3px;color:var(--amber);text-align:left}
.set-row{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:10px;background:#15161d;border:1px solid rgba(255,255,255,.1);border-radius:10px;padding:10px 14px;font-size:13.5px;text-align:left}
.set-row .opts{display:flex;gap:6px;flex-wrap:wrap}
.set-row button{background:#23252f;border:1px solid #3a3d4d;color:#fff;border-radius:8px;padding:6px 12px;font-size:12.5px;cursor:pointer}
.set-row button.on{background:#6b060f;border-color:#ff5b6a}
.set-row input[type=range]{width:130px;accent-color:var(--blood)}
#scare{position:absolute;inset:0;z-index:60;display:none;align-items:center;justify-content:center;background:#000;flex-direction:column}
#scare.show{display:flex}
#scare .face{font-size:min(38vw,240px);line-height:1;filter:drop-shadow(0 0 60px rgba(255,0,30,.9));animation:scarezoom .12s infinite alternate}
@keyframes scarezoom{from{transform:scale(1) rotate(-2deg)}to{transform:scale(1.12) rotate(2deg)}}
#scare .words{margin-top:10px;font-size:clamp(18px,4vw,30px);font-weight:900;color:var(--blood);letter-spacing:3px;text-shadow:0 0 20px #f00}
#scare .job{margin-top:8px;font-size:15px;color:#fff;background:#30060b;border:1px solid var(--blood);border-radius:10px;padding:8px 18px;max-width:88vw}
body.reduce #grain{display:none}body.reduce #scare .face{animation:none}
#flash{position:absolute;inset:0;background:#fff;opacity:0;pointer-events:none;z-index:55}
#hint{position:absolute;left:50%;top:64px;transform:translateX(-50%);z-index:21;font-size:12.5px;color:#ffe9a8;background:rgba(0,0,0,.65);border:1px solid rgba(255,200,80,.4);padding:6px 14px;border-radius:20px;pointer-events:none;letter-spacing:1px;display:none;white-space:nowrap;max-width:92vw}
#vign2{position:absolute;inset:0;pointer-events:none;z-index:5;opacity:0;transition:opacity .5s;background:radial-gradient(ellipse at center,transparent 30%,rgba(120,0,10,.5) 100%)}
#toast{position:absolute;left:50%;bottom:8%;transform:translateX(-50%);z-index:70;background:rgba(10,12,10,.9);border:1px solid var(--green);color:#dfffe9;border-radius:10px;padding:8px 20px;font-size:13px;display:none;pointer-events:none}
@media (max-width:640px){#objective{display:none}#minimap{transform:translateX(-50%) scale(.8);top:54px}.ctrls{grid-template-columns:1fr}.relic-card{width:100%}}