:root{--primary-color:#c62828;font-family:Inter,Segoe UI,Arial,sans-serif;color:#172033;background:#f5f7fa}*{box-sizing:border-box}body{margin:0;min-height:100vh}.test-page{width:min(760px,calc(100% - 32px));margin:0 auto;padding:42px 0 28px;text-align:center}.brand{font-weight:800;letter-spacing:.22em;color:var(--primary-color);margin-bottom:24px}.brand-logo{height:64px;display:flex;align-items:center;justify-content:center}.brand-logo img{display:block;max-width:min(280px,70vw);max-height:64px;width:auto;height:auto;object-fit:contain}h1{font-size:clamp(26px,4.2vw,36px);margin:0 0 14px}.intro{max-width:650px;margin:0 auto 28px;color:#5b6576;line-height:1.55}.test-card{background:#fff;border:1px solid #e4e8ee;border-radius:22px;padding:30px;box-shadow:0 12px 40px rgba(28,47,75,.08)}.status{font-size:17px;font-weight:650}.live{display:flex;justify-content:center;align-items:baseline;gap:8px;margin:24px 0 18px}.live span{font-size:clamp(58px,14vw,98px);font-weight:300;letter-spacing:-.06em;transition:color .25s ease}.live.phase-download span{color:var(--primary-color)}.live.phase-upload span{color:#2563eb}.live.phase-finished span{color:#172033}.live small{color:#697386;font-size:18px}.start-button,button{border:0;border-radius:999px;background:var(--primary-color);color:#fff;font-weight:750;letter-spacing:.04em;padding:17px 30px;cursor:pointer;font-size:15px}.start-button:disabled{opacity:.65;cursor:wait}.phase{margin-top:17px;color:#738095}.results{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;border-top:1px solid #edf0f4;margin-top:28px;padding-top:24px}.results div{display:grid;gap:5px}.results span{font-size:13px;color:#657084}.results strong{font-size:25px}.results small{color:#8b94a4}.results.phase-download #download,.results.phase-download #ping,.results.phase-download #jitter{color:var(--primary-color)}.results.phase-upload #upload,.results.phase-upload #ping,.results.phase-upload #jitter{color:#2563eb}.results.phase-finished strong{color:#172033}.test-id{font-size:13px;color:#7b8493;margin-top:20px}.consent{display:flex;text-align:left;gap:12px;margin:22px auto 0;max-width:680px;color:#596477;font-size:13px;line-height:1.5}.consent input{margin-top:3px;flex:0 0 auto}.consent a{color:var(--primary-color)}.footnote{font-size:12px;color:#8b94a4;margin-top:18px}.admin-body{background:#f4f6f9}.admin-login{max-width:430px;margin:10vh auto;background:#fff;padding:30px;border-radius:15px;box-shadow:0 10px 35px #0001}.admin-login input{width:100%;padding:13px;border:1px solid #ccd3dc;border-radius:9px;margin:10px 0 16px}.error{background:#fff1f1;color:#a61b1b;padding:10px;border-radius:8px}.admin-wrap{padding:22px}.admin-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.admin-head h1{font-size:28px;margin:0}.admin-head p{margin:4px 0;color:#657084}.table-wrap{overflow:auto;background:#fff;border-radius:12px;border:1px solid #e0e5eb}table{border-collapse:collapse;width:100%;min-width:1050px}th,td{text-align:left;padding:12px;border-bottom:1px solid #edf0f3;white-space:nowrap;font-size:13px}th{background:#f8f9fb;color:#596477}code{font-size:12px}.delete{color:#b12828}@media(max-width:650px){.test-page{padding-top:24px}.test-card{padding:22px 16px}.results{grid-template-columns:repeat(2,1fr);row-gap:20px}}
.compact .test-page{padding-top:20px;padding-bottom:16px}.compact .brand{margin-bottom:14px}.compact .brand-logo{height:52px}.compact .brand-logo img{max-height:52px}.compact h1{font-size:clamp(24px,3.6vw,34px);margin-bottom:8px}.compact .intro{margin-bottom:18px;line-height:1.4}.compact .test-card{padding:22px 28px;border-radius:18px}.compact .live{margin:14px 0 12px}.compact .live span{font-size:clamp(52px,11vw,78px)}.compact .start-button{padding:14px 27px}.compact .phase{margin-top:12px}.compact .results{margin-top:18px;padding-top:17px}.compact .test-id{margin-top:13px}.compact .consent{margin-top:14px}.compact .footnote{margin-top:10px;margin-bottom:0}@media(max-height:800px) and (min-width:651px){body:not(.compact) .test-page{padding-top:24px;padding-bottom:18px}body:not(.compact) .brand{margin-bottom:16px}body:not(.compact) .intro{margin-bottom:20px}body:not(.compact) .test-card{padding:24px}body:not(.compact) .live{margin:16px 0 14px}}
.transfer-visual{max-width:470px;margin:2px auto 18px;opacity:.72;transition:opacity .2s ease}.transfer-icons{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:8px;color:#a2acba}.endpoint{width:30px;height:30px;display:grid;place-items:center;border:1px solid #d9dfe7;border-radius:50%;background:#fff;transition:color .25s,border-color .25s,transform .25s}.endpoint svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.route-dots{display:flex;gap:5px}.route-dots i{width:5px;height:5px;border-radius:50%;background:#cfd6df;opacity:.7}.progress-track{height:8px;border-radius:999px;background:#edf1f5;overflow:hidden;position:relative}.progress-fill{position:absolute;top:0;bottom:0;left:0;width:0;border-radius:999px;transition:width .12s linear,background .2s ease}.transfer-visual.is-download{opacity:1}.transfer-visual.is-download .progress-fill{left:0;right:auto;background:var(--primary-color)}.transfer-visual.is-upload{opacity:1}.transfer-visual.is-upload .progress-fill{left:auto;right:0;background:#2563eb}.transfer-visual.is-download .endpoint-cloud,.transfer-visual.is-download .endpoint-device{color:var(--primary-color);border-color:color-mix(in srgb,var(--primary-color),white 60%)}.transfer-visual.is-upload .endpoint-cloud,.transfer-visual.is-upload .endpoint-device{color:#2563eb;border-color:#93b4f4}.transfer-visual.is-download .route-dots i{background:var(--primary-color);animation:routePulse 1s infinite}.transfer-visual.is-download .route-dots i:nth-child(2){animation-delay:.15s}.transfer-visual.is-download .route-dots i:nth-child(3){animation-delay:.3s}.transfer-visual.is-upload .route-dots{flex-direction:row-reverse}.transfer-visual.is-upload .route-dots i{background:#2563eb;animation:routePulse 1s infinite}.transfer-visual.is-upload .route-dots i:nth-child(2){animation-delay:.15s}.transfer-visual.is-upload .route-dots i:nth-child(3){animation-delay:.3s}.transfer-visual.is-finished{opacity:.45}.transfer-visual.is-finished .progress-fill{background:#b7c0cc}.transfer-visual.is-finished .endpoint{color:#7e8998}@keyframes routePulse{0%,100%{opacity:.28;transform:scale(.85)}45%{opacity:1;transform:scale(1.2)}}.compact .transfer-visual{margin-bottom:13px}.compact .transfer-icons{margin-bottom:6px}.compact .progress-track{height:7px}@media(max-width:650px){.transfer-visual{max-width:360px}.endpoint{width:28px;height:28px}}

.consent-text{display:block;text-align:center}.consent-text span{display:inline-block;max-width:760px}.consent-text input{display:none}
.result-actions{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:16px}.result-actions[hidden]{display:none}.secondary-button{background:#fff;color:var(--primary-color);border:1px solid color-mix(in srgb,var(--primary-color),white 55%);padding:11px 18px;font-size:13px}.result-actions a,.website-link a,.history-page a{color:var(--primary-color);text-decoration:none;font-weight:650}.website-link{margin:14px 0 0;font-size:14px}.site-footer{margin-top:18px;padding-top:14px;border-top:1px solid #e4e8ee;color:#8b94a4;font-size:12px}
.result-page,.history-page{width:min(850px,calc(100% - 32px));margin:0 auto;padding:48px 0}.shared-result{background:#fff;border:1px solid #e3e8ef;border-radius:20px;padding:32px;box-shadow:0 12px 40px rgba(28,47,75,.08);text-align:center}.shared-result h1{font-size:34px;margin-bottom:6px}.shared-result>p{color:#788395}.shared-bars{margin:30px auto;max-width:640px;display:grid;gap:16px}.shared-bars div{position:relative;height:48px;background:#edf1f5;border-radius:10px;overflow:hidden;text-align:left;padding:8px 14px;display:flex;align-items:center;justify-content:space-between}.shared-bars i{position:absolute;left:0;bottom:0;height:6px;background:var(--primary-color)}.shared-bars i.upload{background:#2563eb}.shared-bars span,.shared-bars strong{position:relative;z-index:1}.shared-meta{display:flex;justify-content:center;gap:28px;flex-wrap:wrap;color:#657084;margin-bottom:26px}.shared-meta span{display:grid;gap:5px}.shared-meta b{color:#172033}.button-link{display:inline-block;background:var(--primary-color);color:#fff;text-decoration:none;border-radius:999px;padding:14px 24px;font-weight:750}
.history-page header{display:flex;justify-content:space-between;align-items:center;margin-bottom:22px}.history-page header h1{font-size:32px;margin:0}.history-page header p{color:#657084;margin:6px 0}.history-list{display:grid;gap:10px}.history-list a{display:grid;grid-template-columns:1.4fr 1fr 1fr .7fr;gap:16px;align-items:center;background:#fff;border:1px solid #e2e7ed;border-radius:12px;padding:15px 18px;color:#172033}.history-list .down{color:var(--primary-color);font-weight:700}.history-list .up{color:#2563eb;font-weight:700}.empty-state{background:#fff;border:1px solid #e2e7ed;border-radius:14px;padding:28px;text-align:center;color:#657084}
@media(max-width:650px){.result-actions{flex-direction:column;gap:10px}.shared-result{padding:24px 16px}.shared-meta{gap:16px}.history-page header{align-items:flex-start}.history-list a{grid-template-columns:1fr 1fr}.history-list time{grid-column:1/-1}}

.qr-modal{position:fixed;inset:0;z-index:1000;background:rgba(23,32,51,.58);display:grid;place-items:center;padding:20px}.qr-modal[hidden]{display:none}.qr-dialog{position:relative;width:min(390px,100%);background:#fff;border-radius:20px;padding:28px;text-align:center;box-shadow:0 24px 70px rgba(0,0,0,.28)}.qr-dialog h2{font-size:24px;margin:0 0 8px}.qr-dialog p{margin:0 0 18px;color:#657084}.qr-close{position:absolute;right:12px;top:10px;width:38px;height:38px;padding:0;background:transparent;color:#657084;font-size:27px;font-weight:400}.qr-code{width:240px;min-height:240px;margin:0 auto 15px;padding:10px;background:#fff;border:1px solid #e1e6ed;border-radius:12px;display:grid;place-items:center}.qr-code img,.qr-code canvas{max-width:220px!important;height:auto!important}.qr-url{width:100%;border:1px solid #d8dee7;border-radius:9px;padding:10px 12px;margin:0 0 13px;color:#596477;background:#f8f9fb;font-size:12px}.qr-dialog .secondary-button{margin-top:0}@media(max-width:650px){.qr-dialog{padding:26px 18px}.qr-code{width:220px;min-height:220px}.qr-code img,.qr-code canvas{max-width:200px!important}}
.server-choice{display:flex;align-items:center;justify-content:center;gap:12px;margin:0 auto 18px;color:#596477;font-size:13px}.server-choice label{font-weight:650}.server-choice select{max-width:360px;border:1px solid #d8dee7;border-radius:10px;background:#fff;color:#172033;padding:9px 34px 9px 12px;font:inherit}.server-choice select:disabled{opacity:.65}.compact .server-choice{margin-bottom:12px}@media(max-width:650px){.server-choice{display:grid;gap:6px;text-align:left}.server-choice select{width:100%;max-width:none}}

.device-impact{margin:16px auto 0;max-width:620px;font-size:12px;line-height:1.45;color:#8b94a4}.device-impact.medium{color:#d97706}.device-impact.high{color:#c62828;font-weight:650}.device-impact.unknown{color:#8b94a4}.compact .device-impact{margin-top:12px}

.result-ip{font-size:13px;color:#7b8493;margin-top:14px}.compact .result-ip{margin-top:10px}.shared-ip-note{font-size:12px;color:#8b94a4;margin:-12px 0 24px}.history-list a{grid-template-columns:1.35fr .9fr .9fr .65fr 1.15fr}.history-ip{font-size:12px;color:#7b8493;word-break:break-all}@media(max-width:650px){.history-list a{grid-template-columns:1fr 1fr}.history-ip{grid-column:1/-1}}
