:root{--bg: #0c1222;--surface: #131b2e;--surface-elevated: #1a2438;--border: #2a3754;--text: #e8edf7;--text-muted: #8b9ab8;--accent: #3b82f6;--accent-hover: #2563eb;--success: #22c55e;--warning: #eab308;--danger: #ef4444;--radius: 12px;--font: "Be Vietnam Pro", system-ui, sans-serif}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:var(--font);background:radial-gradient(ellipse 120% 80% at 50% -20%,#1e3a5f 0%,var(--bg) 55%);color:var(--text);line-height:1.5}#root{min-height:100vh}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;cursor:pointer}input,select{font-family:inherit}.app-shell{max-width:1040px;margin:0 auto;padding:2rem 1.25rem 4rem}.app-header{margin-bottom:2rem}.app-header h1{margin:0 0 .35rem;font-size:1.75rem;font-weight:700;letter-spacing:-.02em}.app-header p{margin:0;color:var(--text-muted);font-size:.95rem}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem 1.35rem;margin-bottom:1.25rem;box-shadow:0 8px 32px #00000040}.card h2{margin:0 0 1rem;font-size:1.05rem;font-weight:600;color:var(--text)}.form-row{display:flex;flex-direction:column;gap:.35rem;margin-bottom:1rem}.form-row label{font-size:.85rem;font-weight:500;color:var(--text-muted)}.form-row input[type=text],.form-row input[type=file],.form-row textarea{padding:.6rem .75rem;border-radius:8px;border:1px solid var(--border);background:var(--surface-elevated);color:var(--text);font-size:.95rem}.form-row textarea{min-height:4.5rem;resize:vertical;line-height:1.45}.tab-bar{display:flex;flex-wrap:wrap;gap:0;margin-bottom:1.5rem;background:var(--surface-elevated);padding:4px;border-radius:10px;border:1px solid var(--border);width:fit-content;max-width:100%}.tab-bar .tab{border:none;background:transparent;color:var(--text-muted);padding:.55rem 1.1rem;border-radius:8px;font-weight:600;font-size:.9rem}.tab-bar .tab:hover:not(:disabled){color:var(--text)}.tab-bar .tab.tab-active{background:var(--surface);color:var(--text);box-shadow:0 1px 4px #00000038}.form-row input[type=file]{padding:.5rem}.form-row .checkbox-label{display:flex;flex-direction:row;align-items:flex-start;gap:.65rem;font-size:.9rem;font-weight:400;color:var(--text);cursor:pointer}.form-row .checkbox-label input[type=checkbox]{margin-top:.2rem;flex-shrink:0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.65rem 1.25rem;border-radius:8px;border:none;font-size:.95rem;font-weight:600;transition:background .15s,transform .1s}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){background:var(--accent-hover)}.btn-secondary{background:var(--surface-elevated);color:var(--text);border:1px solid var(--border)}.btn-secondary:hover:not(:disabled){background:#243049}.btn-ghost{background:transparent;color:var(--accent);padding:.35rem .65rem}.status-line{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1.25rem;margin-bottom:1rem}.badge{display:inline-block;padding:.25rem .65rem;border-radius:999px;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.badge-pending{background:#eab30833;color:#facc15}.badge-processing{background:#3b82f633;color:#93c5fd}.badge-done{background:#22c55e33;color:#86efac}.badge-failed{background:#ef444433;color:#fca5a5}.progress-meta{font-size:.9rem;color:var(--text-muted)}.progress-meta strong{color:var(--text);font-weight:600}.bar{height:8px;background:var(--surface-elevated);border-radius:999px;overflow:hidden;margin-top:.5rem}.bar-fill{height:100%;background:linear-gradient(90deg,var(--accent),#60a5fa);border-radius:999px;transition:width .45s ease-out}.batch-progress-block{margin-top:.25rem}.progress-pct-line{margin-top:.45rem;text-align:center;font-size:.9rem;line-height:1.45}.progress-pct-value{font-size:1.2rem;font-weight:700;color:var(--accent);font-variant-numeric:tabular-nums}.table-wrap{overflow-x:auto;margin:0 -.35rem}table.data{width:100%;border-collapse:collapse;font-size:.85rem}table.data th,table.data td{padding:.6rem .65rem;text-align:left;border-bottom:1px solid var(--border);vertical-align:top}table.data th{color:var(--text-muted);font-weight:600;white-space:nowrap}table.data tr:hover td{background:#ffffff05}.pager{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-top:1rem;flex-wrap:wrap}.pager span{font-size:.85rem;color:var(--text-muted)}.alert{padding:.75rem 1rem;border-radius:8px;font-size:.9rem;margin-bottom:1rem}.alert-error{background:#ef44441f;border:1px solid rgba(239,68,68,.35);color:#fecaca}.alert-info{background:#3b82f61a;border:1px solid rgba(59,130,246,.3);color:#bfdbfe}.mono{font-family:ui-monospace,Cascadia Code,monospace;font-size:.8rem;word-break:break-all}.inline-actions{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.lookup-row{display:flex;flex-wrap:wrap;gap:.5rem;align-items:flex-end;margin-bottom:1rem}.lookup-row input{flex:1;min-width:200px;padding:.6rem .75rem;border-radius:8px;border:1px solid var(--border);background:var(--surface-elevated);color:var(--text)}.ocr-preview-wrap{margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--border)}.ocr-preview-img{max-width:100%;max-height:280px;object-fit:contain;border-radius:8px;border:1px solid var(--border);background:var(--surface-elevated)}.ocr-result{margin:0;padding:0}.ocr-result .ocr-row{display:grid;grid-template-columns:minmax(140px,180px) 1fr;gap:.35rem 1rem;align-items:start;padding:.65rem 0;border-bottom:1px solid var(--border)}.ocr-result .ocr-row:last-child{border-bottom:none}.ocr-result dt{margin:0;font-size:.82rem;font-weight:600;color:var(--text-muted)}.ocr-result dd{margin:0;font-size:.95rem;color:var(--text);word-break:break-word;line-height:1.45;display:flex;align-items:flex-start;gap:.45rem}.copy-btn{border:1px solid var(--border);background:var(--surface-elevated);color:var(--text);border-radius:6px;font-size:.85rem;line-height:1;padding:.25rem .4rem}.copy-btn:hover{background:#243049}.copy-btn.copied{border-color:#22c55e8c;color:#86efac}.copy-check{color:#22c55e;font-weight:700;line-height:1;margin-top:.2rem}.cccd-compare-wrap{display:grid;gap:.35rem}.cccd-code{letter-spacing:.02em}.cccd-diff{color:#ef4444;font-weight:700;background:#ef444429;border-radius:3px;padding:0 1px}
