*{box-sizing:border-box}body{font-family:Arial,Helvetica,sans-serif;margin:0;background:#f2f3f5;color:#111}header,footer{padding:18px 22px;background:#111827;color:white}header h1{margin:0 0 6px}header p,footer p{margin:0;color:#d1d5db}main{max-width:1100px;margin:18px auto;padding:0 12px}.card{background:white;border-radius:14px;padding:16px;margin:14px 0;box-shadow:0 2px 12px rgba(0,0,0,.08)}h2{margin-top:0}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px}label{display:block;font-weight:600}input,select,textarea{width:100%;margin-top:6px;padding:10px;border:1px solid #cfd4dc;border-radius:10px;font-size:15px}textarea{font-family:Consolas,monospace}.buttons{display:flex;flex-wrap:wrap;gap:10px;margin:12px 0}button,.fileBtn{border:0;border-radius:10px;background:#1f6feb;color:white;padding:10px 14px;font-weight:700;cursor:pointer}button:disabled{background:#9ca3af;cursor:not-allowed}.fileBtn input{display:none}.targetBtn{background:#374151}.targetBtn.active{background:#f59e0b}#video{display:none;max-width:100%;border-radius:12px;background:#111}.canvasWrap{width:100%;overflow:auto;border:1px solid #ddd;border-radius:12px;background:#111}canvas{max-width:100%;height:auto;display:block}.hint{font-size:13px;color:#555}.results table{border-collapse:collapse;width:100%;margin:10px 0}.results th,.results td{border-bottom:1px solid #ddd;padding:7px;text-align:left}.ok{color:#0a7d32;font-weight:700}.warn{color:#b45309;font-weight:700}.bad{color:#b91c1c;font-weight:700}code{background:#eee;padding:2px 5px;border-radius:5px}