:root{
  --bg:#070c18;
  --bg2:#0d1526;
  --panel:rgba(255,255,255,.045);
  --line:rgba(255,255,255,.10);
  --text:#e8eefc;
  --muted:#8ea0c0;
  --cyan:#22d3ee;
  --blue:#38bdf8;
  --violet:#a78bfa;
  --ok:#34d399;
  --warn:#fbbf24;
  --danger:#f87171;
  --radius:16px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:
    radial-gradient(1100px 600px at 15% -10%, rgba(56,189,248,.16), transparent 60%),
    radial-gradient(900px 600px at 90% 0%, rgba(167,139,250,.14), transparent 55%),
    var(--bg);
  color:var(--text);
  font:15px/1.7 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  min-height:100vh;
  -webkit-font-smoothing:antialiased;
}
.wrap{max-width:1040px;margin:0 auto;padding:0 18px}
.hidden{display:none !important}
a{color:var(--blue);text-decoration:none}
a:hover{text-decoration:underline}

/* ---------- header ---------- */
.site-header{border-bottom:1px solid var(--line);background:rgba(7,12,24,.6);backdrop-filter:blur(10px);position:sticky;top:0;z-index:30}
.header-inner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:14px;padding-bottom:14px}
.brand{display:flex;align-items:center;gap:12px}
.logo{font-size:26px;filter:drop-shadow(0 0 10px rgba(56,189,248,.7))}
.brand h1{font-size:19px;margin:0;letter-spacing:.5px}
.brand p{margin:2px 0 0;font-size:12px;color:var(--muted)}
.nav{display:flex;gap:18px;font-size:14px}
.nav a{color:var(--muted)}
.nav a:hover{color:var(--text);text-decoration:none}

.notice{max-width:1040px;margin:16px auto 0;padding:10px 16px;border:1px solid rgba(251,191,36,.35);background:rgba(251,191,36,.08);color:#fde68a;border-radius:10px;font-size:14px}

/* ---------- panels ---------- */
.panel{
  margin:22px 0;padding:26px;border:1px solid var(--line);border-radius:var(--radius);
  background:linear-gradient(180deg,rgba(255,255,255,.055),rgba(255,255,255,.02));
  box-shadow:0 20px 60px -30px rgba(0,0,0,.9);
}
.panel h2{margin:0 0 14px;font-size:18px}
.lead{color:var(--muted);margin:0 0 18px}

/* ---------- gauge ---------- */
.tester{padding-top:14px}
.gauge-area{position:relative;max-width:420px;margin:0 auto}
.gauge{width:100%;height:auto;display:block;overflow:visible}
.arc-bg{stroke:rgba(255,255,255,.07);stroke-width:14}
.arc-fg{stroke-width:14;filter:drop-shadow(0 0 14px rgba(56,189,248,.45));transition:stroke-dasharray .18s linear}
.needle{stroke:#fff;stroke-width:3;transform-origin:160px 160px;transition:transform .18s cubic-bezier(.2,.8,.3,1);filter:drop-shadow(0 0 6px rgba(255,255,255,.6))}
.hub{fill:#fff}
.tick-line{stroke:rgba(255,255,255,.35);stroke-width:2}
.tick-text{fill:#7f92b4;font-size:11px;text-anchor:middle;font-family:inherit}
.gauge-center{position:absolute;left:0;right:0;top:61.5%;transform:translateY(-50%);text-align:center;pointer-events:none}
.gauge-value{font-size:42px;font-weight:700;letter-spacing:-1px;font-variant-numeric:tabular-nums;line-height:1}
.gauge-unit{font-size:13px;color:var(--muted);margin-top:4px}
.gauge-phase{font-size:13.5px;color:var(--blue);height:22px;margin-bottom:10px}

/* ---------- controls ---------- */
.controls{max-width:460px;margin:6px auto 0;text-align:center}
.start-btn{
  width:190px;height:52px;border:0;border-radius:26px;cursor:pointer;
  font-size:17px;font-weight:600;color:#04121f;letter-spacing:2px;
  background:linear-gradient(135deg,var(--cyan),var(--blue) 55%,var(--violet));
  box-shadow:0 12px 32px -12px rgba(56,189,248,.9);
  transition:transform .15s, box-shadow .15s, filter .15s;
}
.start-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 18px 40px -12px rgba(56,189,248,1)}
.start-btn:disabled{cursor:not-allowed;filter:grayscale(.5) brightness(.75)}
.progress{height:4px;border-radius:2px;background:rgba(255,255,255,.08);margin:18px 0 10px;overflow:hidden}
.progress-bar{height:100%;width:0;border-radius:2px;background:linear-gradient(90deg,var(--cyan),var(--violet));transition:width .3s}
.hint{font-size:12.5px;color:var(--muted);margin:0}

/* ---------- metrics ---------- */
.metrics{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-top:26px}
.metric{
  grid-column:span 2;padding:14px;border:1px solid var(--line);border-radius:12px;
  background:rgba(255,255,255,.03);text-align:center;transition:border-color .25s,background .25s;
}
.metric.big{grid-column:span 3}
.metric.active{border-color:rgba(56,189,248,.6);background:rgba(56,189,248,.09)}
.metric-label{font-size:12px;color:var(--muted)}
.metric-value{font-size:26px;font-weight:700;margin-top:4px;font-variant-numeric:tabular-nums}
.metric-value i{font-size:12px;font-weight:400;color:var(--muted);font-style:normal;margin-left:4px}
.metric-value.ip{font-size:17px;word-break:break-all}
.metric-sub{font-size:11.5px;color:var(--muted);margin-top:2px;min-height:16px}

.conclusion{margin-top:20px;padding:14px 16px;border-radius:12px;border:1px solid rgba(52,211,153,.3);background:rgba(52,211,153,.08);font-size:14px;line-height:1.8}
.conclusion b{color:var(--ok)}

/* ---------- method ---------- */
.method-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}
.mcard{padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.025)}
.mcard h3{margin:0 0 6px;font-size:14px;color:var(--blue)}
.mcard p{margin:0;font-size:13px;color:var(--muted)}
.mcard b{color:var(--text)}
.note{margin:18px 0 0;font-size:12.5px;color:#6f819f;border-top:1px dashed var(--line);padding-top:14px}

/* ---------- table ---------- */
.history-head{display:flex;align-items:center;justify-content:space-between}
.ghost-btn{background:transparent;border:1px solid var(--line);color:var(--muted);padding:6px 14px;border-radius:8px;cursor:pointer;font-size:13px}
.ghost-btn:hover{color:var(--text);border-color:rgba(255,255,255,.3)}
.table-wrap{overflow-x:auto}
.tbl{width:100%;border-collapse:collapse;font-size:13.5px;min-width:560px}
.tbl th,.tbl td{padding:10px 12px;text-align:center;border-bottom:1px solid var(--line)}
.tbl th{color:var(--muted);font-weight:500;font-size:12.5px}
.tbl td{font-variant-numeric:tabular-nums}
.tbl tbody tr:hover{background:rgba(255,255,255,.03)}
.empty{color:var(--muted);padding:26px 0 !important}

/* ---------- tool teaser ---------- */
.tool-teaser{display:flex;flex-wrap:wrap;gap:9px;margin-top:6px}
.tool-teaser a{padding:7px 14px;border:1px solid var(--line);border-radius:20px;background:rgba(255,255,255,.03);
  font-size:13px;color:#c3d0e6;text-decoration:none;transition:all .15s}
.tool-teaser a:hover{border-color:rgba(56,189,248,.55);background:rgba(56,189,248,.1);color:#fff;text-decoration:none;transform:translateY(-1px)}

/* ---------- ads ---------- */
.ad-slot{margin:18px auto;max-width:1040px;padding:0 18px}
.ad-slot:empty{display:none}
.ad-box{position:relative;display:block;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:rgba(255,255,255,.03)}
.ad-box img{display:block;width:100%;height:auto}
.ad-text{display:block;padding:14px 18px;text-align:center;color:var(--text);font-size:14.5px}
.ad-html{padding:6px}
.ad-tag{position:absolute;right:6px;bottom:6px;font-size:10px;color:rgba(255,255,255,.5);background:rgba(0,0,0,.45);padding:1px 6px;border-radius:4px;letter-spacing:1px}
#ad-top{margin-top:0;margin-bottom:0;padding-top:14px}

/* ---------- footer ---------- */
.site-footer{margin-top:40px;padding:26px 0 40px;border-top:1px solid var(--line);text-align:center;color:var(--muted);font-size:12.5px}
.site-footer p{margin:4px 0}
.icp{color:#5f7292}

@media (max-width:720px){
  .metrics{grid-template-columns:repeat(2,1fr)}
  .metric,.metric.big{grid-column:span 1}
  .panel{padding:20px 16px}
  .gauge-value{font-size:36px}
  .nav{gap:12px;font-size:13px}
  .brand p{display:none}
}
