:root{
  --ink:#f6ecd9;
  --ink-dim:#c9b79a;
  --amber:#ffb35c;
  --amber-deep:#c9762f;
  --glass:rgba(28,20,16,.52);
  --glass-line:rgba(255,205,140,.20);
  --font-cn:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
  --font-en:"Avenir Next","Helvetica Neue",Segoe UI,system-ui,sans-serif;
}

*{box-sizing:border-box;margin:0;padding:0;}

html,body{
  width:100%;height:100%;
  background:#0b0812;
  overflow:hidden;
  font-family:var(--font-cn);
  color:var(--ink);
  -webkit-font-smoothing:antialiased;
}

#app{position:fixed;inset:0;}
#scene{display:block;width:100%;height:100%;outline:none;}

/* ============ 载入 ============ */
#loader{
  position:fixed;inset:0;z-index:50;
  display:flex;align-items:center;justify-content:center;
  background:
    radial-gradient(120% 90% at 50% 105%, #4a2a3f 0%, #221730 45%, #0b0812 100%);
  transition:opacity 1.1s ease, visibility 1.1s;
}
#loader.done{opacity:0;visibility:hidden;}
.loader-inner{text-align:center;position:relative;}
.loader-firefly{
  width:10px;height:10px;border-radius:50%;
  margin:0 auto 26px;
  background:#ffd08a;
  box-shadow:0 0 18px 6px rgba(255,190,110,.75),0 0 60px 22px rgba(255,150,60,.30);
  animation:blink 2.4s ease-in-out infinite;
}
@keyframes blink{
  0%,100%{opacity:.35;transform:scale(.85) translateY(0);}
  50%{opacity:1;transform:scale(1.15) translateY(-4px);}
}
.loader-title{
  font-size:22px;letter-spacing:.34em;font-weight:300;
  color:#ffe6c0;text-shadow:0 0 24px rgba(255,170,80,.55);
}
.loader-sub{
  margin-top:10px;font-family:var(--font-en);
  font-size:11px;letter-spacing:.30em;color:#c3a68e;text-transform:uppercase;
}
.loader-bar{
  width:230px;height:2px;margin:30px auto 0;border-radius:2px;
  background:rgba(255,220,170,.14);overflow:hidden;
}
.loader-bar i{
  display:block;height:100%;width:0%;
  background:linear-gradient(90deg,#ffb35c,#ff8a3d,#ffd9a0);
  box-shadow:0 0 12px rgba(255,150,70,.85);
  transition:width .35s ease;
}
.loader-tip{
  margin-top:16px;font-size:11.5px;letter-spacing:.14em;color:#a08d7c;
}

/* ============ 标题 ============ */
.hud{
  position:absolute;left:34px;top:30px;z-index:20;pointer-events:none;
  opacity:0;transform:translateY(-8px);
  animation:hudIn 2s 1.4s ease forwards;
}
@keyframes hudIn{to{opacity:1;transform:translateY(0);}}
.hud-title{
  font-size:19px;font-weight:300;letter-spacing:.30em;
  color:#ffeacb;
  text-shadow:0 2px 22px rgba(255,160,60,.55),0 1px 3px rgba(0,0,0,.6);
}
.hud-sub{
  margin-top:9px;font-family:var(--font-en);
  font-size:9.5px;letter-spacing:.34em;color:rgba(240,205,165,.62);
  text-transform:uppercase;
}

/* ============ 机位 ============ */
.views{
  position:absolute;left:34px;bottom:34px;z-index:20;
  display:flex;gap:8px;flex-wrap:wrap;max-width:60vw;
}
.vbtn{
  font-family:var(--font-cn);font-size:12px;letter-spacing:.16em;
  padding:8px 16px;border-radius:999px;cursor:pointer;
  color:rgba(246,236,217,.72);
  background:var(--glass);
  border:1px solid var(--glass-line);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  transition:all .3s cubic-bezier(.3,.8,.3,1);
}
.vbtn:hover{
  color:#fff2dd;border-color:rgba(255,190,120,.55);
  transform:translateY(-1px);
  box-shadow:0 6px 22px rgba(0,0,0,.42),0 0 20px rgba(255,160,70,.16);
}
.vbtn.active{
  color:#2a1a0e;
  background:linear-gradient(160deg,#ffcf8f,#ffab52);
  border-color:rgba(255,225,180,.85);
  box-shadow:0 6px 24px rgba(255,150,60,.40),0 0 0 1px rgba(255,235,200,.35) inset;
}

/* ============ 面板 ============ */
.panel{
  position:absolute;right:30px;top:30px;z-index:20;width:236px;
  background:var(--glass);
  border:1px solid var(--glass-line);
  border-radius:16px;
  backdrop-filter:blur(18px) saturate(1.2);
  -webkit-backdrop-filter:blur(18px) saturate(1.2);
  box-shadow:0 18px 50px rgba(0,0,0,.45),0 0 0 1px rgba(255,255,255,.04) inset;
  overflow:hidden;
  opacity:0;transform:translateX(12px);
  animation:hudIn 1.6s 1.9s ease forwards;
}
.panel-head{
  display:flex;align-items:center;justify-content:space-between;
  padding:13px 15px 11px;
  font-size:11.5px;letter-spacing:.22em;color:rgba(255,224,186,.82);
  border-bottom:1px solid rgba(255,205,140,.12);
}
.panel-head button{
  width:22px;height:22px;border-radius:6px;cursor:pointer;
  background:rgba(255,220,170,.08);border:1px solid rgba(255,205,140,.16);
  color:rgba(255,224,186,.8);font-size:13px;line-height:1;
  transition:.25s;
}
.panel-head button:hover{background:rgba(255,190,120,.2);color:#fff;}
.panel-body{padding:6px 15px 15px;}
.panel.collapsed .panel-body{display:none;}

.row{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:9px 0;font-size:11.5px;letter-spacing:.1em;
  color:rgba(246,236,217,.68);
}
.row.check{justify-content:flex-start;gap:9px;cursor:pointer;}
.row.check input{accent-color:#ffab52;width:14px;height:14px;cursor:pointer;}

input[type=range]{
  -webkit-appearance:none;appearance:none;
  width:112px;height:3px;border-radius:3px;outline:none;cursor:pointer;
  background:linear-gradient(90deg,rgba(255,180,100,.85),rgba(255,140,60,.35));
}
input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none;appearance:none;
  width:13px;height:13px;border-radius:50%;
  background:radial-gradient(circle at 35% 32%,#fff4e0,#ffb35c 55%,#d97b2c);
  box-shadow:0 0 10px rgba(255,160,70,.85),0 1px 3px rgba(0,0,0,.5);
  cursor:pointer;
}
input[type=range]::-moz-range-thumb{
  width:13px;height:13px;border:none;border-radius:50%;
  background:radial-gradient(circle at 35% 32%,#fff4e0,#ffb35c 55%,#d97b2c);
  box-shadow:0 0 10px rgba(255,160,70,.85);
}
.hint{
  margin-top:12px;padding-top:11px;
  border-top:1px solid rgba(255,205,140,.12);
  font-size:10px;letter-spacing:.1em;color:rgba(200,180,160,.52);line-height:1.7;
}

#credit{
  position:absolute;right:32px;bottom:34px;z-index:20;
  font-size:9.5px;letter-spacing:.2em;font-family:var(--font-en);
  color:rgba(200,180,160,.34);text-transform:uppercase;
  pointer-events:none;
}

/* ============ 第一视角 ============ */
.vbtn-fps{
  color:#2a1a0e !important;
  background:linear-gradient(160deg,rgba(255,224,180,.92),rgba(255,190,120,.86)) !important;
  border-color:rgba(255,235,200,.7) !important;
  font-weight:600;
}
.vbtn-fps.active{
  background:linear-gradient(160deg,#ffb35c,#ff8a3d) !important;
  box-shadow:0 0 0 2px rgba(255,210,150,.45),0 6px 26px rgba(255,140,50,.5) !important;
}

.crosshair{
  position:absolute;left:50%;top:50%;z-index:22;
  width:22px;height:22px;margin:-11px 0 0 -11px;
  display:none;pointer-events:none;
}
.crosshair i{
  position:absolute;left:50%;top:50%;background:rgba(255,240,215,.85);
  box-shadow:0 0 5px rgba(0,0,0,.7),0 0 10px rgba(255,180,90,.5);
  border-radius:1px;
}
.crosshair i:nth-child(1){width:1.6px;height:12px;margin:-6px 0 0 -.8px;}
.crosshair i:nth-child(2){width:12px;height:1.6px;margin:-.8px 0 0 -6px;}
body.fps-mode .crosshair{display:block;}

/* ============ 物体标签 ============ */
.tooltip{
  position:absolute;z-index:24;pointer-events:none;
  max-width:272px;padding:10px 13px 11px;
  border-radius:12px;
  background:rgba(26,18,14,.80);
  border:1px solid rgba(255,196,120,.28);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  box-shadow:0 10px 34px rgba(0,0,0,.5),0 0 22px rgba(255,150,60,.10) inset;
  opacity:0;transform:translateY(5px);
  transition:opacity .18s ease,transform .18s ease;
}
.tooltip.show{opacity:1;transform:translateY(0);}
.tooltip b{
  display:block;font-size:13px;font-weight:500;letter-spacing:.12em;
  color:#ffd9a0;margin-bottom:4px;
  text-shadow:0 0 14px rgba(255,160,70,.55);
}
.tooltip span{
  display:block;font-size:11px;line-height:1.72;letter-spacing:.04em;
  color:rgba(240,226,206,.74);
}

/* ============ 交互反馈 ============ */
.toast{
  position:absolute;left:50%;bottom:96px;z-index:25;
  transform:translate(-50%,10px);
  padding:9px 20px;border-radius:999px;
  font-size:12px;letter-spacing:.16em;color:#ffe9cc;
  background:rgba(30,20,14,.72);
  border:1px solid rgba(255,190,120,.3);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  box-shadow:0 8px 28px rgba(0,0,0,.45),0 0 24px rgba(255,150,60,.14);
  opacity:0;pointer-events:none;
  transition:opacity .3s ease,transform .3s ease;
}
.toast.show{opacity:1;transform:translate(-50%,0);}

.hint.keys{
  margin-top:9px;padding-top:9px;border-top:1px dashed rgba(255,205,140,.16);
}
.hint.keys b{color:rgba(255,208,150,.82);font-weight:600;}

/* ============ 时间轴 ============ */
.row.time-row{padding-bottom:4px;}
.time-label{
  font-size:11px;letter-spacing:.14em;color:#ffd9a0;
  text-shadow:0 0 12px rgba(255,170,80,.55);
}
.presets{
  display:flex;gap:5px;flex-wrap:wrap;
  padding:2px 0 10px;
}
.pbtn{
  flex:1 1 auto;min-width:0;
  font-family:var(--font-cn);font-size:10.5px;letter-spacing:.06em;
  padding:5px 0;border-radius:8px;cursor:pointer;
  color:rgba(246,236,217,.62);
  background:rgba(255,220,170,.07);
  border:1px solid rgba(255,205,140,.15);
  transition:all .22s ease;
}
.pbtn:hover{color:#ffeacb;border-color:rgba(255,190,120,.45);background:rgba(255,190,120,.14);}
.pbtn.active{
  color:#2a1a0e;font-weight:600;
  background:linear-gradient(160deg,#ffd08f,#ffab52);
  border-color:rgba(255,230,190,.7);
  box-shadow:0 3px 14px rgba(255,150,60,.35);
}
input[type=range]:disabled{cursor:default;}

@media (max-width:820px){
  .hud{left:18px;top:18px;}
  .hud-title{font-size:14px;letter-spacing:.18em;}
  .views{left:18px;bottom:18px;max-width:calc(100vw - 36px);}
  .vbtn{padding:6px 11px;font-size:11px;}
  .panel{right:14px;top:14px;width:200px;}
  .tooltip{max-width:200px;font-size:10px;}
  #credit{display:none;}
}
