html,body{margin:0;height:100%;background:#e9edf3;overflow:hidden;
  font-family:"Songti SC","Noto Serif CJK SC",serif;-webkit-tap-highlight-color:transparent}
#stage{position:fixed;inset:0;display:block}

/* 虚拟机开机画面 */
#bootscreen{position:fixed;inset:0;z-index:100;background:#030804;color:#73ff8c;
  padding:clamp(20px,5vw,64px);box-sizing:border-box;font:clamp(12px,1.5vw,16px)/1.65 "Cascadia Code","Consolas",monospace;
  letter-spacing:.035em;text-shadow:0 0 7px rgba(86,255,126,.74);overflow:hidden}
#bootscreen::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:.2;
  background:repeating-linear-gradient(0deg,rgba(120,255,140,.18) 0 1px,transparent 1px 4px)}
#bootscreen::after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at center,transparent 35%,rgba(0,0,0,.62))}
.boothead{position:relative;z-index:1;display:flex;justify-content:space-between;gap:16px;margin-bottom:18px;color:#a1ffac;letter-spacing:.16em}
.boothead span:last-child{color:rgba(161,255,172,.58);font-size:.82em}
.brand-ascii{position:relative;z-index:1;margin:0 0 clamp(18px,4vh,34px);color:#b6ffbd;font:clamp(8px,1.05vw,13px)/1.18 "Cascadia Code","Consolas",monospace;letter-spacing:0;white-space:pre;text-shadow:0 0 10px rgba(115,255,140,.48);overflow:visible}
#bootlog{position:relative;z-index:1;max-width:920px;min-height:18em;white-space:pre-wrap}
.bootline{opacity:0;animation:bootline .16s forwards}
.bootline::before{content:"> ";color:#c1ffba}
@keyframes bootline{to{opacity:1}}
#bootenter{position:relative;z-index:1;display:none;margin-top:18px;padding:9px 13px;
  color:#9cff9e;background:transparent;border:1px solid #73ff8c;font:inherit;letter-spacing:.12em;
  text-shadow:inherit;box-shadow:0 0 12px rgba(86,255,126,.24);cursor:pointer;animation:bootblink 1.1s steps(2,end) infinite}
#bootenter:hover,#bootenter:focus-visible{color:#031006;background:#80ff93;outline:none}
#bootscreen.exit{animation:bootout .65s ease forwards}
@keyframes bootblink{50%{opacity:.35}}
@keyframes bootout{to{opacity:0;visibility:hidden}}
@media (max-width:520px){.boothead span:last-child{display:none}.brand-ascii{font-size:7px}}


/* SAN 极简刻度线 */
#sanbar{position:fixed;top:4.5%;left:50%;transform:translateX(-50%);width:min(64vw,300px);
  opacity:0;transition:opacity 1s;pointer-events:none}
#sanbar .line{position:relative;height:1px;background:#3a4354;margin:14px 0 0}
#sanbar .tick{position:absolute;top:-4px;width:1px;height:9px;background:#3a4354}
#sanbar .tlab{position:absolute;top:-20px;font-size:10px;color:#3a4354;transform:translateX(-50%);letter-spacing:.1em}
#sanbar .dot{position:absolute;top:-3.5px;width:8px;height:8px;border-radius:50%;
  background:#232a36;transform:translateX(-50%);transition:left .8s cubic-bezier(.4,0,.2,1)}
#sanbar.warn .dot{animation:pulse 1s infinite}
@keyframes pulse{50%{background:#a33}}

/* 系统引导语：多层高模糊毛玻璃底板 */
#narrator{position:fixed;left:50%;transform:translateX(-50%);top:10.5%;z-index:8;display:none;
  width:min(46vw,560px);box-sizing:border-box;isolation:isolate;pointer-events:none;overflow:hidden;
  background:linear-gradient(120deg,rgba(255,255,255,.68),rgba(225,234,246,.36) 52%,rgba(255,255,255,.53));
  backdrop-filter:blur(28px) saturate(1.45) brightness(1.04);-webkit-backdrop-filter:blur(28px) saturate(1.45) brightness(1.04);
  border:1px solid rgba(255,255,255,.82);border-radius:22px;
  box-shadow:0 18px 46px rgba(35,49,74,.17),0 3px 10px rgba(45,63,91,.08),inset 0 1px rgba(255,255,255,.92),inset 0 -1px rgba(115,132,160,.12);
  padding:16px 22px 31px;text-align:center;color:#293446;font-size:14px;line-height:1.88;letter-spacing:.075em}
#narrator::before{content:"";position:absolute;z-index:-1;inset:0;opacity:.55;pointer-events:none;
  background:linear-gradient(115deg,rgba(255,255,255,.58),transparent 40%),radial-gradient(circle at 88% 0,rgba(255,255,255,.8),transparent 34%)}
#narratorText{position:relative}
@media (max-aspect-ratio:1/1){
  #narrator{width:min(88vw,560px);top:9%;padding:14px 18px 29px;font-size:13.5px}
}

/* 对话流：恢复原型的中央叙述区，给场景与团团留出两侧空间 */
#chat{position:fixed;left:50%;top:13%;transform:translateX(-50%);width:min(34em,72vw);
  max-height:35%;overflow-y:auto;display:flex;flex-direction:column;gap:10px;padding:8px 20px;
  scrollbar-width:none;mask-image:linear-gradient(to bottom,transparent,#000 12%,#000 88%,transparent)}
#chat::-webkit-scrollbar{display:none}
@media (max-aspect-ratio:1/1){
  #chat{top:17%;width:min(88vw,34em);max-height:31%;padding:8px 4px}
}
.bub{max-width:82%;padding:9px 14px;font-size:15px;line-height:1.8;letter-spacing:.04em;
  animation:up .5s both;word-break:break-all}
@keyframes up{from{opacity:0;transform:translateY(10px)}}
.npc{align-self:flex-start;background:rgba(255,255,255,.55);border:1px solid rgba(58,67,84,.25);
  color:#232a36;border-radius:2px 14px 14px 14px;user-select:text;-webkit-user-select:text;cursor:text}
.npc::selection{background:rgba(181,126,30,.36);color:#232a36}
.npc.selectable{outline:1px dashed rgba(96,127,159,.76);outline-offset:3px}
.me{align-self:flex-end;background:#39404e;color:#e9edf3;border-radius:14px 2px 14px 14px}
.sys{align-self:center;background:none;color:#5a6372;font-size:13.5px;text-align:center;
  letter-spacing:.1em;line-height:2;max-width:92%}

/* 团团：文字悬在松散纤维团中央，实体线团由画布绘制 */
.tt{position:fixed;z-index:6;box-sizing:border-box;max-width:min(24vw,180px);padding:10px 16px;
  color:#303746;font-size:14px;line-height:1.35;letter-spacing:.09em;text-align:center;word-break:break-all;
  background:radial-gradient(ellipse at 48% 45%,rgba(250,249,244,.76),rgba(244,242,238,.38) 58%,rgba(244,242,238,0) 78%);
  border:0;border-radius:46% 54% 49% 51% / 52% 45% 55% 48%;
  box-shadow:0 8px 22px rgba(75,68,105,.12);
  transform:translate(-50%,-50%) rotate(-1.4deg);transition:left .85s cubic-bezier(.16,.9,.24,1),top .85s cubic-bezier(.16,.9,.24,1),opacity .4s;
  cursor:pointer;user-select:none;touch-action:none;animation:ttfloat 4.6s ease-in-out infinite}
.tt:active{cursor:grabbing}
.tt::before{content:"";position:absolute;z-index:-1;inset:-27px -33px;border-radius:48% 52% 44% 56%;
  background:radial-gradient(ellipse at 42% 44%,rgba(137,128,166,.30),rgba(117,111,148,.12) 48%,transparent 74%);
  filter:blur(12px);animation:mist 4.6s ease-in-out infinite alternate}
.tt::after{content:"";position:absolute;left:18%;right:16%;bottom:6px;border-bottom:1px solid rgba(39,48,63,.16);transform:rotate(-3deg)}
.tt.materializing{opacity:.1;transform:translate(-50%,-50%) scale(.35) rotate(9deg);animation:none}
.tt.tier-core{border-color:rgba(181,126,30,.75);box-shadow:2px 3px 0 rgba(112,72,16,.24),0 9px 28px rgba(181,126,30,.26),inset 0 1px rgba(255,255,255,.94)}
.tt.tier-shallow{border-style:dashed}.tt.tier-irr{color:#4b5260}
@keyframes ttfloat{50%{margin-top:-7px;transform:translate(-50%,-50%) rotate(1.2deg)}}
@keyframes mist{to{transform:scale(1.13,.88) rotate(8deg);opacity:.75}}
@media (max-aspect-ratio:1/1){.tt{max-width:30vw;font-size:13px;padding:7px 11px 8px}}

/* 输入区：恢复原型的底部单行输入，像在叙述区续写一句话 */
#inputbar{position:fixed;left:50%;bottom:7%;transform:translateX(-50%);z-index:5;
  width:min(22em,70vw);display:flex;align-items:center;gap:8px;padding:0;
  background:none;border:0;box-shadow:none}
#msg{flex:1;min-width:0;background:none;border:0;border-bottom:1px solid rgba(58,67,84,.5);
  border-radius:0;color:#232a36;font-size:clamp(15px,2vmin,18px);padding:6px 4px;
  outline:none;font-family:inherit;letter-spacing:.1em;text-align:center}
#msg::placeholder{color:rgba(58,67,84,.48)}
.ibtn{background:none;border:0;color:#5a6372;font-size:12px;padding:6px 0;cursor:pointer;
  font-family:inherit;letter-spacing:.12em;white-space:nowrap;transition:color .16s,transform .16s}
.ibtn:hover{color:#232a36;transform:translateY(-1px)}
.ibtn:active{transform:translateY(0)}
@media (max-aspect-ratio:1/1){
  #inputbar{bottom:6%;width:min(78vw,22em)}
}

/* 提示词记事本（翻开的面板 + 桌面实体热区） */
#padspot{position:fixed;z-index:5;cursor:pointer}
#pad{position:fixed;right:12vw;bottom:calc(28% + 84px);width:min(72vw,260px);z-index:7;
  background:rgba(255,255,255,.92);border:1px solid rgba(58,67,84,.4);padding:14px 16px;
  display:none;box-shadow:0 6px 30px rgba(35,42,54,.15)}
#pad h4{margin:0 0 8px;font-size:12px;color:#8a94a8;letter-spacing:.2em;font-weight:normal}
#pad .ph{padding:8px 6px;font-size:14px;color:#232a36;border-top:1px dashed rgba(58,67,84,.25);
  cursor:pointer;line-height:1.7}

/* 蒙版引导（四板拼接：洞区真实可点） */
#mask{position:fixed;inset:0;z-index:20;display:none;pointer-events:none}
#mask .mq{position:absolute;background:rgba(16,18,24,.62);pointer-events:auto}
#hole{position:absolute;border-radius:8px;border:1px solid rgba(255,255,255,.25);pointer-events:none}
#ghint{position:fixed;z-index:21;left:50%;transform:translateX(-50%);top:16%;
  width:min(88vw,460px);text-align:center;color:#f2f0e8;font-size:15.5px;line-height:2.1;
  letter-spacing:.08em;display:none;text-shadow:0 1px 8px rgba(0,0,0,.4);white-space:pre-line}

/* 选词浮动条（须在蒙版 z20 之上） */
#selbar{position:fixed;z-index:25;display:none;gap:10px;transform:translateX(-50%)}
#selbar button{background:#232a36;color:#e9edf3;border:none;font-size:13px;padding:6px 16px;
  font-family:inherit;letter-spacing:.15em;cursor:pointer}
#selbar button.ghost{background:none;color:#5a6372;border:1px solid rgba(90,99,114,.5)}

/* 结算 */
#endcard{position:fixed;inset:0;z-index:30;display:none;background:rgba(233,237,243,.92);
  text-align:center;padding-top:38vh;color:#232a36;font-size:17px;line-height:2.6;
  letter-spacing:.12em;white-space:pre-line}

#debug{position:fixed;top:8px;right:10px;color:#8a94a8;font:11px/1.7 monospace;
  text-align:right;display:none;pointer-events:none;z-index:9}

/* 点击继续：嵌入引导语底板右下角 */
#contcue{position:absolute;right:14px;bottom:10px;color:rgba(58,75,99,.74);font-size:9px;line-height:1;white-space:nowrap;
  letter-spacing:.1em;display:none;animation:blink 1.2s infinite;pointer-events:none}
@keyframes blink{50%{opacity:.24}}
