:root{color-scheme:dark;--bg:#070b14;--panel:#0f1626;--line:#22304f;--text:#e8edf7;--blue:#4f8cff;--purple:#b794f6}*{box-sizing:border-box}body{margin:0;min-height:100vh;min-height:100svh;display:flex;flex-direction:column;color:var(--text);font-family:-apple-system,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;background-color:var(--bg);background-image:radial-gradient(900px 600px at 18% 8%,#4f8cff38,transparent 60%),radial-gradient(800px 600px at 88% 96%,#b794f633,transparent 60%),linear-gradient(#78a0ff0d 1px,transparent 1px),linear-gradient(90deg,#78a0ff0d 1px,transparent 1px);background-size:100% 100%,100% 100%,42px 42px,42px 42px;background-attachment:fixed}body:before{content:"";position:fixed;inset:-20%;pointer-events:none;background:radial-gradient(420px 420px at 30% 30%,#4f8cff19,transparent 70%),radial-gradient(380px 380px at 70% 70%,#b794f619,transparent 70%);animation:drift 18s ease-in-out infinite alternate}body:after{content:"";position:fixed;inset:-40% 0 auto;height:40%;pointer-events:none;background:linear-gradient(transparent,#4f8cff0f 45%,#b794f619 50%,transparent);animation:scan 7s linear infinite}main{position:relative;z-index:1;width:100%;max-width:760px;padding:28px 18px 64px;margin:auto}.category h1{margin:0 0 16px;text-align:center;font-size:21px;font-weight:600;letter-spacing:2px}.category h1:after{content:"";display:block;width:46px;height:3px;margin:8px auto 0;border-radius:3px;background:linear-gradient(90deg,var(--blue),var(--purple));box-shadow:0 0 12px #4f8cff99;animation:glow 2.4s ease-in-out infinite}.cat-sub{margin:-4px 0 14px;text-align:center;font-size:18px;font-weight:700;letter-spacing:1px;color:#ff5c5c;animation:shake .5s ease-in-out infinite}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.card{position:relative;display:flex;align-items:center;justify-content:center;gap:9px;min-width:0;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:var(--panel);text-decoration:none;color:var(--text);overflow:hidden;transition:background .18s,border-color .18s,box-shadow .18s;animation:enter .5s ease both}.card:hover{background:#16203a;border-color:var(--blue);box-shadow:0 0 18px #4f8cff47}.card:focus-visible{outline:2px solid #b794f6;outline-offset:3px}.fav-letter{display:flex;align-items:center;justify-content:center;flex:0 0 28px;width:28px;height:28px;border-radius:7px;background:#16203a;color:var(--blue);font-weight:700}.meta{display:flex;flex-direction:column;align-items:center;min-width:0;max-width:100%}.title{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.speed{position:absolute;top:6px;right:6px;width:5px;height:5px;border-radius:50%;background:#8b97b359}.speed.good{background:#36d3998c;box-shadow:0 0 4px #36d39947}.speed.backup{background:#f872728c;box-shadow:0 0 4px #f8727247}.speed.bad{opacity:0}.speed.probing{animation:dot 1.2s ease-in-out infinite}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.toast{position:fixed;z-index:5;bottom:28px;left:50%;transform:translateX(-50%);width:max-content;max-width:calc(100% - 32px);border:1px solid var(--line);border-radius:9px;background:#16203a;padding:12px 18px;font-size:13px;text-align:center;box-shadow:0 8px 30px #0006}[hidden]{display:none!important}@keyframes drift{to{transform:translate(2%,2%) scale(1.06)}}@keyframes scan{to{transform:translateY(350%)}}@keyframes glow{50%{box-shadow:0 0 16px #4f8cffcc}}@keyframes shake{25%{transform:translateX(-2px)}50%{transform:translateX(2px)}75%{transform:translateX(-1px)}}@keyframes enter{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes dot{50%{opacity:.25}}@media(max-width:768px){main{padding:22px 14px 52px}.category h1{font-size:19px}.cat-sub{font-size:16px;margin:-2px 0 12px}.grid{gap:8px}.card{padding:10px 8px;gap:7px}.fav-letter{flex-basis:26px;width:26px;height:26px}.title{font-size:12px}}@media(prefers-reduced-motion:reduce){body:before,body:after,.category h1:after,.cat-sub,.card,.speed{animation:none!important}.card{transition:none}}
