/* ============================================================
   I ♥ CD — Metaverse Portal
   HUD / overlay design system
   ============================================================ */

:root{
  --bg:#04050b;
  --fg:#eaf4ff;
  --dim:rgba(234,244,255,.54);
  --faint:rgba(234,244,255,.30);
  --line:rgba(174,214,255,.16);
  --cyan:#6ff2ff;
  --pink:#ff6fc8;
  --violet:#9b8cff;
  --warm:#ffc08a;
  --ease:cubic-bezier(.22,.61,.36,1);
}

*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--bg);color:var(--fg);overflow:hidden;
  font-family:"Inter","Helvetica Neue",-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  user-select:none;
}

#scene{position:fixed;inset:0;width:100%;height:100%;display:block;cursor:grab;touch-action:none}
#scene:active{cursor:grabbing}

/* ---------------- HUD shell ---------------- */
#hud{position:fixed;inset:0;z-index:20;pointer-events:none;opacity:0;transition:opacity 1.4s var(--ease)}
#hud.ready{opacity:1}

.bar{
  position:absolute;top:0;left:0;right:0;height:74px;
  display:flex;align-items:center;justify-content:space-between;
  padding:0 28px;font-size:10px;letter-spacing:.24em;text-transform:uppercase;
  color:var(--dim);
}
.bar::after{
  content:"";position:absolute;left:28px;right:28px;bottom:0;height:1px;
  background:linear-gradient(90deg,rgba(255,255,255,.14),rgba(255,255,255,0) 45%);
}
.brand{display:flex;align-items:baseline;gap:15px}
.brand .mark{font-size:15px;font-weight:600;letter-spacing:.28em;color:var(--fg)}
.brand .heart{color:var(--pink);text-shadow:0 0 16px rgba(255,111,200,.9);margin:0 3px;font-size:14px}
.brand-sub{font-size:8.5px;letter-spacing:.34em;color:var(--faint)}
.bar-mid{position:absolute;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:10px;white-space:nowrap}
.bar-mid #chapter{color:var(--fg);font-size:10.5px;letter-spacing:.32em}
.bar-mid .sep{color:rgba(255,255,255,.22)}
.bar-mid .en{color:var(--faint);font-size:9px;letter-spacing:.28em}
.bar-right{display:flex;align-items:center;gap:10px;font-size:9px;letter-spacing:.22em}
.fps{font-variant-numeric:tabular-nums;color:var(--faint);min-width:22px;text-align:right}

/* 顶栏音效开关：一直在，随时能静音 */
.sndbtn{
  all:unset;cursor:pointer;pointer-events:auto;
  position:relative;
  margin-left:4px;padding:4px 10px;border-radius:999px;
  border:1px solid rgba(174,214,255,.16);color:var(--dim);
  font-size:8.5px;letter-spacing:.18em;text-transform:uppercase;
  transition:.3s var(--ease);
}
/* 视觉上很小，但把触摸热区往外扩 12px —— 平板上手指点得到 */
.sndbtn::after{content:"";position:absolute;inset:-12px}
.sndbtn:hover{color:#fff;border-color:rgba(174,214,255,.42)}
.sndbtn.off{color:rgba(234,244,255,.24);border-color:rgba(174,214,255,.08)}

/* 首次进入：浏览器不允许自动出声，得有一次真实触摸 */
.sndcue{
  all:unset;cursor:pointer;pointer-events:auto;
  display:inline-flex;align-items:center;gap:9px;
  padding:8px 18px;border-radius:999px;
  border:1px solid rgba(111,242,255,.42);color:#dcfbff;
  background:rgba(9,26,36,.66);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  font-size:9px;letter-spacing:.22em;text-transform:uppercase;
  animation:sndpulse 2.6s var(--ease) infinite;
  transition:.35s var(--ease);
}
.sndcue[hidden]{display:none}
.sndcue::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--cyan);box-shadow:0 0 10px var(--cyan)}
.sndcue:active{transform:scale(.97)}
@keyframes sndpulse{
  0%,100%{box-shadow:0 0 16px rgba(111,242,255,.12)}
  50%{box-shadow:0 0 34px rgba(111,242,255,.34)}
}

.dot{width:5px;height:5px;border-radius:50%;background:var(--cyan);box-shadow:0 0 8px var(--cyan);display:inline-block;flex:0 0 auto}
.dot.off{background:rgba(255,255,255,.22);box-shadow:none}
.dot.live{animation:blink 2.2s infinite}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.35}}

/* ---------------- step rail ---------------- */
.rail{
  position:absolute;right:28px;top:50%;transform:translateY(-50%);
  display:flex;flex-direction:column;gap:26px;pointer-events:auto;
}
.rail button{
  all:unset;cursor:pointer;display:flex;align-items:center;justify-content:flex-end;gap:12px;
  color:rgba(234,244,255,.28);transition:color .45s var(--ease);
}
.rail button i{
  font-style:normal;font-size:9px;letter-spacing:.12em;font-variant-numeric:tabular-nums;
  transition:.45s var(--ease);
}
.rail button span{
  font-size:9.5px;letter-spacing:.2em;opacity:0;transform:translateX(8px);
  transition:.5s var(--ease);white-space:nowrap;
}
.rail button:hover span,.rail button.active span{opacity:1;transform:none}
.rail button:hover{color:rgba(234,244,255,.7)}
.rail button.active{color:var(--fg)}
.rail button.active i{color:var(--cyan);text-shadow:0 0 14px rgba(111,242,255,.9)}

/* ---------------- spec panel ---------------- */
.spec{
  position:absolute;left:28px;bottom:132px;width:252px;padding:15px 16px 10px;
  border:1px solid var(--line);border-radius:2px;
  background:linear-gradient(180deg,rgba(9,14,26,.82),rgba(6,9,18,.58));
  -webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);
  opacity:0;transform:translateY(12px);transition:.85s var(--ease);
}
.spec.on{opacity:1;transform:none}
.spec h4{
  margin:0 0 12px;font-size:10px;font-weight:500;letter-spacing:.24em;color:var(--fg);
  display:flex;justify-content:space-between;align-items:baseline;
}
.spec h4 em{font-style:normal;font-size:8.5px;color:var(--cyan);letter-spacing:.2em;opacity:.85}
.spec .row{
  display:flex;justify-content:space-between;gap:10px;padding:5px 0;font-size:9.5px;
  letter-spacing:.08em;color:var(--faint);border-bottom:1px solid rgba(255,255,255,.05);
}
.spec .row:last-child{border-bottom:0}
.spec .row b{font-weight:500;color:rgba(234,244,255,.88);letter-spacing:.04em}

/* ---------------- 3D labels ---------------- */
.labels{position:absolute;inset:0}
.lb{
  position:absolute;opacity:0;transition:opacity .6s var(--ease);
  display:flex;flex-direction:column;gap:1px;white-space:nowrap;
}
.lb.on{opacity:1}
.lb .idx{font-size:8px;letter-spacing:.15em;color:rgba(111,242,255,.85)}
.lb .t{font-size:12.5px;letter-spacing:.09em;color:var(--fg);font-weight:500}
.lb .s{font-size:8px;letter-spacing:.14em;color:var(--faint);text-transform:uppercase}
.lb.left{text-align:right;transform:translate(-100%,-50%)}
.lb.right{text-align:left;transform:translate(0,-50%)}
.lb.left::after{
  content:"";position:absolute;right:-9px;top:50%;width:4px;height:4px;margin-top:-2px;
  border-radius:50%;background:var(--cyan);box-shadow:0 0 9px var(--cyan);
}
.lb.right::before{
  content:"";position:absolute;left:-9px;top:50%;width:4px;height:4px;margin-top:-2px;
  border-radius:50%;background:var(--cyan);box-shadow:0 0 9px var(--cyan);
}
.lb.sel .t{color:var(--cyan);text-shadow:0 0 14px rgba(111,242,255,.55)}
.lb.sel .s{color:rgba(111,242,255,.6)}

.leaders{position:absolute;inset:0;width:100%;height:100%;overflow:visible;opacity:0;transition:opacity .6s var(--ease)}
.leaders.on{opacity:1}
.leaders line{stroke:rgba(120,225,255,.34);stroke-width:1;stroke-dasharray:2 3}
.leaders line.sel{stroke:rgba(120,225,255,.9);stroke-dasharray:none}
.leaders circle{fill:rgba(111,242,255,.9)}

/* ---------------- capture / gesture ---------------- */
.capture{position:absolute;right:28px;bottom:26px;width:174px;transition:opacity .55s ease,transform .55s cubic-bezier(.22,.7,.24,1)}
.capture.gone{opacity:0;transform:translateY(10px) scale(.96);pointer-events:none}

/* 摄像头没跑起来时，小窗自己就是重试按钮 */
.capture.retryable .frame{cursor:pointer;border-color:rgba(255,140,200,.42)}
.capture.retryable .frame:active{border-color:rgba(255,140,200,.85)}
.capture.retryable .frame::after,
.capture.loading .frame::after{
  content:'点击重试';
  position:absolute;left:0;right:0;bottom:0;z-index:3;
  padding:5px 0 4px;text-align:center;
  font-size:7px;letter-spacing:.18em;
  color:rgba(255,255,255,.92);
  background:linear-gradient(0deg,rgba(6,10,20,.94),rgba(6,10,20,.0));
}
.capture.loading .frame::after{content:'引擎加载中';color:rgba(150,230,255,.92)}
.frame{
  position:relative;width:100%;aspect-ratio:4/3;overflow:hidden;border-radius:3px;
  border:1px solid var(--line);background:#05070e;
}
#video,#handCanvas{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
#video{transform:scaleX(-1);filter:saturate(.55) contrast(1.05) brightness(.82)}
#handCanvas{transform:scaleX(-1)}
.scan{
  position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(0deg,rgba(120,225,255,.05) 0 1px,transparent 1px 3px);
  box-shadow:inset 0 0 26px rgba(4,8,18,.9);
}
.cap-head{
  display:flex;align-items:center;gap:7px;margin-top:8px;
  font-size:8px;letter-spacing:.22em;color:var(--faint);text-transform:uppercase;
}
.gesture{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:5px}
.gesture span{font-size:9px;letter-spacing:.14em;color:var(--dim)}
.gbar{flex:1;height:1px;background:rgba(255,255,255,.13);position:relative;overflow:hidden}
.gbar i{position:absolute;left:0;top:0;height:100%;width:0%;background:linear-gradient(90deg,var(--cyan),#fff);transition:width .12s linear}

/* ---------------- dock ---------------- */
.dock{
  position:absolute;left:50%;bottom:28px;transform:translateX(-50%);
  display:flex;flex-direction:column;align-items:center;gap:12px;
}
.dock-row{display:flex;align-items:center;gap:14px;pointer-events:auto}
.nav-btn{
  all:unset;cursor:pointer;display:inline-flex;align-items:center;gap:10px;
  padding:11px 20px;border:1px solid rgba(174,214,255,.22);border-radius:999px;
  font-size:9.5px;letter-spacing:.22em;text-transform:uppercase;color:rgba(234,244,255,.72);
  background:rgba(8,12,22,.55);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  transition:.4s var(--ease);
}
.nav-btn:hover{color:#fff;border-color:rgba(174,214,255,.45);background:rgba(14,22,38,.75);box-shadow:0 0 24px rgba(111,242,255,.18)}
.nav-btn .arw{opacity:.6;transition:transform .4s var(--ease)}
.nav-btn:hover .arw{opacity:1;transform:translateX(2px)}
.nav-btn.primary{border-color:rgba(111,242,255,.38);color:#eafcff;background:rgba(10,24,32,.6)}
.nav-btn.primary:hover{border-color:var(--cyan);box-shadow:0 0 30px rgba(111,242,255,.28)}
.nav-btn.primary:hover .arw{transform:translateX(4px)}
.nav-btn[disabled]{opacity:.22;pointer-events:none}
.hint{font-size:8.5px;letter-spacing:.2em;color:var(--faint);text-transform:uppercase;text-align:center}

/* ---------------- visor ---------------- */
.visor{
  position:fixed;inset:0;z-index:14;pointer-events:none;opacity:0;
  transform:scale(1.28);filter:blur(16px);
  transition:opacity .9s var(--ease),transform 1.3s var(--ease),filter 1s var(--ease);
}
.visor svg{width:100%;height:100%;display:block}
.visor.on{opacity:1;transform:scale(1);filter:blur(0)}
.visor-glare{
  position:absolute;inset:0;pointer-events:none;opacity:.55;
  background:
    radial-gradient(ellipse 13% 18% at 37% 50%,rgba(111,242,255,.08),transparent 74%),
    radial-gradient(ellipse 13% 18% at 63% 50%,rgba(255,111,200,.07),transparent 74%);
}

/* ---------------- wipe ---------------- */
.wipe{
  position:fixed;inset:0;z-index:45;pointer-events:none;opacity:0;transform:scale(.28);
  background:radial-gradient(circle at 50% 46%,
    #ffffff 0%, #d8fbff 4%, #8ceaff 10%, #4bb6ff 18%,
    #2a2f7a 34%, #120d2c 52%, #05060f 74%, #04050b 100%);
}

/* ---------------- loader ---------------- */
.loader{
  position:fixed;inset:0;z-index:70;background:#04050b;
  display:grid;place-items:center;transition:opacity 1.1s var(--ease);
}
.loader.done{opacity:0;pointer-events:none}
.loader-inner{text-align:center}
.loader .big{font-size:clamp(24px,3.2vw,38px);font-weight:300;letter-spacing:.42em;color:#f2fbff;text-indent:.42em}
.loader .sub{margin-top:16px;font-size:8.5px;letter-spacing:.44em;color:var(--faint);text-transform:uppercase}
.loader .track{margin:30px auto 0;width:190px;height:1px;background:rgba(255,255,255,.12);overflow:hidden}
.loader .track i{display:block;height:100%;width:45%;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:slide 1.5s var(--ease) infinite}
@keyframes slide{from{transform:translateX(-100%)}to{transform:translateX(320%)}}

/* ---------------- responsive ---------------- */
@media (max-width: 980px){
  .bar-mid{display:none}
  .rail{right:16px;gap:18px}
  .rail button span{display:none}
  .spec{display:none}
  .capture{width:124px;right:16px;bottom:96px}
  .dock{bottom:20px}
  .nav-btn{padding:10px 15px;font-size:8.5px;letter-spacing:.16em}
  .hint{font-size:7.5px;max-width:82vw;line-height:1.7}
}
@media (max-width: 620px){
  .brand-sub{display:none}
  .capture{width:104px;bottom:92px}
  .dock-row{gap:8px}
}

/* ============================================================
   第二幕：拆解控制条
   ============================================================ */
.glassbar{
  position:absolute;left:50%;bottom:114px;transform:translate(-50%,16px);
  display:flex;align-items:center;gap:16px;padding:9px 16px;
  border:1px solid var(--line);border-radius:999px;
  background:linear-gradient(180deg,rgba(10,16,28,.84),rgba(6,9,18,.6));
  -webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);
  opacity:0;pointer-events:none;transition:.8s var(--ease);
}
.glassbar.on{opacity:1;transform:translate(-50%,0);pointer-events:auto}
.gb-tag{font-size:7.5px;letter-spacing:.26em;color:rgba(111,242,255,.7);white-space:nowrap}
.gb-btns{display:flex;gap:7px}
.gb-btn{
  all:unset;cursor:pointer;padding:7px 16px;border-radius:999px;
  border:1px solid rgba(174,214,255,.24);font-size:9px;letter-spacing:.2em;
  color:rgba(234,244,255,.78);transition:.35s var(--ease);
}
.gb-btn:hover{color:#fff;border-color:rgba(174,214,255,.5);background:rgba(111,242,255,.08)}
.gb-btn.primary{border-color:rgba(111,242,255,.42);color:#dffaff}
.gb-btn.on{background:rgba(111,242,255,.14);border-color:var(--cyan);color:#fff}
.gb-btn[disabled]{opacity:.24;pointer-events:none}
.gb-status{font-size:7.5px;letter-spacing:.16em;color:var(--faint);white-space:nowrap}
.labels.dim,.leaders.dim{opacity:0;transition:opacity .5s var(--ease)}

/* ============================================================
   第三幕：AR 视界 HUD
   ============================================================ */
.arhud{position:absolute;inset:0;opacity:0;pointer-events:none;transition:opacity .9s var(--ease)}
.arhud.on{opacity:1}

.ar-side{
  position:absolute;left:26px;top:92px;width:206px;pointer-events:auto;
  padding:14px 15px 12px;border:1px solid rgba(111,242,255,.16);border-radius:3px;
  background:linear-gradient(180deg,rgba(8,14,24,.74),rgba(8,7,18,.46));
  -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  box-shadow:0 0 40px rgba(6,10,20,.5);
}
.ar-side::before{
  content:"";position:absolute;left:-1px;top:14px;width:2px;height:26px;
  background:linear-gradient(180deg,var(--cyan),transparent);
}
.ar-title{font-size:12px;letter-spacing:.2em;color:var(--fg);display:flex;justify-content:space-between;align-items:baseline}
.ar-title em{font-style:normal;font-size:7px;letter-spacing:.22em;color:rgba(111,242,255,.62)}
.ar-meta{display:flex;gap:14px;margin-top:10px;padding-top:9px;border-top:1px solid rgba(255,255,255,.07)}
.ar-meta span{font-size:7.5px;letter-spacing:.18em;color:var(--faint);display:flex;flex-direction:column;gap:3px}
.ar-meta b{font-size:11px;font-weight:500;letter-spacing:.06em;color:rgba(234,244,255,.9);font-variant-numeric:tabular-nums}

.ar-layers{margin-top:13px;display:flex;flex-direction:column;gap:2px}
.ar-layers-t{font-size:7px;letter-spacing:.24em;color:var(--faint);margin-bottom:5px}
.ar-layers button{
  all:unset;cursor:pointer;display:flex;align-items:center;gap:8px;padding:6px 4px;
  border-radius:2px;transition:.3s var(--ease);
}
.ar-layers button:hover{background:rgba(111,242,255,.06)}
.ar-layers i{
  width:16px;height:8px;border-radius:1px;border:1px solid rgba(255,255,255,.2);
  position:relative;transition:.3s var(--ease);flex:0 0 auto;
}
.ar-layers i::after{
  content:"";position:absolute;inset:1.5px;background:rgba(255,255,255,.1);
  transition:.3s var(--ease);
}
.ar-layers button.on i{border-color:var(--cyan);box-shadow:0 0 10px rgba(111,242,255,.4)}
.ar-layers button.on i::after{background:var(--cyan)}
.ar-layers button span{font-size:9.5px;letter-spacing:.12em;color:rgba(234,244,255,.6);flex:1}
.ar-layers button.on span{color:rgba(234,244,255,.94)}
.ar-layers button em{font-style:normal;font-size:6.5px;letter-spacing:.18em;color:rgba(255,255,255,.24)}
.ar-layers button.on em{color:rgba(111,242,255,.6)}

.ar-keys{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.07)}
.ar-keys span{font-size:7.5px;letter-spacing:.1em;color:var(--faint)}
.ar-keys b{color:rgba(234,244,255,.72);font-weight:500}

/* 准星 */
.crosshair{position:absolute;left:50%;top:50%;width:34px;height:34px;transform:translate(-50%,-50%)}
.crosshair i{
  position:absolute;width:7px;height:1px;background:rgba(160,240,255,.5);
}
.crosshair i:nth-child(1){left:0;top:50%}
.crosshair i:nth-child(2){right:0;top:50%}
.crosshair i:nth-child(3){top:0;left:50%;width:1px;height:7px}
.crosshair i:nth-child(4){bottom:0;left:50%;width:1px;height:7px}
.crosshair b{
  position:absolute;left:50%;top:50%;width:3px;height:3px;margin:-1.5px 0 0 -1.5px;
  border-radius:50%;background:rgba(111,242,255,.9);box-shadow:0 0 10px var(--cyan);
}

.ar-target{
  position:absolute;left:50%;top:calc(50% + 34px);transform:translateX(-50%);
  font-size:8px;letter-spacing:.24em;color:rgba(160,240,255,.55);
  text-transform:uppercase;white-space:nowrap;transition:color .3s var(--ease);
}
.ar-target.hot{color:var(--cyan);text-shadow:0 0 14px rgba(111,242,255,.6)}

/* 3D 卡片 */
.cardline{position:absolute;inset:0;width:100%;height:100%;opacity:0;transition:opacity .4s var(--ease);pointer-events:none}
.cardline.on{opacity:1}
.cardline line{stroke:rgba(111,242,255,.55);stroke-width:1;stroke-dasharray:3 4}
.cardline circle{fill:var(--cyan);filter:drop-shadow(0 0 6px rgba(111,242,255,.9))}

.card{
  position:absolute;width:288px;padding:14px 16px 13px;border-radius:3px;
  border:1px solid rgba(111,242,255,.32);
  background:linear-gradient(158deg,rgba(6,13,23,.975),rgba(11,7,20,.965));
  -webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);
  box-shadow:0 18px 54px rgba(2,4,10,.78),0 0 0 1px rgba(6,10,18,.6),0 0 34px rgba(111,242,255,.12),inset 0 0 60px rgba(111,242,255,.04);
  opacity:0;transition:opacity .35s var(--ease),transform .12s linear;
  pointer-events:auto;will-change:transform;
}
.card.on{opacity:1}
.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:9px}
.card-tag{
  font-size:7px;letter-spacing:.26em;color:rgba(111,242,255,.85);
  border:1px solid rgba(111,242,255,.3);padding:3px 7px;border-radius:1px;
}
.card-x{
  all:unset;cursor:pointer;width:18px;height:18px;display:grid;place-items:center;
  color:rgba(234,244,255,.45);font-size:14px;line-height:1;transition:.3s var(--ease);
}
.card-x:hover{color:#fff;background:rgba(255,255,255,.08)}
.card h3{
  margin:0;font-size:15px;font-weight:500;letter-spacing:.06em;color:#f2fbff;
  display:flex;flex-direction:column;gap:3px;
}
.card h3 em{font-style:normal;font-size:7px;letter-spacing:.24em;color:rgba(111,242,255,.6)}
.card p{margin:9px 0 0;font-size:9.5px;line-height:1.85;letter-spacing:.03em;color:rgba(234,244,255,.66)}
.card-rows{margin-top:11px;border-top:1px solid rgba(255,255,255,.08)}
.card-row{
  display:flex;justify-content:space-between;gap:10px;padding:5.5px 0;
  font-size:8.5px;letter-spacing:.09em;color:rgba(234,244,255,.44);border-bottom:1px solid rgba(255,255,255,.045);
}
.card-row b{font-weight:500;color:rgba(234,244,255,.9);letter-spacing:.03em}
.card-foot{display:flex;align-items:baseline;gap:8px;margin-top:10px}
.card-foot b{font-size:20px;font-weight:300;letter-spacing:.02em;color:var(--cyan);text-shadow:0 0 20px rgba(111,242,255,.45)}
.card-foot span{font-size:7.5px;letter-spacing:.18em;color:var(--faint)}

/* 手势模拟按钮 */
.sim{display:flex;align-items:center;gap:5px;margin-top:7px}
.sim button{
  all:unset;cursor:pointer;flex:1;text-align:center;padding:5px 0;
  border:1px solid rgba(174,214,255,.2);border-radius:2px;
  font-size:12px;line-height:1;letter-spacing:.1em;color:rgba(234,244,255,.72);
  transition:.25s var(--ease);
}
.sim button.on{border-color:rgba(111,242,255,.6);background:rgba(111,242,255,.18);color:#fff}
.sim button:hover{color:#fff;border-color:rgba(111,242,255,.5);background:rgba(111,242,255,.1)}
.sim button:active{background:rgba(111,242,255,.24);color:#fff}
.sim span{font-size:6.5px;letter-spacing:.14em;color:rgba(255,255,255,.22)}

@media (max-width: 980px){
  .ar-side{left:14px;top:84px;width:170px;padding:11px 12px 10px}
  .ar-keys{display:none}
  .card{width:236px;padding:12px 13px}
  .glassbar{bottom:104px;gap:10px;padding:8px 12px}
  .gb-status{display:none}
}

/* ============================================================
   第四幕：情绪卡片星云 Soul Nebula
   ============================================================ */
.neb{position:absolute;inset:0;opacity:0;pointer-events:none;transition:opacity 1s var(--ease)}
.neb.on{opacity:1}

.neb-brand{
  position:absolute;left:28px;top:96px;width:306px;pointer-events:auto;
}
.neb-kicker{
  font-size:7.5px;letter-spacing:.42em;color:rgba(255,168,214,.72);
  text-transform:uppercase;display:block;
}
.neb-brand h2{
  margin:10px 0 0;font-size:21px;font-weight:300;letter-spacing:.2em;
  color:#f6f0ff;text-shadow:0 0 28px rgba(200,150,255,.35);
}
.neb-brand p{
  margin:9px 0 0;font-size:9.5px;line-height:1.9;letter-spacing:.1em;
  color:rgba(234,244,255,.44);
}
.neb-brand p b{color:rgba(255,170,220,.92);font-weight:500}

.neb-btns{display:flex;gap:7px;margin-top:14px;flex-wrap:wrap}
.neb-btns button{
  all:unset;cursor:pointer;padding:7px 14px;border-radius:999px;
  border:1px solid rgba(214,180,255,.24);font-size:8.5px;letter-spacing:.18em;
  color:rgba(236,226,255,.76);transition:.35s var(--ease);
}
.neb-btns button:hover{
  color:#fff;border-color:rgba(255,150,210,.55);
  background:rgba(255,120,200,.1);box-shadow:0 0 22px rgba(255,120,200,.18);
}
.neb-btns button.on{
  border-color:rgba(255,150,210,.7);color:#ffe9f6;background:rgba(255,120,200,.18);
}

.neb-readout{
  position:absolute;left:50%;bottom:152px;transform:translateX(-50%);
  display:flex;flex-direction:column;align-items:center;gap:9px;pointer-events:none;
}
.neb-state{
  font-size:9px;letter-spacing:.26em;color:rgba(234,244,255,.6);
  padding:7px 20px;border-radius:999px;
  border:1px solid rgba(174,214,255,.16);
  background:rgba(10,10,24,.42);
  -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  transition:.45s var(--ease);white-space:nowrap;
}
.neb-state.active{
  color:#eaffff;border-color:rgba(111,242,255,.45);
  box-shadow:0 0 26px rgba(111,242,255,.2);
}
.neb-state.warn{
  color:#ffd9e8;border-color:rgba(255,120,190,.6);
  box-shadow:0 0 30px rgba(255,90,170,.32);
  animation:pulseWarn .7s infinite;
}
.neb-state.cool{
  color:rgba(200,180,255,.9);border-color:rgba(155,140,255,.45);
  box-shadow:0 0 26px rgba(155,140,255,.22);
}
@keyframes pulseWarn{0%,100%{opacity:1}50%{opacity:.62}}
.neb-count{font-size:7.5px;letter-spacing:.24em;color:rgba(234,244,255,.28)}

.neb-prog{
  position:absolute;left:50%;bottom:126px;transform:translateX(-50%);
  width:250px;height:2px;background:rgba(255,255,255,.1);
  opacity:0;transition:opacity .35s var(--ease);
}
.neb-prog.on{opacity:1}
.neb-prog i{
  display:block;height:100%;width:0%;
  background:linear-gradient(90deg,rgba(255,140,210,.9),rgba(120,232,255,.95));
  box-shadow:0 0 14px rgba(255,140,210,.7);
  transition:width .08s linear;
}
.neb-prog span{
  position:absolute;right:-42px;top:-6px;font-size:7.5px;letter-spacing:.16em;
  color:rgba(234,244,255,.46);font-variant-numeric:tabular-nums;
}

/* 手势光标 */
.neb-cursor{
  position:fixed;left:0;top:0;width:44px;height:44px;z-index:30;
  transform:translate(-50%,-50%);pointer-events:none;opacity:0;
  transition:opacity .3s var(--ease);
}
.neb-cursor.on{opacity:1}
.neb-cursor svg{width:100%;height:100%;transform:rotate(-90deg);overflow:visible}
.neb-cursor .c-ring{
  fill:none;stroke:rgba(255,255,255,.5);stroke-width:1;
  transition:stroke .3s var(--ease),r .3s var(--ease);
  transform-box:fill-box;transform-origin:center;
}
.neb-cursor .c-arc{
  fill:none;stroke:rgba(255,150,215,.95);stroke-width:1.6;
  stroke-dasharray:113.1;stroke-dashoffset:113.1;
  transition:stroke-dashoffset .06s linear;
  filter:drop-shadow(0 0 5px rgba(255,120,200,.9));
}
.neb-cursor .c-dot{
  fill:rgba(255,255,255,.85);
  filter:drop-shadow(0 0 7px rgba(255,170,225,.9));
  transition:.25s var(--ease);
}
.neb-cursor.hover .c-ring{stroke:rgba(255,168,220,.95)}
.neb-cursor.hover .c-dot{fill:#ffb0e0;r:4}
.neb-cursor.pinch .c-ring{stroke:rgba(140,240,255,.9);stroke-width:1.6}
.neb-cursor.pinch .c-dot{fill:#8ff4ff;r:2}

/* 沉浸模式摄像头小窗 */
.neb-cam{
  position:absolute;right:26px;bottom:26px;width:168px;
  padding:4px;border:1px solid rgba(111,242,255,.28);border-radius:3px;
  background:rgba(4,8,16,.7);opacity:0;transform:translateY(10px);
  transition:.55s var(--ease);pointer-events:none;
}
.neb-cam video{
  display:block;width:100%;aspect-ratio:4/3;object-fit:cover;
  transform:scaleX(-1);border-radius:2px;
  filter:saturate(.5) contrast(1.06) brightness(.8);
}
.neb-cam b{
  position:absolute;left:9px;top:9px;font-size:6.5px;font-weight:500;
  letter-spacing:.22em;color:rgba(150,240,255,.8);
}

/* 控制台 */
.neb-panel{
  position:absolute;right:112px;top:92px;width:214px;
  padding:14px 15px 12px;border:1px solid rgba(200,176,255,.18);border-radius:3px;
  background:linear-gradient(180deg,rgba(12,10,26,.86),rgba(8,7,18,.66));
  -webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);
  box-shadow:0 20px 60px rgba(2,3,10,.6);
  opacity:0;transform:translateX(12px);pointer-events:none;
  transition:.55s var(--ease);
}
.neb-panel.on{opacity:1;transform:none;pointer-events:auto}
.neb-panel h4{
  margin:0 0 10px;font-size:9.5px;font-weight:500;letter-spacing:.24em;color:var(--fg);
  display:flex;justify-content:space-between;align-items:baseline;
}
.neb-panel h4 em{font-style:normal;font-size:7px;letter-spacing:.22em;color:rgba(255,160,215,.7)}
.np-row{
  display:grid;grid-template-columns:1fr auto;gap:4px 8px;align-items:center;
  padding:6px 0;border-bottom:1px solid rgba(255,255,255,.05);
}
.np-row span{font-size:8.5px;letter-spacing:.12em;color:rgba(234,244,255,.5)}
.np-row b{font-size:8.5px;font-weight:500;letter-spacing:.04em;color:rgba(255,200,235,.9);font-variant-numeric:tabular-nums}
.np-row input[type="range"]{
  grid-column:1 / -1;-webkit-appearance:none;appearance:none;
  width:100%;height:2px;background:rgba(255,255,255,.14);outline:none;margin:2px 0 0;
  border-radius:2px;cursor:pointer;
}
.np-row input[type="range"]::-webkit-slider-thumb{
  -webkit-appearance:none;appearance:none;width:9px;height:9px;border-radius:50%;
  background:#ffc2e6;box-shadow:0 0 10px rgba(255,140,210,.9);cursor:pointer;
}
.np-tip{margin:10px 0 0;font-size:7px;letter-spacing:.16em;color:rgba(234,244,255,.24)}

/* 沉浸模式 */
body.clean-mode .bar,
body.clean-mode .rail,
body.clean-mode .dock,
body.clean-mode .neb-brand,
body.clean-mode .neb-panel,
body.clean-mode .neb-readout,
body.clean-mode .neb-prog{opacity:0!important;pointer-events:none!important;transform:translateY(-6px)}
body.clean-mode .neb-cam{opacity:1;transform:none}

/* 编辑器 Modal */
.nebmodal{
  position:fixed;inset:0;z-index:60;display:none;
  align-items:center;justify-content:center;
  background:rgba(4,5,12,.78);
  -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
}
.nebmodal.on{display:flex}
.nm-box{
  width:min(620px,90vw);padding:26px 28px 22px;border-radius:4px;
  border:1px solid rgba(214,180,255,.24);
  background:linear-gradient(160deg,rgba(14,12,30,.98),rgba(10,8,22,.98));
  box-shadow:0 30px 90px rgba(0,0,0,.7),0 0 60px rgba(160,110,255,.08);
  animation:nmIn .35s var(--ease);
}
@keyframes nmIn{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:none}}
.nm-head{display:flex;align-items:baseline;gap:12px;margin-bottom:18px}
.nm-head h3{margin:0;font-size:15px;font-weight:400;letter-spacing:.18em;color:#f4eeff}
.nm-head em{font-style:normal;font-size:7.5px;letter-spacing:.3em;color:rgba(255,160,215,.7)}
.nm-x{
  all:unset;cursor:pointer;margin-left:auto;width:22px;height:22px;display:grid;place-items:center;
  color:rgba(234,244,255,.45);font-size:17px;line-height:1;transition:.3s var(--ease);
}
.nm-x:hover{color:#fff;background:rgba(255,255,255,.08);border-radius:2px}
.nm-box label{
  display:flex;align-items:baseline;gap:8px;
  font-size:9px;letter-spacing:.2em;color:rgba(234,244,255,.6);margin:12px 0 7px;
}
.nm-box label span{font-size:7.5px;letter-spacing:.14em;color:rgba(234,244,255,.28)}
.nm-box textarea{
  width:100%;height:190px;padding:12px 14px;resize:vertical;
  background:rgba(5,6,14,.9);border:1px solid rgba(255,255,255,.1);border-radius:2px;
  color:#e8f2ff;font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;
  font-size:12px;line-height:1.9;letter-spacing:.04em;outline:none;
  transition:border-color .3s var(--ease);
}
.nm-box textarea.sm{height:104px}
.nm-box textarea:focus{border-color:rgba(255,150,210,.5);box-shadow:0 0 0 1px rgba(255,150,210,.15)}
.nm-foot{display:flex;align-items:center;gap:10px;margin-top:18px}
.nm-foot span{font-size:7.5px;letter-spacing:.16em;color:rgba(234,244,255,.28);margin-right:auto}
.nm-btn{
  all:unset;cursor:pointer;padding:9px 20px;border-radius:999px;
  border:1px solid rgba(174,214,255,.24);font-size:9px;letter-spacing:.2em;
  color:rgba(234,244,255,.75);transition:.35s var(--ease);
}
.nm-btn:hover{color:#fff;border-color:rgba(174,214,255,.5)}
.nm-btn.primary{
  border-color:rgba(255,150,210,.55);color:#1a0714;
  background:linear-gradient(90deg,#ffb6e0,#ffd0c8);
  font-weight:600;
}
.nm-btn.primary:hover{box-shadow:0 0 26px rgba(255,140,200,.5);color:#1a0714}

@media (max-width: 980px){
  .neb-brand{left:16px;top:84px;width:250px}
  .neb-brand h2{font-size:17px}
  .neb-panel{right:86px;top:80px;width:176px}
  .neb-cam{right:14px;bottom:14px;width:120px}
  .neb-readout{bottom:136px}
  .neb-prog{width:180px;bottom:112px}
  .nm-box{padding:20px 18px 16px}
  .nm-box textarea{height:150px}
}
