:root{
  --ink:#eaf1f7;
  --muted:#8fa0b1;
  --dim:#63758a;
  --glass:rgba(13,20,29,.72);
  --glass-2:rgba(20,29,41,.66);
  --line:rgba(190,215,240,.13);
  --line-2:rgba(190,215,240,.08);
  --accent:#e8c48f;
  --accent-2:#8fc7e8;
  --radius:16px;
  --shadow:0 18px 50px rgba(0,0,0,.45), 0 2px 10px rgba(0,0,0,.3);
  --font:"Noto Sans SC","PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,-apple-system,sans-serif;
}

*{box-sizing:border-box;margin:0;padding:0}
html,body{width:100%;height:100%;overflow:hidden;background:#080d14}
body{font-family:var(--font);color:var(--ink);-webkit-font-smoothing:antialiased;user-select:none}
button,input{font-family:inherit;color:inherit}
button{cursor:pointer;background:none;border:0}
svg{width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}

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

/* 画面质感层 */
#grain{position:fixed;inset:0;pointer-events:none;opacity:.16;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.55'/%3E%3C/svg%3E")}
#vignette{position:fixed;inset:0;pointer-events:none;
  background:radial-gradient(ellipse 78% 72% at 50% 46%,transparent 42%,rgba(4,8,14,.28) 78%,rgba(3,6,11,.72) 100%)}
#lightning{position:fixed;inset:0;pointer-events:none;opacity:0;z-index:5;
  background:radial-gradient(ellipse 90% 60% at 62% 8%,rgba(214,231,255,.85),rgba(150,185,230,.28) 42%,transparent 78%);
  mix-blend-mode:screen}

.ui{position:fixed;z-index:10;transition:opacity .55s ease,transform .55s cubic-bezier(.2,.8,.2,1)}
body.immersive .ui{opacity:0;pointer-events:none;transform:translateY(8px)}
body.immersive .hint{transform:translate(-50%,16px)}
/* 沉浸时保留一个淡淡的出口，鼠标移上去即可恢复界面 */
body.immersive .tools{opacity:.16;pointer-events:auto;transform:none}
body.immersive .tools:hover{opacity:1}

/* 品牌 */
.brand{top:30px;left:34px;display:flex;align-items:center;gap:13px;text-shadow:0 2px 12px rgba(2,6,12,.85)}
.brand-mark{width:34px;height:34px;border:1px solid rgba(232,196,143,.4);border-radius:11px;display:grid;place-items:center;
  background:rgba(232,196,143,.06);box-shadow:inset 0 0 18px rgba(232,196,143,.08)}
.mark-drop{width:9px;height:13px;border-radius:60% 60% 60% 60%/70% 70% 40% 40%;transform:rotate(0deg);
  background:linear-gradient(160deg,#cfe6f7,#7ba9cd);box-shadow:0 0 10px rgba(143,199,232,.6)}
.brand-text h1{font-size:20px;font-weight:600;letter-spacing:.32em;line-height:1.15}
.brand-text p{font-size:9.5px;letter-spacing:.16em;color:rgba(196,214,232,.66);margin-top:4px;white-space:nowrap}

/* 工具按钮 */
.tools{top:30px;right:34px;display:flex;gap:8px}
.icon-btn{width:36px;height:36px;padding:9px;border-radius:11px;border:1px solid var(--line);
  background:var(--glass-2);color:var(--muted);backdrop-filter:blur(16px);transition:.2s}
.icon-btn:hover{color:var(--ink);border-color:rgba(232,196,143,.4);background:rgba(232,196,143,.1);transform:translateY(-1px)}
.icon-btn.off{color:var(--accent);border-color:rgba(232,196,143,.35)}

/* 面板通用 */
.panel{background:var(--glass);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);backdrop-filter:blur(22px) saturate(1.2);-webkit-backdrop-filter:blur(22px)}
.panel-head{display:flex;align-items:center;justify-content:space-between;padding:17px 19px 0}
.panel-kicker{font-size:9.5px;letter-spacing:.22em;color:var(--dim);font-weight:600}
.panel-tag{font-size:10px;letter-spacing:.12em;color:var(--accent);padding:3px 9px;border-radius:20px;
  border:1px solid rgba(232,196,143,.25);background:rgba(232,196,143,.07)}
.panel-tag.weather{color:#9fc6d8;border-color:rgba(159,198,216,.3);background:rgba(159,198,216,.08)}
.panel-tag.weather.pinned{color:#e8c48f;border-color:rgba(232,196,143,.45);background:rgba(232,196,143,.12)}

/* 时间面板 */
.time-panel{top:96px;left:34px;width:288px;padding-bottom:17px}
.clock-row{padding:12px 19px 6px}
.clock{font-size:38px;font-weight:250;letter-spacing:.02em;line-height:1;font-variant-numeric:tabular-nums;
  background:linear-gradient(180deg,#fff,#a9bfd1);-webkit-background-clip:text;background-clip:text;color:transparent}
.clock-desc{font-size:10.5px;color:var(--muted);margin-top:9px;letter-spacing:.03em;min-height:15px}
.sky-strip{position:relative;height:7px;margin:16px 19px 0;border-radius:6px;overflow:visible;
  background:linear-gradient(90deg,#101a2c 0%,#2b3350 12%,#c8796e 22%,#efb884 27%,#8fb8d4 36%,#a9c9e0 50%,#d5b392 66%,#e18d63 76%,#4a4570 84%,#101a2c 92%,#101a2c 100%)}
.sky-thumb{position:absolute;top:-4px;width:3px;height:15px;border-radius:3px;background:#fff;
  box-shadow:0 0 0 2px rgba(8,13,20,.8),0 0 12px rgba(255,255,255,.85);transform:translateX(-50%)}
.range{-webkit-appearance:none;appearance:none;width:100%;height:22px;background:transparent;cursor:pointer;display:block}
.range::-webkit-slider-runnable-track{height:3px;border-radius:3px;background:rgba(190,215,240,.16)}
.range::-moz-range-track{height:3px;border-radius:3px;background:rgba(190,215,240,.16)}
.range::-webkit-slider-thumb{-webkit-appearance:none;width:13px;height:13px;border-radius:50%;margin-top:-5px;
  background:#eef6ff;border:2px solid #7fa9c8;box-shadow:0 0 10px rgba(143,199,232,.7);transition:transform .15s}
.range::-moz-range-thumb{width:11px;height:11px;border-radius:50%;background:#eef6ff;border:2px solid #7fa9c8;box-shadow:0 0 10px rgba(143,199,232,.7)}
.range:hover::-webkit-slider-thumb{transform:scale(1.2)}
.range-time{margin:2px 19px 0;width:calc(100% - 38px)}
.preset-row{display:flex;gap:7px;padding:8px 19px 0}
.preset{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 0;font-size:11px;
  color:var(--muted);border:1px solid var(--line-2);border-radius:9px;background:rgba(255,255,255,.025);transition:.2s}
.preset:hover{color:var(--ink);background:rgba(255,255,255,.07);border-color:var(--line)}
.preset.active{color:#0e1620;background:linear-gradient(135deg,#f1d6ab,#d8b483);border-color:transparent;font-weight:600}
.p-ico{width:9px;height:9px;border-radius:50%;display:inline-block;flex:none}
.p-ico.sun{background:#f6c880;box-shadow:0 0 7px #f6c880}
.p-ico.dusk{background:#e58a68;box-shadow:0 0 7px #e58a68}
.p-ico.moon{background:#a8bde4;box-shadow:0 0 7px #a8bde4}
.divider{height:1px;background:var(--line-2);margin:16px 19px 13px}
.switch-row{display:flex;align-items:center;justify-content:space-between;padding:0 19px}
.switch-title{font-size:11.5px;color:var(--ink)}
.switch-sub{font-size:9.5px;color:var(--dim);margin-top:3px}
.switch{position:relative;width:36px;height:20px;flex:none;cursor:pointer}
.switch input{opacity:0;width:0;height:0}
.switch span{position:absolute;inset:0;border-radius:20px;background:rgba(190,215,240,.15);transition:.25s;border:1px solid var(--line)}
.switch span:after{content:"";position:absolute;top:3px;left:3px;width:12px;height:12px;border-radius:50%;background:#9fb1c2;transition:.25s}
.switch input:checked + span{background:rgba(232,196,143,.32);border-color:rgba(232,196,143,.5)}
.switch input:checked + span:after{transform:translateX(16px);background:#f4d9b0;box-shadow:0 0 8px rgba(232,196,143,.7)}
.speed-row{display:flex;gap:6px;padding:11px 19px 0}
.speed{flex:1;font-size:10px;color:var(--dim);padding:5px 0;border-radius:7px;border:1px solid var(--line-2);transition:.2s}
.speed:hover{color:var(--ink)}
.speed.active{color:var(--accent);border-color:rgba(232,196,143,.3);background:rgba(232,196,143,.07)}

/* 声音面板 */
.audio-panel{right:34px;top:50%;transform:translateY(-50%);width:308px;padding-bottom:15px}
body.immersive .audio-panel{transform:translateY(calc(-50% + 8px))}
.master-btn{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;padding:7px;
  border:1px solid rgba(232,196,143,.35);background:rgba(232,196,143,.1);color:var(--accent);transition:.25s}
.master-btn:hover{background:rgba(232,196,143,.22);transform:scale(1.06)}
.master-btn svg{stroke:none;fill:currentColor}
.master-btn .ico-pause{display:none}
.master-btn.playing .ico-play{display:none}
.master-btn.playing .ico-pause{display:block}

.channel{padding:13px 19px 2px}
.channel + .channel{border-top:1px solid var(--line-2)}
.channel:first-of-type{margin-top:12px}
.ch-top{display:flex;align-items:center;gap:10px}
.ch-glyph{width:26px;height:26px;flex:none;border-radius:8px;display:grid;place-items:center;font-size:14px;
  color:var(--accent-2);background:rgba(143,199,232,.09);border:1px solid rgba(143,199,232,.14)}
.ch-name{flex:1;min-width:0}
.ch-name b{display:block;font-size:12.5px;font-weight:500;letter-spacing:.08em}
.ch-name small{display:block;font-size:9.5px;color:var(--dim);margin-top:2px;white-space:nowrap}
.ch-val{font-size:11px;color:var(--muted);width:24px;text-align:right;font-variant-numeric:tabular-nums}
.ch-mute{font-size:10px;color:var(--accent-2);opacity:.85;width:18px;height:18px;line-height:1;transition:.2s}
.ch-mute:hover{opacity:1;transform:scale(1.2)}
.ch-mute.muted{color:var(--dim);opacity:.5}
.ch-test{font-size:14px;color:var(--accent);opacity:.72;width:18px;height:18px;line-height:1;transition:.2s}
.ch-test:hover{opacity:1;transform:scale(1.25);text-shadow:0 0 10px rgba(232,196,143,.85)}
.ch-test:active{transform:scale(.85)}
.ch-bottom{display:flex;align-items:center;gap:11px;padding-left:36px}
.ch-range{flex:1;height:20px}
.meter{width:34px;height:3px;border-radius:3px;background:rgba(190,215,240,.13);overflow:hidden;flex:none}
.meter i{display:block;height:100%;width:0%;border-radius:3px;
  background:linear-gradient(90deg,#6fa9c9,#e8c48f);transition:width .09s linear}
.channel.silent .ch-glyph,.channel.silent .ch-name,.channel.silent .ch-val{opacity:.38}
.channel.silent .ch-range{opacity:.4}

.audio-foot{display:flex;align-items:center;gap:7px;margin:14px 19px 0;padding-top:12px;border-top:1px solid var(--line-2);
  font-size:9.5px;color:var(--dim);letter-spacing:.03em}
.dot-live{width:5px;height:5px;border-radius:50%;background:#5c6b7a;flex:none}
.dot-live.on{background:#8fd6a8;box-shadow:0 0 8px #8fd6a8;animation:pulse 2s infinite}
.foot-right{margin-left:auto;opacity:.75}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}

.hint{bottom:24px;left:50%;transform:translateX(-50%);font-size:10px;color:rgba(220,232,244,.7);
  letter-spacing:.08em;white-space:nowrap;text-align:center;
  padding:7px 16px;border-radius:24px;border:1px solid rgba(190,215,240,.1);
  background:rgba(8,14,22,.4);backdrop-filter:blur(8px);text-shadow:0 1px 6px rgba(0,0,0,.7)}
kbd{font-family:inherit;font-size:9px;padding:1px 5px;border-radius:4px;border:1px solid rgba(190,215,240,.2);
  background:rgba(190,215,240,.06);color:rgba(210,225,240,.7)}

#fallback{position:fixed;inset:0;z-index:60;display:grid;place-items:center;background:#0a1018;text-align:center;padding:24px}
#fallback[hidden]{display:none}
#fallback h3{font-size:18px;margin-bottom:10px}
#fallback p{font-size:12px;color:var(--muted);line-height:1.8}

/* 响应式 */
@media (max-width:1080px){
  .brand{top:20px;left:20px}.tools{top:20px;right:20px}
  .time-panel{top:78px;left:20px;width:260px}
  .audio-panel{right:20px;width:272px}
  .hint{font-size:9px}
}
@media (max-width:760px){
  .brand-text p{display:none}
  .brand-mark{width:30px;height:30px}
  .brand-text h1{font-size:17px}
  .tools{gap:5px}.icon-btn{width:32px;height:32px;padding:8px}
  .time-panel{top:70px;left:12px;width:212px;padding-bottom:12px}
  .time-panel .clock{font-size:29px}
  .clock-desc,.switch-sub,.speed-row,.divider{display:none}
  .preset-row{padding-top:6px}.preset{font-size:10px;padding:6px 0}
  .switch-row{padding-top:8px}
  .audio-panel{top:auto;bottom:12px;right:12px;left:12px;width:auto;transform:none;
    display:grid;grid-template-columns:1fr 1fr;gap:0 4px;padding-bottom:10px}
  body.immersive .audio-panel{transform:translateY(8px)}
  .audio-panel .panel-head{grid-column:1/-1;padding:11px 14px 2px}
  .channel{padding:9px 12px 2px}
  .channel + .channel{border-top:0}
  .channel:first-of-type{margin-top:4px}
  .ch-name small{display:none}
  .ch-bottom{padding-left:0}
  .meter{display:none}
  .audio-foot{grid-column:1/-1;margin:6px 14px 0;padding-top:8px}
  .hint{display:none}
}
