*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bk-purple: #5C2D91;--bk-purple-dark: #4A2275;--bk-purple-light: #7B45B0;--bk-purple-muted: #EDE5F6;--bk-gray-900: #2C2C2C;--bk-gray-700: #414042;--bk-gray-500: #767676;--bk-gray-300: #C8C8C8;--bk-gray-100: #F5F5F5;--bk-white: #FFFFFF;--color-success: #1E8C4E;--color-success-bg:#D4EDDA;--color-warning: #B45309;--color-warning-bg:#FEF3C7;--color-danger: #C0392B;--color-danger-bg: #FDECEA;--color-info: #1565C0;--color-info-bg: #E3F2FD;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--shadow-sm: 0 1px 3px rgba(0,0,0,.1);--shadow-md: 0 4px 12px rgba(0,0,0,.12);--shadow-lg: 0 8px 24px rgba(0,0,0,.15);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;line-height:1.5;color:var(--bk-gray-700);background:var(--bk-gray-100);-webkit-font-smoothing:antialiased}html,body,#root{height:100%;min-height:100dvh}button{cursor:pointer;font-family:inherit;border:none;outline:none}input,select,textarea{font-family:inherit}a{color:var(--bk-purple);text-decoration:none}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--bk-gray-300);border-radius:3px}.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}.app-header{background:var(--bk-purple);color:var(--bk-white);box-shadow:var(--shadow-md);position:sticky;top:0;z-index:100}.header-inner{display:flex;align-items:center;justify-content:space-between;gap:12px;max-width:900px;margin:0 auto;padding:12px 16px}.header-brand{display:flex;align-items:center;gap:10px;min-width:0}.header-logo{flex-shrink:0;width:36px;height:28px}.header-logo svg{width:100%;height:100%}.header-titles{display:flex;flex-direction:column;min-width:0}.header-app-name{font-size:1rem;font-weight:700;letter-spacing:-.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}.header-company{font-size:.65rem;opacity:.75;letter-spacing:.04em;text-transform:uppercase;line-height:1}.header-nav{display:flex;align-items:center;gap:8px;flex-shrink:0}.header-btn{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border-radius:var(--radius-sm);font-size:.82rem;font-weight:600;transition:background .15s,opacity .15s;white-space:nowrap}.header-btn--ghost{background:#ffffff1f;color:#fff}.header-btn--ghost:hover{background:#ffffff38}.header-btn--outline{background:transparent;color:#fff;border:1.5px solid rgba(255,255,255,.55)}.header-btn--outline:hover{background:#ffffff1a}.header-badge{background:#ffffff40;border-radius:999px;padding:1px 6px;font-size:.75rem;font-weight:700;min-width:20px;text-align:center}.setup-page{display:flex;flex-direction:column;gap:20px}.setup-hero{text-align:center;padding:24px 0 8px}.setup-title{font-size:1.5rem;font-weight:800;color:var(--bk-gray-900);margin-bottom:6px}.setup-subtitle{color:var(--bk-gray-500);font-size:.95rem}.setup-columns-card{background:var(--bk-white);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);overflow:hidden}.setup-columns-header{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--bk-gray-100)}.setup-section-label{font-size:.78rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--bk-gray-500)}.setup-column-hint{font-size:.75rem;color:var(--bk-gray-300)}.setup-empty{padding:24px 16px;text-align:center;color:var(--bk-gray-500);font-size:.9rem}.setup-column-list{list-style:none}.setup-column-row{display:flex;align-items:center;gap:10px;padding:10px 16px;border-bottom:1px solid var(--bk-gray-100);background:var(--bk-white);transition:background .1s;cursor:grab}.setup-column-row:last-child{border-bottom:none}.setup-column-row:active{cursor:grabbing;background:var(--bk-purple-muted)}.drag-handle{color:var(--bk-gray-300);flex-shrink:0;display:flex;align-items:center;padding:2px}.col-name-wrap{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.col-name-input{width:100%;padding:8px 10px;border:1.5px solid var(--bk-gray-300);border-radius:var(--radius-sm);font-size:.95rem;color:var(--bk-gray-900);transition:border-color .15s;background:var(--bk-white)}.col-name-input:focus{outline:none;border-color:var(--bk-purple);box-shadow:0 0 0 3px #5c2d911f}.col-name-input--error{border-color:var(--color-danger)}.col-error-msg{font-size:.72rem;color:var(--color-danger)}.col-flags{display:flex;gap:10px;flex-shrink:0}.flag-label{display:flex;align-items:center;gap:4px;font-size:.82rem;color:var(--bk-gray-700);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none}.flag-label input[type=checkbox]{accent-color:var(--bk-purple);width:15px;height:15px;cursor:pointer}.col-delete-btn{background:none;color:var(--bk-gray-300);border:none;padding:4px;border-radius:var(--radius-sm);display:flex;align-items:center;flex-shrink:0;transition:color .15s,background .15s}.col-delete-btn:hover{color:var(--color-danger);background:var(--color-danger-bg)}.setup-add-btn{display:flex;align-items:center;gap:6px;width:100%;padding:14px 16px;background:none;border:none;border-top:1px dashed var(--bk-gray-300);color:var(--bk-purple);font-size:.9rem;font-weight:600;transition:background .15s}.setup-add-btn:hover{background:var(--bk-purple-muted)}.setup-tips{display:flex;flex-wrap:wrap;gap:10px}.tip{flex:1;min-width:180px;background:var(--bk-white);border-left:3px solid var(--bk-purple-light);border-radius:var(--radius-sm);padding:10px 12px;font-size:.82rem;color:var(--bk-gray-500);box-shadow:var(--shadow-sm)}.tip strong{color:var(--bk-gray-700)}.setup-cta{display:flex;flex-direction:column;align-items:center;gap:8px;padding:8px 0 16px}.setup-cta-hint{font-size:.82rem;color:var(--bk-gray-500)}.btn-primary{display:inline-flex;align-items:center;gap:8px;background:var(--bk-purple);color:var(--bk-white);border:none;border-radius:var(--radius-md);font-weight:700;padding:12px 28px;font-size:1rem;transition:background .15s,transform .1s,box-shadow .15s;box-shadow:var(--shadow-sm)}.btn-primary:hover:not(:disabled){background:var(--bk-purple-dark);box-shadow:var(--shadow-md)}.btn-primary:active:not(:disabled){transform:scale(.98)}.btn-large{padding:16px 40px;font-size:1.1rem;border-radius:var(--radius-md)}@media (max-width: 480px){.col-flags{flex-direction:column;gap:4px}.setup-column-row{flex-wrap:wrap}}.scan-page{display:flex;flex-direction:column;gap:16px;padding-bottom:24px}.scan-progress-bar-wrap{height:4px;background:var(--bk-gray-300);border-radius:2px;overflow:hidden}.scan-progress-bar{height:100%;background:var(--bk-purple);border-radius:2px;transition:width .3s ease}.scan-status-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:6px}.scan-col-indicator{font-size:1.4rem;font-weight:700;color:var(--bk-gray-900)}.scan-col-indicator strong{color:var(--bk-purple)}.scan-progress-text{font-size:.85rem;color:var(--bk-gray-500);display:flex;align-items:center;gap:8px}.scan-row-badge{background:var(--bk-purple-muted);color:var(--bk-purple);border-radius:999px;padding:2px 8px;font-weight:700;font-size:.78rem}.scan-col-steps{display:flex;gap:6px;flex-wrap:wrap}.scan-col-step{display:flex;align-items:center;gap:5px;padding:5px 10px;border-radius:999px;border:1.5px solid var(--bk-gray-300);font-size:.8rem;color:var(--bk-gray-500);background:var(--bk-white);transition:all .2s}.scan-col-step.done{background:var(--color-success-bg);border-color:var(--color-success);color:var(--color-success)}.scan-col-step.active{background:var(--bk-purple);border-color:var(--bk-purple);color:var(--bk-white);font-weight:700;box-shadow:var(--shadow-sm)}.step-dot{font-weight:800;font-size:.75rem}.scan-camera-outer{position:relative;width:100%;max-width:480px;margin:0 auto;border-radius:var(--radius-lg);overflow:hidden;background:#000;box-shadow:var(--shadow-lg);display:flex;flex-direction:column;align-items:center}.scan-camera-outer.hidden{display:none}.scan-camera-outer.visible{display:flex}.scan-camera-inner{width:100%;line-height:0}.scan-camera-inner video{width:100%!important;height:auto!important;display:block!important;border-radius:0!important;object-fit:cover}.scan-camera-inner canvas{position:absolute!important;top:0!important;left:0!important;width:100%!important;height:100%!important;pointer-events:none}.scan-camera-inner>span,.scan-camera-inner>div>span{display:none!important}.scan-hint{width:100%;text-align:center;padding:8px;color:#ffffffd9;font-size:.85rem;font-weight:600;background:#00000073}.scan-error-box{background:var(--color-danger-bg);border:1px solid #f5c6cb;border-radius:var(--radius-md);padding:12px 14px;font-size:.875rem;color:var(--color-danger);line-height:1.6}.scan-confirm-panel{background:var(--bk-white);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-md);display:flex;flex-direction:column;gap:12px}.confirm-label{font-size:.9rem;color:var(--bk-gray-700)}.confirm-label strong{color:var(--bk-purple)}.confirm-input{width:100%;padding:12px 14px;border:2px solid var(--bk-purple);border-radius:var(--radius-md);font-size:1.15rem;font-weight:700;color:var(--bk-gray-900);background:var(--bk-white);outline:none}.confirm-actions{display:flex;gap:10px}.confirm-actions .btn-primary,.confirm-actions .btn-secondary{flex:1}.scan-idle-panel{display:flex;flex-direction:column;gap:16px;align-items:center}.scan-status-msg{font-size:.9rem;color:var(--color-success);font-weight:600;background:var(--color-success-bg);border-radius:var(--radius-sm);padding:8px 14px;text-align:center;width:100%}.btn-scan{width:100%;max-width:320px;justify-content:center;font-size:1.15rem;padding:20px 32px}.manual-entry{width:100%}.manual-label{font-size:.8rem;color:var(--bk-gray-500);margin-bottom:6px;text-align:center}.manual-row{display:flex;gap:8px;align-items:center}.manual-input{flex:1;padding:11px 12px;border:1.5px solid var(--bk-gray-300);border-radius:var(--radius-md);font-size:1rem;color:var(--bk-gray-900);outline:none;transition:border-color .15s}.manual-input:focus{border-color:var(--bk-purple);box-shadow:0 0 0 3px #5c2d911f}.scan-footer{text-align:center;padding-top:8px}.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--bk-purple);color:var(--bk-white);border:none;border-radius:var(--radius-md);font-weight:700;padding:12px 22px;font-size:1rem;transition:background .15s,transform .1s;box-shadow:var(--shadow-sm)}.btn-primary:hover:not(:disabled){background:var(--bk-purple-dark)}.btn-primary:active:not(:disabled){transform:scale(.97)}.btn-primary:disabled{opacity:.45;cursor:not-allowed}.btn-large{padding:16px 40px;font-size:1.1rem}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--bk-gray-100);color:var(--bk-gray-700);border:1.5px solid var(--bk-gray-300);border-radius:var(--radius-md);font-weight:600;padding:12px 22px;font-size:1rem;transition:background .15s}.btn-secondary:hover{background:var(--bk-gray-300)}.btn-ghost{background:none;border:none;color:var(--bk-purple);font-size:.9rem;font-weight:600;padding:8px 16px;border-radius:var(--radius-sm);transition:background .15s}.btn-ghost:hover{background:var(--bk-purple-muted)}.review-page{display:flex;flex-direction:column;gap:14px;padding-bottom:32px}.review-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px}.review-toolbar-left{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.review-toolbar-right{display:flex;align-items:center;gap:8px}.review-title{font-size:1.3rem;font-weight:800;color:var(--bk-gray-900)}.review-count{font-size:.85rem;color:var(--bk-gray-500);background:var(--bk-gray-100);border-radius:999px;padding:2px 8px}.badge{border-radius:999px;padding:2px 8px;font-size:.75rem;font-weight:700}.badge--warn{background:var(--color-warning-bg);color:var(--color-warning)}.badge--danger{background:var(--color-danger-bg);color:var(--color-danger)}.btn-secondary-sm{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;background:var(--bk-gray-100);border:1.5px solid var(--bk-gray-300);border-radius:var(--radius-sm);font-size:.85rem;font-weight:600;color:var(--bk-gray-700);transition:background .15s}.btn-secondary-sm:hover{background:var(--bk-gray-300)}.btn-export{display:inline-flex;align-items:center;gap:7px;padding:8px 16px;background:var(--bk-purple);color:#fff;border:none;border-radius:var(--radius-sm);font-size:.9rem;font-weight:700;transition:background .15s;box-shadow:var(--shadow-sm)}.btn-export:hover:not(:disabled){background:var(--bk-purple-dark)}.btn-export:disabled{opacity:.45;cursor:not-allowed}.export-msg{background:var(--color-success-bg);color:var(--color-success);border-radius:var(--radius-sm);padding:8px 14px;font-size:.875rem;font-weight:600}.review-filter-row{display:flex;align-items:center;gap:8px}.review-filter-input{flex:1;padding:9px 12px;border:1.5px solid var(--bk-gray-300);border-radius:var(--radius-sm);font-size:.9rem;outline:none;color:var(--bk-gray-900);transition:border-color .15s}.review-filter-input:focus{border-color:var(--bk-purple);box-shadow:0 0 0 3px #5c2d911a}.filter-clear{background:none;border:none;color:var(--bk-gray-500);font-size:.9rem;padding:4px 6px;border-radius:var(--radius-sm);transition:color .15s}.filter-clear:hover{color:var(--color-danger)}.filter-count{font-size:.78rem;color:var(--bk-gray-500);white-space:nowrap}.dup-legend{display:flex;flex-wrap:wrap;gap:8px;font-size:.78rem}.legend-item{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:4px;font-weight:600}.legend-item--row-dup{background:var(--color-warning-bg);color:var(--color-warning);border:1px solid #FDE68A}.legend-item--row-dup:before{content:"";width:10px;height:10px;background:#fde68a;border:1px solid var(--color-warning);border-radius:2px}.legend-item--cell-dup{background:var(--color-danger-bg);color:var(--color-danger);border:1px solid #FECACA}.legend-item--cell-dup:before{content:"";width:10px;height:10px;background:#fecaca;border:1px solid var(--color-danger);border-radius:2px}.review-table-wrap{background:var(--bk-white);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);overflow-x:auto;-webkit-overflow-scrolling:touch}.review-no-rows{padding:32px 16px;text-align:center;color:var(--bk-gray-500);font-size:.9rem}.review-table{width:100%;border-collapse:collapse;font-size:.88rem}.review-table thead tr{background:var(--bk-purple-muted)}.review-table th{padding:10px 12px;text-align:left;font-weight:700;color:var(--bk-gray-700);white-space:nowrap;border-bottom:2px solid var(--bk-purple);font-size:.8rem;letter-spacing:.03em}.review-table td{padding:8px 12px;border-bottom:1px solid var(--bk-gray-100);color:var(--bk-gray-700);vertical-align:middle;cursor:pointer;transition:background .1s}.review-table td:hover{background:var(--bk-gray-100)}.review-table tr:last-child td{border-bottom:none}.col-num{color:var(--bk-gray-500)!important;font-size:.78rem!important;min-width:32px;cursor:default!important;background:transparent!important}.col-actions{min-width:44px;text-align:center}.row-duplicate{background:#fffbeb!important}.row-duplicate td{border-bottom-color:#fde68a!important}.cell-unique-dup{background:#fef2f2!important;color:var(--color-danger)!important;font-weight:600}.cell-empty-required{background:#fff7ed!important}.cell-edit-input{width:100%;min-width:80px;padding:4px 8px;border:2px solid var(--bk-purple);border-radius:var(--radius-sm);font-size:.88rem;outline:none;color:var(--bk-gray-900);background:var(--bk-white)}.cell-value{display:block;word-break:break-word}.cell-empty-label{color:var(--bk-gray-300);font-style:normal}.col-unique-badge,.col-req-badge{display:inline-block;margin-left:4px;font-size:.65rem;font-weight:800;border-radius:3px;padding:0 3px;vertical-align:middle}.col-unique-badge{background:var(--bk-purple-muted);color:var(--bk-purple)}.col-req-badge{color:var(--color-danger);background:var(--color-danger-bg)}.row-delete-btn{background:none;border:none;color:var(--bk-gray-300);padding:4px;border-radius:var(--radius-sm);display:inline-flex;align-items:center;transition:color .15s,background .15s}.row-delete-btn:hover{color:var(--color-danger);background:var(--color-danger-bg)}.add-row-btn{display:flex;align-items:center;gap:7px;padding:10px 16px;background:var(--bk-white);border:1.5px dashed var(--bk-purple);border-radius:var(--radius-md);color:var(--bk-purple);font-size:.88rem;font-weight:600;width:100%;justify-content:center;transition:background .15s}.add-row-btn:hover{background:var(--bk-purple-muted)}.link-btn{background:none;border:none;color:var(--bk-purple);font-size:inherit;font-weight:600;padding:0;text-decoration:underline;cursor:pointer}.review-empty-state{display:flex;align-items:center;justify-content:center;min-height:200px;font-size:.95rem;color:var(--bk-gray-500)}.app{display:flex;flex-direction:column;min-height:100dvh;background:var(--bk-gray-100)}.app-main{flex:1;display:flex;flex-direction:column;width:100%;max-width:900px;margin:0 auto;padding:16px}@media (min-width: 600px){.app-main{padding:24px}}
