:root{--mainColor: #5ca9dd;--textColor: #333;--textGrey: #555;--borderColor: #ddd;--headerBg: #f5f7f9;--hoverBg: #f5f7fa;--rowBorder: #e8e8e8;--successBg: #d4edda;--successText: #155724}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;color:var(--textColor);background:#fff}.app{max-width:1400px;margin:0 auto;padding:16px}.app-header h1{font-size:18px;font-weight:600;margin-bottom:16px;color:var(--mainColor)}.upload-section{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}@media(max-width:800px){.upload-section{grid-template-columns:1fr}}.file-upload{border:2px dashed var(--borderColor);border-radius:8px;padding:16px;text-align:center;cursor:pointer;transition:border-color .2s,background .2s;min-height:110px;display:flex;flex-direction:column;justify-content:center;gap:6px}.file-upload:hover{border-color:var(--mainColor);background:#f8fbfe}.file-upload.drag-over{border-color:var(--mainColor);background:#e8f4fd}.file-upload.has-file{border-color:#28a745;border-style:solid;background:#f0faf3}.file-upload.has-error{border-color:#dc3545}.file-input-hidden{display:none}.file-upload-label{font-weight:600;font-size:13px;color:var(--textGrey)}.file-info{display:flex;flex-direction:column;gap:2px}.file-name{font-size:12px;color:#28a745;font-weight:500;word-break:break-all}.file-rows{font-size:11px;color:#888}.file-hint{font-size:11px;color:#aaa}.file-drop-text{font-size:12px;color:#bbb;margin-top:4px}.file-error{font-size:12px;color:#dc3545}.actions{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}.btn-primary{height:36px;padding:6px 24px;border:none;border-radius:4px;background:var(--mainColor);color:#fff;font-size:14px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}.btn-primary:hover:not(:disabled){background:#4a96c8}.btn-primary:disabled{opacity:.5;cursor:default}.btn-download{background:#28a745}.btn-download:hover:not(:disabled){background:#218838}.btn-secondary{height:36px;padding:6px 16px;border:1px solid var(--borderColor);border-radius:4px;background:#fff;color:var(--textColor);font-size:14px;cursor:pointer}.btn-secondary:hover{background:var(--headerBg)}.btn-spinner{width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .6s linear infinite}.toast{position:fixed;top:12px;right:12px;padding:8px 16px;border-radius:4px;font-size:13px;z-index:1000;box-shadow:0 2px 8px #00000026;animation:toast-in .2s ease-out}.toast.success{background:var(--successBg);color:var(--successText);border:1px solid #c3e6cb}.toast.error{background:#f8d7da;color:#721c24;border:1px solid #f5c6cb}@keyframes toast-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.result-section{margin-top:8px}.result-count{font-size:13px;color:#888;margin-bottom:8px}.table-scroll{overflow-x:auto}.result-table{width:100%;border-collapse:collapse;font-size:12px}.result-table th,.result-table td{padding:7px 8px;text-align:left;border-bottom:1px solid var(--rowBorder);white-space:nowrap}.result-table thead th{background:var(--headerBg);font-weight:600;font-size:11px;color:var(--textGrey);border-bottom:2px solid var(--borderColor);-webkit-user-select:none;user-select:none;position:sticky;top:0}.result-table th.sortable{cursor:pointer}.result-table th.sortable:hover{background:#ebeef1}.sort-arrow{font-size:9px;margin-left:3px;color:#aaa}.result-table tbody tr:hover{background:var(--hoverBg)}.col-num{text-align:right;font-variant-numeric:tabular-nums}@keyframes spin{to{transform:rotate(360deg)}}
