:root{
  --c-primary:#50e8c0;--c-glow:#8affd0;--c-secondary:#30b898;
  --c-bg:#010808;--c-label:#b8ffe8;--c-side:#0e3a30;--c-dim:#3a8070;
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{width:100%;height:100%;overflow:hidden;background:var(--c-bg);font-family:'Microsoft YaHei','PingFang SC',sans-serif}
#app{width:100%;height:100%;position:relative}
#app canvas{display:block}
.label{color:var(--c-label);font-size:12px;text-shadow:0 0 8px var(--c-secondary),0 0 16px rgba(0,0,0,.6);pointer-events:none;white-space:nowrap;transform:translate(-50%,-100%);padding-bottom:10px;letter-spacing:1px;font-weight:300;transition:opacity .3s}
.title{position:absolute;top:24px;left:28px;z-index:10;pointer-events:none}
.title h1{font-size:22px;font-weight:300;letter-spacing:6px;color:var(--c-label);text-shadow:0 0 12px rgba(80,232,192,.5)}
.title p{font-size:11px;color:var(--c-dim);margin-top:6px;letter-spacing:3px}
.loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--c-primary);font-size:15px;letter-spacing:3px;z-index:100}
.tooltip{position:absolute;z-index:20;background:rgba(0,25,20,.88);border:1px solid var(--c-primary);padding:8px 14px;border-radius:4px;color:var(--c-label);font-size:12px;pointer-events:none;display:none;letter-spacing:1px}
.controls-hint{position:absolute;bottom:20px;right:24px;z-index:10;color:var(--c-dim);font-size:11px;letter-spacing:1px;pointer-events:none;text-align:right;line-height:1.8}

/* 快速控制面板 */
.ctrl-panel{position:absolute;top:24px;right:28px;z-index:20;background:rgba(2,18,16,.72);border:1px solid rgba(80,232,192,.28);border-radius:6px;padding:14px 18px;min-width:170px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);user-select:none}
.ctrl-panel .cp-title{font-size:11px;color:var(--c-primary);letter-spacing:2px;margin-bottom:10px;display:flex;align-items:center;justify-content:space-between}
.ctrl-panel .cp-title span{color:var(--c-dim);font-size:10px;letter-spacing:1px}
.ctrl-row{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.ctrl-row:last-child{margin-bottom:0}
.ctrl-row label{font-size:11px;color:#80c8b0;letter-spacing:1px;min-width:38px}
.ctrl-row input[type=range]{flex:1;-webkit-appearance:none;appearance:none;height:3px;background:rgba(80,232,192,.25);border-radius:2px;outline:none;cursor:pointer}
.ctrl-row input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:var(--c-primary);cursor:pointer;box-shadow:0 0 6px rgba(80,232,192,.7)}
.ctrl-row input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:var(--c-primary);cursor:pointer;border:none;box-shadow:0 0 6px rgba(80,232,192,.7)}
.ctrl-row .val{font-size:11px;color:var(--c-label);min-width:34px;text-align:right;font-variant-numeric:tabular-nums}
.cp-btn{display:inline-block;padding:5px 12px;font-size:11px;color:var(--c-primary);background:rgba(80,232,192,.08);border:1px solid rgba(80,232,192,.35);border-radius:3px;cursor:pointer;letter-spacing:1px;transition:all .2s;line-height:1.4}
.cp-btn:hover{background:rgba(80,232,192,.18);border-color:rgba(80,232,192,.6)}
.cp-btn.active{background:rgba(80,232,192,.25);color:var(--c-glow);border-color:rgba(80,232,192,.8)}
.cp-btns{display:flex;gap:6px;margin-top:4px}
.cp-btns .cp-btn{flex:1;text-align:center;padding:4px 0}
.cp-btn-icon{padding:4px 8px;font-size:14px;line-height:1}

/* 城市信息面板 */
.info-panel{position:absolute;top:0;left:0;width:300px;height:100%;z-index:30;background:linear-gradient(135deg,rgba(2,22,18,.95),rgba(1,12,10,.92));border-right:1px solid rgba(80,232,192,.2);padding:40px 24px 24px;transform:translateX(-100%);transition:transform .35s cubic-bezier(.23,1,.32,1);backdrop-filter:blur(10px);overflow-y:auto}
.info-panel.open{transform:translateX(0)}
.info-panel::-webkit-scrollbar{width:3px}
.info-panel::-webkit-scrollbar-thumb{background:rgba(80,232,192,.3);border-radius:2px}
.ip-close{position:absolute;top:16px;right:16px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--c-primary);border:1px solid rgba(80,232,192,.3);border-radius:4px;font-size:14px;transition:all .2s;background:transparent}
.ip-close:hover{background:rgba(80,232,192,.15);border-color:rgba(80,232,192,.6)}
.ip-name{font-size:26px;font-weight:300;color:var(--c-glow);letter-spacing:4px;text-shadow:0 0 16px rgba(80,232,192,.4);margin-bottom:4px}
.ip-sub{font-size:11px;color:var(--c-dim);letter-spacing:2px;margin-bottom:24px}
.ip-divider{height:1px;background:linear-gradient(90deg,rgba(80,232,192,.5),transparent);margin-bottom:24px}
.ip-stat{margin-bottom:18px}
.ip-stat-label{font-size:10px;color:#5a9080;letter-spacing:2px;margin-bottom:4px;text-transform:uppercase}
.ip-stat-value{font-size:22px;font-weight:300;color:var(--c-label);letter-spacing:1px;font-variant-numeric:tabular-nums}
.ip-stat-unit{font-size:11px;color:#5a9080;margin-left:4px}
.ip-bar-wrap{height:3px;background:rgba(80,232,192,.12);border-radius:2px;margin-top:6px;overflow:hidden}
.ip-bar{height:100%;background:linear-gradient(90deg,var(--c-secondary),var(--c-primary));border-radius:2px;transition:width .6s ease}
.ip-rank{margin-top:24px}
.ip-rank-title{font-size:11px;color:var(--c-primary);letter-spacing:2px;margin-bottom:12px}
.ip-rank-item{display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid rgba(80,232,192,.06)}
.ip-rank-item .rk{width:20px;font-size:10px;color:#5a9080;font-variant-numeric:tabular-nums}
.ip-rank-item .rn{flex:1;font-size:12px;color:#80c8b0}
.ip-rank-item .rv{font-size:12px;color:var(--c-label);font-variant-numeric:tabular-nums}

/* 配置面板 */
.settings-panel{position:absolute;top:0;right:0;width:340px;height:100%;z-index:60;background:linear-gradient(160deg,rgba(2,20,17,.97),rgba(1,10,9,.95));border-left:1px solid rgba(80,232,192,.2);transform:translateX(100%);transition:transform .35s cubic-bezier(.23,1,.32,1);backdrop-filter:blur(14px);overflow-y:auto;padding:0 0 30px}
.settings-panel.open{transform:translateX(0)}
.settings-panel::-webkit-scrollbar{width:3px}
.settings-panel::-webkit-scrollbar-thumb{background:rgba(80,232,192,.3);border-radius:2px}
.sp-header{position:sticky;top:0;z-index:2;padding:20px 22px 14px;background:rgba(2,18,15,.95);border-bottom:1px solid rgba(80,232,192,.12);display:flex;align-items:center;justify-content:space-between;backdrop-filter:blur(8px)}
.sp-header h3{font-size:14px;font-weight:300;color:var(--c-primary);letter-spacing:4px}
.sp-close{width:28px;height:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--c-primary);border:1px solid rgba(80,232,192,.3);border-radius:4px;font-size:13px;background:transparent;transition:all .2s}
.sp-close:hover{background:rgba(80,232,192,.15)}
.sp-section{padding:16px 22px;border-bottom:1px solid rgba(80,232,192,.08)}
.sp-label{font-size:10px;color:var(--c-dim);letter-spacing:2px;text-transform:uppercase;margin-bottom:10px}
.sp-options{display:flex;flex-wrap:wrap;gap:6px}
.sp-opt{padding:5px 12px;font-size:11px;color:#609080;background:rgba(80,232,192,.05);border:1px solid rgba(80,232,192,.2);border-radius:3px;cursor:pointer;letter-spacing:1px;transition:all .2s;user-select:none}
.sp-opt:hover{border-color:rgba(80,232,192,.5);color:var(--c-label)}
.sp-opt.active{background:rgba(80,232,192,.2);border-color:rgba(80,232,192,.7);color:var(--c-glow)}
.sp-opt .swatch{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:5px;vertical-align:middle}
.sp-input{width:100%;padding:7px 10px;font-size:11px;background:rgba(0,20,16,.6);border:1px solid rgba(80,232,192,.25);border-radius:3px;color:var(--c-label);outline:none;font-family:inherit;letter-spacing:.5px}
.sp-input:focus{border-color:rgba(80,232,192,.5)}
.sp-range-row{display:flex;align-items:center;gap:10px;margin-top:4px}
.sp-range-row input[type=range]{flex:1;-webkit-appearance:none;height:3px;background:rgba(80,232,192,.2);border-radius:2px;outline:none}
.sp-range-row input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:var(--c-primary);cursor:pointer}
.sp-range-row .sp-range-val{font-size:11px;color:var(--c-label);min-width:36px;text-align:right;font-variant-numeric:tabular-nums}
.sp-toggles{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.sp-toggle{display:flex;align-items:center;gap:8px;padding:8px 10px;background:rgba(80,232,192,.04);border:1px solid rgba(80,232,192,.15);border-radius:4px;cursor:pointer;font-size:11px;color:#80c8b0;transition:all .2s;user-select:none}
.sp-toggle:hover{border-color:rgba(80,232,192,.4)}
.sp-toggle.on{background:rgba(80,232,192,.12);border-color:rgba(80,232,192,.5);color:var(--c-label)}
.sp-toggle .dot{width:8px;height:8px;border-radius:50%;background:#3a5048;transition:all .2s}
.sp-toggle.on .dot{background:var(--c-primary);box-shadow:0 0 6px var(--c-primary)}
.sp-apply{margin:18px 22px 0;padding:10px;text-align:center;font-size:12px;color:var(--c-bg);background:linear-gradient(135deg,var(--c-secondary),var(--c-primary));border:none;border-radius:4px;cursor:pointer;letter-spacing:3px;font-weight:500;transition:all .2s;width:calc(100% - 44px)}
.sp-apply:hover{filter:brightness(1.15);box-shadow:0 0 16px rgba(80,232,192,.4)}
.sp-hint{font-size:10px;color:var(--c-dim);margin-top:8px;text-align:center;letter-spacing:1px;line-height:1.6}
