:root{--accent: #c14b1b;--ink: #38281a;--paper: #fdf8ee;--bg: #f3e9d7;--line: #e0d2b8;--line-soft: #eee1c9;--muted: #8a7460;--muted-2: #a08b74;--muted-3: #6f5b45;--green: #4f6b2f}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Bricolage Grotesque,system-ui,sans-serif;font-size:13.5px}button,input{font:inherit}a{color:var(--ink)}a:hover{color:var(--accent)}.mono{font-family:IBM Plex Mono,monospace}.hidden{display:none!important}.spacer{flex:1}.accent{color:var(--accent)}.shell{min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;gap:18px;padding:0 18px;height:58px;flex-wrap:wrap;border-bottom:1px solid var(--line);background:var(--paper)}.brand{display:flex;align-items:center;gap:10px}.brand-mark{color:var(--accent);font-size:17px;line-height:1}.wordmark{font-weight:700;letter-spacing:.8px;font-size:14.5px}.wordmark span{color:var(--muted);font-weight:500}.badges{display:flex;gap:6px;margin-left:6px}.badge{white-space:nowrap;font-family:IBM Plex Mono,monospace;font-size:9.5px;letter-spacing:.6px;color:var(--muted-3);border:1px solid #d8c7a8;border-radius:5px;padding:3px 6px}.badge-green{color:var(--green);border-color:#c3cba4;display:flex;align-items:center;gap:5px}.badge-green .dot{width:5px;height:5px;border-radius:50%;background:var(--green)}.menu{display:flex;gap:3px;background:#f1e5cd;border:1px solid var(--line);border-radius:9px;padding:3px;margin-left:8px}.menu-item{font:inherit;font-size:12px;font-weight:500;border:0;background:transparent;color:var(--muted-3);padding:5px 12px;border-radius:7px;cursor:pointer;white-space:nowrap}.menu-item:hover:not(.active){color:var(--ink)}.menu-item.active{background:var(--ink);color:var(--paper);font-weight:600}.steps{display:flex;align-items:center;gap:10px;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.step{display:flex;align-items:center;gap:7px;flex:0 0 auto}.step-num{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-family:IBM Plex Mono,monospace;font-size:10px;border:1px solid #d8c7a8;color:var(--muted-2);background:transparent;flex:0 0 auto}.step-label{font-size:12px;white-space:nowrap;color:var(--muted-2)}.step-line{width:22px;height:1px;background:#d8c7a8;flex:0 0 auto}.step.active .step-num{border-color:transparent;color:#fff7ec;background:var(--accent)}.step.active .step-label{color:var(--ink)}.step.done .step-num{border-color:#c3cba4;color:var(--green);background:#f0f2df}.step.done .step-label{color:var(--muted)}.layout{flex:1;display:grid;grid-template-columns:minmax(0,1fr) 350px;gap:14px;padding:14px;min-height:0;align-items:start}@media(max-width:1000px){.layout{grid-template-columns:1fr}}.panel{background:var(--paper);border:1px solid var(--line);border-radius:14px}.canvas-panel{display:flex;flex-direction:column;min-width:0;overflow:hidden}.canvas-head{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line-soft);min-height:24px}.file-label{font-size:11px;color:#5c4a36;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dims-label{font-size:10.5px;color:var(--muted-2)}.empty-label{font-size:11px;color:var(--muted-2)}.canvas-body{flex:1;display:grid;place-items:center;padding:20px;min-height:420px;background-color:#f1e5cd;background-image:radial-gradient(#e2d1b2 1px,transparent 1px);background-size:22px 22px}.drop-card{border:1.5px dashed #c6ae87;border-radius:16px;padding:56px 48px;text-align:center;max-width:420px;background:#ffffff59}.drop-card.drag-over{border-color:var(--accent);background:#c14b1b0f}.drop-star{color:var(--accent);font-size:26px;margin-bottom:14px}.drop-title{font-size:17px;font-weight:600;margin-bottom:6px}.drop-sub{font-size:12.5px;color:var(--muted);line-height:1.55;margin-bottom:20px}.drop-actions{display:flex;gap:10px;justify-content:center}.stage{position:relative;max-width:100%;line-height:0;box-shadow:0 14px 40px #3b281a47;border-radius:4px;overflow:hidden}.stage img#baseImg{display:block;max-width:100%;max-height:calc(100vh - 270px);width:auto;height:auto}.compare-img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.tag{position:absolute;top:10px;font-family:IBM Plex Mono,monospace;font-size:9.5px;letter-spacing:1px;background:#2b2115c7;padding:4px 8px;border-radius:5px}.tag-left{left:10px;color:#f3e9d7}.tag-right{right:10px;color:#cfe3a8}.compare-line{position:absolute;top:0;bottom:0;width:2px;background:#fff;transform:translate(-1px)}.compare-handle{position:absolute;top:50%;transform:translate(-50%,-50%);width:28px;height:28px;border-radius:50%;background:#fff;color:var(--ink);display:grid;place-items:center;font-size:11px;font-weight:700;line-height:1}#boxLayer .det-box{position:absolute;box-sizing:border-box}#boxLayer .det-box .det-tag{position:absolute;left:0;top:0;font-family:IBM Plex Mono,monospace;font-size:9.5px;padding:2px 6px;border-radius:0 0 4px;white-space:nowrap;color:#fff7ec;line-height:1.4}.drag-rect{position:absolute;border:2px dashed #966a11;background:#966a1124;box-sizing:border-box}.overlay{position:absolute;top:0;right:0;bottom:0;left:0;touch-action:none}.overlay.draw{cursor:crosshair}.overlay.compare{cursor:ew-resize}.canvas-foot{display:flex;align-items:center;gap:10px;padding:10px 14px;border-top:1px solid var(--line-soft);min-height:22px}.status-text{font-size:11px;color:#7a6450;line-height:1.5}@keyframes spin{to{transform:rotate(360deg)}}.spinner{width:12px;height:12px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;flex:0 0 auto}.log-panel{border-top:1px solid var(--line-soft);background:#2b2115;padding:10px 14px;max-height:130px;overflow:auto;font-size:10.5px;line-height:1.75;color:#d9a45c}.log-panel div{white-space:pre-wrap;word-break:break-all}.sidebar{display:flex;flex-direction:column;gap:12px;min-width:0}.side-section{padding:15px 16px}.side-title{font-size:10.5px;letter-spacing:1.6px;color:#96805f;font-weight:600;margin-bottom:12px}.side-title.inline{margin-bottom:0}.side-head{display:flex;align-items:center;gap:8px;margin-bottom:12px}.hint{font-size:12.5px;color:var(--muted);line-height:1.55}.micro-hint{font-size:10.5px;color:var(--muted-2);margin-top:8px;line-height:1.5}.source-info{display:flex;align-items:center;gap:10px}.source-meta{min-width:0;flex:1}.source-name{font-size:11.5px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.source-dims{font-size:10.5px;color:var(--muted-2);margin-top:3px}.th-row{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:7px}.th-row span:first-child{font-size:12.5px;color:#5c4a36}#thresholdValue{font-size:12px}input[type=range]{width:100%;accent-color:var(--accent);margin:0;display:block}.check{display:flex;gap:9px;align-items:center;margin:14px 0;cursor:pointer;font-size:12.5px;color:#5c4a36}.check input{accent-color:var(--accent);width:15px;height:15px;margin:0}.count-chip{font-family:IBM Plex Mono,monospace;font-size:10px;color:var(--paper);background:#8a6f4d;border-radius:9px;padding:2px 8px}.det-list{display:grid;gap:7px}.det-row{display:grid;grid-template-columns:auto 42px 1fr auto;gap:10px;align-items:center;padding:8px 9px;border:1px solid #e6d9c0;border-radius:10px;background:#f8f1e2;cursor:pointer}.det-row:hover{border-color:#cdbb98}.det-row.off{opacity:.5}.det-row input{accent-color:var(--accent);width:15px;height:15px;margin:0}.det-thumb{width:42px;height:42px;border-radius:6px;border:1px solid #d8c7a8;display:block;object-fit:cover}.det-name{font-weight:600;font-size:12.5px;text-transform:capitalize}.det-name-row{display:flex;gap:6px;align-items:center;min-width:0}.manual-chip{font-family:IBM Plex Mono,monospace;font-size:9px;letter-spacing:.5px;color:#966a11;border:1px solid #d9bf85;border-radius:4px;padding:1px 5px}.det-coords{font-family:IBM Plex Mono,monospace;font-size:10px;color:var(--muted-2);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.det-score{font-family:IBM Plex Mono,monospace;font-size:11px;color:#5c4a36;text-align:right}.det-bar{width:50px;height:3px;background:#e6d9c0;border-radius:2px;margin-top:5px}.det-bar>div{height:100%;background:var(--accent);border-radius:2px}.graph{font-size:10px;line-height:1.7;color:#d9a45c;background:#2b2115;border-radius:8px;padding:9px 11px;margin-bottom:12px;white-space:pre-wrap;word-break:break-all}.primary-btn{display:inline-block;font-weight:600;font-size:12.5px;border:0;border-radius:9px;padding:9px 16px;cursor:pointer;text-align:center;white-space:nowrap}.primary-btn.dark{background:var(--ink);color:var(--paper)}.primary-btn.dark:hover:not(:disabled){background:#4b3624}.primary-btn.accent{background:var(--accent);color:#fff7ec}.primary-btn.full{width:100%;font-size:13px;padding:11px 14px}.primary-btn:disabled{opacity:.4;cursor:default}.ghost-btn{display:inline-block;white-space:nowrap;font-size:11.5px;cursor:pointer;border-radius:7px;padding:5px 10px;border:1px solid #d8c7a8;color:var(--muted-3);background:transparent;text-align:center}.ghost-btn:hover{color:var(--ink);border-color:#bda67e}.ghost-btn.boxed{font-size:12.5px;border-color:#c6ae87;border-radius:9px;padding:9px 16px}.ghost-btn.boxed:hover{border-color:#a58b5f}.ghost-btn.dashed{border-style:dashed;border-color:#c6ae87}.ghost-btn.dashed.on{border-color:#966a11;color:#966a11;background:#966a111a}.ghost-btn.full{width:100%;font-size:12px;padding:8px 14px}.done-actions{display:grid;gap:8px;margin-top:12px}.download-btn{display:block;text-align:center;text-decoration:none;font-weight:600;font-size:13px;border:1px solid #97a86e;color:var(--green);border-radius:9px;padding:10px 14px}.download-btn:hover{border-color:var(--green);background:#f0f2df;color:var(--green)}@media(max-width:720px){.topbar{height:auto;padding:10px 14px;row-gap:8px}.topbar .spacer{display:none}.brand{flex-wrap:wrap;row-gap:6px}.menu{margin-left:0}.menu-item{padding:5px 10px;font-size:11.5px}.badges{flex-wrap:wrap;margin-left:0}.steps{width:100%;gap:8px}.step-line{width:12px}.step-label{font-size:11px}.step-num{width:20px;height:20px}.layout{padding:10px;gap:10px}.canvas-head{flex-wrap:wrap;row-gap:6px}.canvas-body{min-height:300px;padding:12px}.drop-card{padding:32px 18px}.drop-actions{flex-wrap:wrap}.stage img#baseImg{max-height:62vh}.side-section{padding:13px 14px}.log-panel{max-height:100px}.compare-handle{width:34px;height:34px;font-size:13px}}@media(max-width:380px){.badge{font-size:8.5px;padding:2px 5px}.drop-card{padding:24px 12px}.drop-title{font-size:15px}}
