:root{--bg-0: #07090d;--bg-1: #0f1218;--bg-2: #161a23;--bg-3: #1f2532;--line: #2a3142;--fg: #e7eaf2;--fg-dim: #9ba3b5;--accent: #ff5e8a;--accent-2: #6c7bff;--accent-3: #2ad6c0;--danger: #ff6464;--ok: #4ad27d;--shadow: 0 18px 40px rgba(0, 0, 0, .45);--radius: 18px;--radius-sm: 10px;--easing: cubic-bezier(.22, 1, .36, 1)}*{box-sizing:border-box}html,body{margin:0;padding:0;background:radial-gradient(1200px 800px at 80% -10%,rgba(108,123,255,.15),transparent 60%),radial-gradient(900px 600px at 0% 110%,rgba(255,94,138,.12),transparent 60%),var(--bg-0);color:var(--fg);font-family:Pretendard Variable,Pretendard,-apple-system,BlinkMacSystemFont,system-ui,sans-serif;font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased;min-height:100vh}#app{max-width:880px;margin:0 auto;padding:48px 20px 80px;display:flex;flex-direction:column;gap:24px}.hero{text-align:left;padding:8px 4px 4px}.badge{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.12em;padding:6px 10px;border:1px solid var(--line);border-radius:999px;color:var(--fg-dim);background:linear-gradient(180deg,#ffffff0a,#fff0)}.hero h1{margin:14px 0 8px;font-size:clamp(28px,4.4vw,40px);font-weight:800;line-height:1.18;letter-spacing:-.02em;background:linear-gradient(180deg,#fff,#c9d2eb);-webkit-background-clip:text;background-clip:text;color:transparent}.hero .lede{margin:0;color:var(--fg-dim);max-width:560px;font-size:15px}.card{background:linear-gradient(180deg,#ffffff08,#ffffff01),var(--bg-1);border:1px solid var(--line);border-radius:var(--radius);padding:22px;box-shadow:var(--shadow)}.uploader{display:flex;flex-direction:column;gap:16px}.dropzone{position:relative;display:flex;align-items:center;justify-content:center;min-height:180px;border:2px dashed var(--line);border-radius:var(--radius-sm);cursor:pointer;background:#ffffff04;transition:border-color .2s var(--easing),background .2s var(--easing),transform .2s var(--easing)}.dropzone:hover{border-color:var(--accent-2);background:#6c7bff0f}.dropzone.is-dragover{border-color:var(--accent);background:#ff5e8a14;transform:scale(1.005)}.dropzone.is-loaded{display:none}.dropzone-inner{text-align:center;padding:24px}.dropzone-icon{font-size:28px;font-weight:600;width:52px;height:52px;line-height:52px;margin:0 auto 12px;border-radius:50%;background:linear-gradient(135deg,var(--accent),var(--accent-2));color:#fff;box-shadow:0 6px 18px #ff5e8a73}.dropzone-title{font-weight:700;font-size:17px}.dropzone-sub{color:var(--fg-dim);margin-top:4px;font-size:13px}.preview{display:flex;align-items:center;gap:16px;padding:14px;background:var(--bg-2);border-radius:var(--radius-sm);border:1px solid var(--line)}.preview img{width:88px;height:88px;border-radius:12px;object-fit:cover;background:var(--bg-3);flex-shrink:0;box-shadow:0 4px 12px #0006}.mode-toggle{border:0;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.mode-legend{font-size:12px;color:var(--fg-dim);letter-spacing:.08em;text-transform:uppercase;font-weight:700;padding:0 0 4px}.mode-toggle label{display:block;cursor:pointer}.mode-toggle input[type=radio]{position:absolute;opacity:0;pointer-events:none}.mode-pill{display:flex;flex-direction:column;gap:2px;padding:12px 16px;border:1px solid var(--line);background:#ffffff05;border-radius:12px;transition:border-color .18s var(--easing),background .18s var(--easing),transform .18s var(--easing)}.mode-pill strong{font-size:14px;font-weight:700}.mode-pill em{font-style:normal;font-size:12px;color:var(--fg-dim)}.mode-toggle label:hover .mode-pill{border-color:#6c7bff66}.mode-toggle input[type=radio]:checked+.mode-pill{border-color:var(--accent);background:linear-gradient(135deg,#ff5e8a1f,#6c7bff1a);box-shadow:0 0 0 1px var(--accent) inset}.mode-toggle input[type=radio]:focus-visible+.mode-pill{outline:2px solid var(--accent-2);outline-offset:2px}.check-row{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--fg-dim);cursor:pointer;-webkit-user-select:none;user-select:none}.check-row input[type=checkbox]{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:18px;height:18px;border:1.5px solid var(--line);border-radius:5px;background:var(--bg-2);cursor:pointer;position:relative;transition:all .15s var(--easing)}.check-row input[type=checkbox]:checked{background:linear-gradient(135deg,var(--accent),var(--accent-2));border-color:transparent}.check-row input[type=checkbox]:checked:after{content:"✓";position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;font-weight:800}button{font:inherit;cursor:pointer;border:0;border-radius:999px;padding:12px 20px;font-weight:700;letter-spacing:-.01em;transition:transform .12s var(--easing),opacity .12s var(--easing),background .12s var(--easing),box-shadow .12s var(--easing)}button:active:not(:disabled){transform:scale(.98)}button:disabled{opacity:.45;cursor:not-allowed}button.primary{position:relative;color:#fff;background:linear-gradient(135deg,var(--accent),var(--accent-2));box-shadow:0 10px 24px #ff5e8a52;padding:14px 22px;font-size:15px;display:inline-flex;align-items:center;justify-content:center;gap:10px}button.primary:hover:not(:disabled){box-shadow:0 14px 32px #ff5e8a73}.btn-spinner{width:14px;height:14px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite;display:none}button.primary.is-loading .btn-label:after{content:" …"}button.primary.is-loading .btn-spinner{display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}button.ghost{background:#ffffff0f;color:var(--fg);padding:8px 14px;font-size:13px;border:1px solid var(--line)}button.ghost:hover:not(:disabled){background:#ffffff1f}.status .status-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;font-size:14px}.status #statusCount{color:var(--fg-dim);font-variant-numeric:tabular-nums;font-weight:600}progress{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:100%;height:8px;border:0;border-radius:999px;background:var(--bg-3);overflow:hidden}progress::-webkit-progress-bar{background:var(--bg-3);border-radius:999px}progress::-webkit-progress-value{background:linear-gradient(90deg,var(--accent-3),var(--accent-2),var(--accent));background-size:200% 100%;border-radius:999px;transition:width .25s var(--easing);animation:shimmer 1.6s linear infinite}progress::-moz-progress-bar{background:linear-gradient(90deg,var(--accent-3),var(--accent-2),var(--accent));border-radius:999px}@keyframes shimmer{0%{background-position:200% 0}to{background-position:0 0}}.results-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.results-head h2{margin:0;font-size:18px;font-weight:700}.grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}@media (max-width: 600px){.grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width: 380px){.grid{grid-template-columns:repeat(2,minmax(0,1fr))}}.tile{position:relative;background:var(--bg-2);border:1px solid var(--line);border-radius:14px;padding:8px 8px 6px;text-align:center;transition:transform .2s var(--easing),border-color .2s var(--easing)}.tile.is-pending{opacity:.45}.tile.is-done{animation:pop .35s var(--easing)}.tile.is-error{border-color:#ff646466}.tile-img{width:100%;aspect-ratio:1;border-radius:10px;object-fit:contain;display:block;background:var(--bg-3)}.tile-cap{margin-top:6px;font-size:12px;color:var(--fg-dim);font-weight:600;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.tile.is-done .tile-cap{color:var(--fg)}.tile-err{margin-top:4px;font-size:10px;color:var(--danger);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}@keyframes pop{0%{transform:scale(.92)}60%{transform:scale(1.04)}to{transform:scale(1)}}#error{margin:0;background:#ff646414;border:1px solid rgba(255,100,100,.3);color:#ffb1b1;padding:14px 16px;border-radius:var(--radius-sm);white-space:pre-wrap;font-size:13px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.foot{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--fg-dim);padding:12px 4px 0;border-top:1px solid var(--line)}@media (max-width: 480px){#app{padding:28px 14px 60px}.card{padding:18px}}
