:root{color-scheme:light;font-family:Inter,system-ui,Segoe UI,Arial,sans-serif;background:#f5f6f9;color:#181922}*{box-sizing:border-box}body{margin:0}main{max-width:1080px;margin:50px auto;padding:0 20px}header{margin-bottom:26px}h1{font-size:30px;margin:0 0 5px}header p,small,footer{color:#66717e}h2{font-size:17px;margin:0 0 14px}.panel{background:white;border:1px solid #e0e4eb;border-radius:14px;padding:22px;margin-bottom:16px;box-shadow:0 2px 10px #1b29420b}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.stats strong{display:block;font-size:28px;margin-top:10px}.stats label{font-size:13px;color:#65707e}input,select,button{font:inherit;border-radius:8px;padding:11px;border:1px solid #cbd1da}button{cursor:pointer;background:#192a44;color:white;border-color:#192a44}button:hover{background:#2a4161}input{min-width:170px}form,.line{display:flex;gap:10px;flex-wrap:wrap;margin:10px 0}form input[type=url]{flex:2}.listrow{display:flex;align-items:center;justify-content:space-between;padding:12px 0;gap:12px;border-bottom:1px solid #edf0f3;word-break:break-word}.listrow button{font-size:12px;white-space:nowrap}.error{color:#ad243a}.ok{color:#267444}#notice{position:sticky;bottom:12px;background:white;padding:12px;border-radius:8px}footer{padding:18px;text-align:center;font-size:12px}@media(max-width:720px){.stats{grid-template-columns:repeat(2,1fr)}form{flex-direction:column}}
/* Accessible in-flight feedback: no second click until verification ends. */
.field{display:flex;flex:1;flex-direction:column;gap:6px;min-width:220px}
.field span{font-size:13px;font-weight:600;color:#49576a}
.field select,.field input{width:100%;min-width:0}
button:disabled{cursor:not-allowed;opacity:.6;background:#50627a;border-color:#50627a}
.upload-state{display:flex;align-items:center;gap:10px;margin:12px 0 8px;padding:12px 14px;background:#eef3fb;border-radius:9px;color:#203c65;font-weight:500}
.upload-state[hidden]{display:none}
.spinner{width:17px;height:17px;flex-shrink:0;border:2px solid #a2b8d2;border-top-color:#203c65;border-radius:50%;animation:spin .85s linear infinite}
.upload-state.done{background:#eaf7ef;color:#185a30}
.upload-state.done .spinner{display:none}
.upload-state.error{background:#fff0f1;color:#9a2032}
.upload-state.error .spinner{display:none}
@keyframes spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.spinner{animation:none}}
