:root{--ink:#17201d;--muted:#6f7a75;--paper:#f4f3ed;--panel:#fbfaf6;--line:#d9dbd3;--accent:#ef6c48;--accent-dark:#d85534;--green:#159b69;--blue:#3478f6;--yellow:#e3b51a;--shadow:0 18px 50px rgba(27,40,34,.08)}
.roi-box{border:1px dashed #7d4deb;background:rgba(125,77,235,.12)}
.predicted-box{border:1px dashed #c026d3;background:rgba(192,38,211,.13)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:"Noto Sans KR",sans-serif}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.required{color:var(--accent)}.topbar{height:70px;padding:0 max(28px,calc((100vw - 1440px)/2));display:flex;align-items:center;border-bottom:1px solid var(--line);background:rgba(244,243,237,.9);backdrop-filter:blur(16px);position:sticky;top:0;z-index:20}.brand{display:flex;gap:11px;align-items:center;color:var(--ink);text-decoration:none;font-weight:700;font-size:20px}.brand-mark{width:27px;height:27px;border:2px solid var(--ink);position:relative;display:grid;place-items:center}.brand-mark:after{content:"";width:8px;height:8px;background:var(--accent)}.brand-mark i{position:absolute;background:var(--ink)}.brand-mark i:nth-child(1),.brand-mark i:nth-child(2){width:7px;height:2px;left:-8px}.brand-mark i:nth-child(1){top:6px}.brand-mark i:nth-child(2){bottom:6px}.brand-mark i:nth-child(3),.brand-mark i:nth-child(4){height:7px;width:2px;right:5px}.brand-mark i:nth-child(3){top:-8px}.brand-mark i:nth-child(4){bottom:-8px}.tagline{margin-left:22px;padding-left:22px;border-left:1px solid var(--line);font:500 11px "DM Mono";letter-spacing:.14em;color:var(--muted)}button,input,select{font:inherit}.ghost-button{margin-left:auto;border:1px solid var(--line);background:transparent;padding:8px 14px;cursor:pointer;color:var(--muted)}button:focus-visible,input:focus-visible,select:focus-visible,.drop-zone:focus-within{outline:3px solid rgba(239,108,72,.25);outline-offset:2px}.app-shell{max-width:1440px;margin:auto;padding:48px 28px 70px}.hero{display:flex;justify-content:space-between;align-items:end;margin-bottom:38px}.eyebrow{font:500 11px "DM Mono";letter-spacing:.18em;color:var(--accent);margin:0 0 13px}.hero h1{font-size:clamp(34px,4vw,58px);line-height:1.08;letter-spacing:-.045em;margin:0}.hero h1 em{font-style:normal;color:var(--accent)}.hero-copy{max-width:440px;color:var(--muted);font-size:14px;line-height:1.8;margin:0 0 5px}.panel{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow)}.workspace-grid{display:grid;grid-template-columns:330px 1fr;gap:18px}.control-panel{padding:26px}.panel-heading{display:flex;align-items:center;gap:13px;margin-bottom:24px}.panel-heading h2{font-size:15px;margin:0 0 3px}.panel-heading p{font:400 10px "DM Mono";color:var(--muted);margin:0;letter-spacing:.04em}.step-number{width:34px;height:34px;display:grid;place-items:center;background:var(--ink);color:#fff;font:500 11px "DM Mono"}.drop-zone{height:175px;border:1px dashed #b6bbb3;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;transition:.2s;background:#f7f6f1}.drop-zone:hover,.drop-zone.dragover{border-color:var(--accent);background:#fff6f2}.upload-icon{width:40px;height:40px;border:1px solid var(--line);display:grid;place-items:center;font-size:22px;margin-bottom:13px;color:var(--accent)}.drop-zone strong{font-size:13px}.drop-zone>span:last-child{font-size:11px;color:var(--muted);margin-top:5px}.settings{display:grid;gap:13px;margin:23px 0}.settings label{display:grid;gap:6px;color:var(--muted);font-size:10px;font-weight:600}.settings input,.settings select{width:100%;border:1px solid var(--line);background:#fff;padding:9px 10px;color:var(--ink);font-size:12px;outline:none;border-radius:0}.settings input:focus,.settings select:focus{border-color:var(--accent)}.setting-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}.primary-button,.export-button{border:0;background:var(--accent);color:#fff;font-weight:600;cursor:pointer;transition:.2s}.primary-button{width:100%;height:47px;display:flex;align-items:center;justify-content:space-between;padding:0 17px}.primary-button:hover,.export-button:hover{background:var(--accent-dark)}button:disabled{cursor:not-allowed;opacity:.4}.progress-wrap{margin-top:17px}.progress-meta{display:flex;justify-content:space-between;font-size:10px;color:var(--muted)}.progress-meta strong{font-family:"DM Mono"}.progress-track{height:3px;background:var(--line);margin-top:8px}.progress-track i{display:block;width:0;height:100%;background:var(--accent);transition:width .2s}.preview-panel{min-width:0;display:flex;flex-direction:column}.preview-heading{padding:26px 27px 0;margin-bottom:18px}.legend{margin-left:auto;display:flex;gap:13px;flex-wrap:wrap;font-size:9px;color:var(--muted)}.legend span{display:flex;align-items:center;gap:5px}.legend i{width:13px;height:9px;display:inline-block}.pin-dot{background:#e94d48}.number-box{border:1px dashed var(--blue)}.name-box{border:1px dashed var(--green)}.pair-box{border:1px dashed var(--yellow)}.canvas-stage{height:544px;margin:0 27px;background:#e9e9e3;position:relative;display:grid;place-items:center;overflow:auto;background-image:linear-gradient(45deg,#e2e2dc 25%,transparent 25%),linear-gradient(-45deg,#e2e2dc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#e2e2dc 75%),linear-gradient(-45deg,transparent 75%,#e2e2dc 75%);background-size:18px 18px;background-position:0 0,0 9px,9px -9px,-9px 0}.canvas-stage canvas{display:none;max-width:100%;max-height:100%;object-fit:contain;background:#fff}.empty-state{text-align:center;color:var(--muted)}.empty-state strong{display:block;color:var(--ink);font-size:13px;margin:18px 0 7px}.empty-state p{font-size:11px;line-height:1.7;margin:0}.empty-chip{width:56px;height:66px;border:2px solid #aab1ab;margin:auto;position:relative;display:flex;flex-direction:column;justify-content:space-around}.empty-chip span{height:2px;width:13px;background:#aab1ab;margin-left:-13px;box-shadow:56px 0 #aab1ab}.status-strip{height:47px;border-top:1px solid var(--line);margin-top:20px;padding:0 27px;display:flex;align-items:center;gap:20px;font:400 10px "DM Mono";color:var(--muted)}.status-strip b{color:var(--ink)}#statusMessage{margin-left:auto}.results-panel{margin-top:18px;padding:26px 27px}.results-heading{margin-bottom:18px}.export-button{margin-left:auto;padding:11px 15px;font-size:11px}.export-button span{margin-left:18px}.table-wrap{overflow:auto;max-height:410px;border:1px solid var(--line)}table{width:100%;border-collapse:collapse;font-size:11px}th{text-align:left;background:#eeeee8;color:var(--muted);font:500 9px "DM Mono";letter-spacing:.08em;padding:10px 12px;position:sticky;top:0;z-index:1}td{padding:8px 12px;border-top:1px solid var(--line)}td input{width:100%;border:1px solid transparent;background:transparent;padding:5px 7px;font:500 11px "DM Mono"}td input:focus{outline:none;background:#fff;border-color:var(--accent)}.direction-badge{font:500 9px "DM Mono";padding:4px 7px;background:#eceee8}.confidence{font-family:"DM Mono"}.confidence.good{color:var(--green)}.confidence.warn{color:#d58b15}.delete-row{border:0;background:transparent;color:#9a9f9b;cursor:pointer;font-size:16px}.placeholder-row td{text-align:center;padding:34px;color:var(--muted)}dialog{width:min(500px,calc(100% - 32px));border:1px solid var(--line);padding:32px;background:var(--panel);box-shadow:0 24px 80px #17201d33}dialog::backdrop{background:#17201d99;backdrop-filter:blur(3px)}dialog h2{margin:0 0 20px}dialog ol{padding-left:20px;color:var(--muted);font-size:13px;line-height:2}.dialog-close{position:absolute;right:16px;top:13px;border:0;background:transparent;font-size:25px;cursor:pointer}.dialog-note{background:#f0efe9;padding:12px;font-size:10px;color:var(--muted)}
@media(max-width:900px){.hero{display:block}.hero-copy{margin-top:22px}.workspace-grid{grid-template-columns:1fr}.control-panel{display:grid;grid-template-columns:1fr 1fr;gap:18px}.control-panel>.panel-heading,.control-panel>.primary-button,.control-panel>.progress-wrap{grid-column:1/-1}.drop-zone{height:auto;min-height:190px}.canvas-stage{height:470px}.legend{display:none}}@media(max-width:600px){.app-shell{padding:32px 14px}.tagline{display:none}.control-panel{display:block}.control-panel>*{margin-bottom:18px}.preview-heading{padding:20px 18px 0}.canvas-stage{margin:0 18px;height:390px}.status-strip{padding:0 18px;gap:10px}.status-strip span:nth-child(1){display:none}.results-panel{padding:20px 18px}.hero h1{font-size:38px}}
.preview-toggle{margin-left:auto;display:flex;align-items:center;gap:7px;font-size:9px;color:var(--muted);cursor:pointer;white-space:nowrap}.preview-toggle[hidden]{display:none}.preview-toggle input{position:absolute;opacity:0;pointer-events:none}.preview-toggle i{width:31px;height:17px;border-radius:10px;background:#c8cbc5;position:relative;transition:.2s}.preview-toggle i:after{content:"";position:absolute;width:13px;height:13px;left:2px;top:2px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0003;transition:.2s}.preview-toggle input:checked+i{background:var(--accent)}.preview-toggle input:checked+i:after{transform:translateX(14px)}.preview-toggle input:focus-visible+i{outline:3px solid rgba(239,108,72,.25);outline-offset:2px}.preview-toggle:not([hidden])+.legend{margin-left:0}
.crop-edit-button{margin-left:auto;border:1px solid var(--line);background:#fff;padding:6px 9px;color:var(--muted);font-size:9px;cursor:pointer;white-space:nowrap}.crop-edit-button[hidden]{display:none}.crop-edit-button:not([hidden])~.preview-toggle{margin-left:0}.crop-edit-button:not([hidden])~.legend{margin-left:0}.canvas-stage.crop-selecting canvas{cursor:crosshair;touch-action:none}.selection-guide{position:absolute;left:50%;bottom:16px;transform:translateX(-50%);z-index:3;padding:7px 11px;background:rgba(13,24,31,.88);color:#fff;font-size:10px;pointer-events:none;white-space:nowrap}.selection-guide[hidden]{display:none}
.analysis-preview-row{display:flex;align-items:stretch;justify-content:space-between;gap:12px;margin:12px 27px 0;min-height:0;flex-wrap:wrap}.preprocess-dock{flex:1 1 340px;min-width:0;display:grid;grid-template-columns:minmax(140px,180px) 1fr;gap:12px;padding:10px;background:#f7f6f1;border:1px solid var(--line)}.preprocess-dock[hidden]{display:none}.preprocess-zoom-button{position:relative;border:1px solid #d9d9d2;background:#fff;padding:0;cursor:zoom-in;overflow:hidden}.preprocess-zoom-button canvas{display:block;width:100%;height:96px;background:#fff}.preprocess-zoom-button span{position:absolute;right:5px;bottom:5px;padding:3px 6px;background:rgba(13,24,31,.82);color:#fff;font-size:9px;opacity:0;transition:opacity .16s}.preprocess-zoom-button:hover span,.preprocess-zoom-button:focus-visible span{opacity:1}.preprocess-info{min-width:0;display:flex;flex-direction:column;justify-content:center;gap:5px;color:var(--muted);font:400 10px "DM Mono"}.preprocess-info strong{color:var(--ink);font:600 12px "Noto Sans KR"}.preprocess-info small{font:400 9px "DM Mono"}.pin-pattern-dock{width:min(310px,100%);display:grid;grid-template-columns:96px 1fr;gap:12px;padding:10px;background:#0d181f;border:2px solid var(--accent);color:#fff}.pin-pattern-dock[hidden]{display:none}.pin-pattern-dock canvas{display:block;width:96px;height:76px;background:#fff}.pin-pattern-info{min-width:0;display:flex;flex-direction:column;justify-content:center;gap:3px;font:400 10px "DM Mono"}.pin-pattern-info strong{font:600 12px "Noto Sans KR"}.pin-pattern-info span{color:#bfd7e5}.pin-pattern-info span:nth-child(2){color:#ffb39e;font-weight:600}.pin-pattern-info small{color:#91a4ae;font:400 9px "DM Mono"}
.preprocess-dialog{width:min(1100px,calc(100% - 32px));max-width:none;padding:20px}.preprocess-dialog-heading{display:flex;align-items:flex-start;justify-content:space-between}.preprocess-dialog-heading h2{margin:0 0 14px}.preprocess-dialog-heading .dialog-close{position:static}.preprocess-dialog-stage{height:min(72vh,760px);display:grid;place-items:center;overflow:auto;background:#deded8;background-image:linear-gradient(45deg,#d5d5cf 25%,transparent 25%),linear-gradient(-45deg,#d5d5cf 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#d5d5cf 75%),linear-gradient(-45deg,transparent 75%,#d5d5cf 75%);background-size:18px 18px;background-position:0 0,0 9px,9px -9px,-9px 0}.preprocess-dialog-stage canvas{display:block;max-width:100%;max-height:100%;background:#fff;object-fit:contain;image-rendering:pixelated}.preprocess-dialog .dialog-note{margin:12px 0 0}
@media(max-width:600px){.analysis-preview-row{margin:10px 18px 0}.preprocess-dock,.pin-pattern-dock{width:100%;flex-basis:100%}.preprocess-dock{grid-template-columns:120px 1fr}}
.analysis-log-button{border:1px solid var(--line);background:#fff;padding:7px 9px;color:var(--ink);font-size:9px;cursor:pointer;white-space:nowrap}.analysis-log-button small{display:block;margin-top:2px;color:var(--muted);font:400 8px "DM Mono"}.analysis-log-button.has-errors{border-color:#b42318;color:#b42318}.analysis-log-button.has-warnings{border-color:#d6a31a;color:#9a6700}.analysis-log-dialog{width:min(920px,calc(100% - 32px));height:min(760px,calc(100% - 32px));padding:24px;overflow:hidden}.analysis-log-heading{display:flex;align-items:flex-start;justify-content:space-between}.analysis-log-heading h2{margin:0}.analysis-log-toolbar{display:flex;gap:7px;padding:0 0 10px}.analysis-log-toolbar button{border:1px solid var(--line);background:#fff;padding:6px 10px;color:var(--muted);font-size:10px;cursor:pointer}.analysis-log-dialog pre{height:calc(100% - 160px);overflow:auto;margin:0;padding:14px;border:1px solid #293942;background:#101a20;color:#cde4ef;font:400 10px/1.6 "DM Mono",monospace;white-space:pre-wrap;word-break:break-word}
.topbar-actions{margin-left:auto;display:flex;align-items:center;gap:8px}.topbar-actions .ghost-button{margin-left:0}.app-version{font:500 10px "DM Mono";color:var(--accent);letter-spacing:.04em}.version-history-button{border:1px solid var(--line);background:transparent;padding:8px 12px;cursor:pointer;color:var(--muted)}.version-dialog{width:min(680px,calc(100% - 32px));max-height:min(760px,calc(100% - 32px));overflow:auto}.version-current{display:flex;align-items:center;justify-content:space-between;padding:13px 15px;margin:0 0 12px;background:var(--ink);color:#fff;font-size:12px}.version-current strong{font:500 14px "DM Mono";color:#ff9d81}.version-policy{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-bottom:18px}.version-policy span{padding:9px;border:1px solid var(--line);color:var(--muted);font-size:10px}.version-policy b{display:block;margin-bottom:3px;color:var(--ink);font:500 11px "DM Mono"}.version-history-list{display:grid;gap:10px}.version-entry{padding:15px;border:1px solid var(--line);background:#fff}.version-entry header{display:flex;align-items:baseline;gap:10px;margin-bottom:9px}.version-entry h3{margin:0;font:600 14px "DM Mono"}.version-entry time,.version-entry .release-type{color:var(--muted);font:400 9px "DM Mono"}.version-entry .release-type{margin-left:auto;padding:3px 6px;background:#eeeee8}.version-entry ul{margin:0;padding-left:18px;color:var(--muted);font-size:11px;line-height:1.75}
@media(max-width:600px){.topbar{padding:0 14px}.topbar-actions{gap:5px}.app-version{font-size:9px}.version-history-button,.topbar-actions .ghost-button{padding:7px 8px;font-size:10px}.version-policy{grid-template-columns:1fr}}
