html,body{height:100%;margin:0}body{overflow:hidden}*{scrollbar-color:#3e615b #171b1f;scrollbar-width:thin}*::-webkit-scrollbar{width:8px;height:8px}*::-webkit-scrollbar-track{background:#171b1f}*::-webkit-scrollbar-thumb{background:#3e615b;border:2px solid #171b1f;border-radius:8px}*::-webkit-scrollbar-thumb:hover{background:#56b8a5}div,input,button{box-sizing:border-box}app-root{display:block;height:100vh;height:100dvh;color:#fff}.app-shell{display:grid;grid-template-rows:76px minmax(0,1fr);height:100%;overflow:hidden;background:#101316}.topbar{height:76px;padding:0 34px;display:grid;grid-template-columns:1fr auto;align-items:center;background:#171b1f;border-bottom:1px solid #2c3339}.brand{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:12px}.brand img{width:34px;height:34px}.brand h1{margin:0;font-size:17px;font-weight:600;letter-spacing:.02em}.brand p{margin:4px 0 0;color:#84909a;font-size:11px;letter-spacing:.12em}.topbar-status,.saved-indicator{display:grid;grid-template-columns:auto auto;justify-content:start;align-items:center;gap:8px;color:#a6b0b8;font-size:12px}.status-dot,.state-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#45c58a;box-shadow:0 0 10px #45c58a66}.workspace{height:100%;min-height:0;display:grid;grid-template-columns:280px minmax(0,1fr)}.sidebar{display:grid;grid-template-rows:auto auto auto auto auto auto;align-content:start;height:100%;min-height:0;overflow-y:auto;padding:28px 18px 20px;background:#171b1f;border-right:1px solid #2c3339}.section-heading,.panel-topline,.dataset-heading,.image-actions,.model-details{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center}.eyebrow{display:block;color:#5d9f94;font-size:9px;font-weight:700;letter-spacing:.15em}h2,h3,h4,p{margin-top:0}.section-heading h2,.page-heading h2{margin:6px 0 0;font-size:19px;font-weight:600}.count-badge,.dataset-count{display:grid;min-width:25px;height:25px;place-items:center;padding:0 6px;color:#9aa6af;background:#252c31;border-radius:7px;font-size:11px}.root-folder{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;margin-top:20px;padding:9px;background:#111518;border:1px solid #303940;border-radius:6px}.root-folder-copy{display:grid;min-width:0;gap:4px}.root-folder-copy strong{overflow:hidden;color:#cbd4d8;font-size:10px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.root-folder-label{color:#78858d;font-size:9px}.root-folder-button{min-height:28px;padding:0 8px;font-size:10px}.create-form{display:grid;gap:9px;margin-top:15px}.create-form label{margin-bottom:1px;color:#bdc6cc;font-size:12px;font-weight:600}.create-form input[type=text]{width:100%;height:37px;padding:0 11px;color:#e6ebee;background:#111518;border:1px solid #303940;border-radius:6px;outline:none;font-size:11px}.create-form input[type=text]:focus{border-color:#4a9c8e;box-shadow:0 0 0 2px #4a9c8e1f}.create-form input[type=text]::placeholder{color:#65717a}.create-form input[type=text]:disabled{opacity:.55;cursor:not-allowed}.button{display:inline-grid;grid-auto-flow:column;place-items:center;gap:7px;border:1px solid transparent;border-radius:6px;cursor:pointer;font:inherit;font-size:11px;font-weight:600;transition:background .15s ease,border-color .15s ease,color .15s ease}.button:disabled,.button.disabled{opacity:.5;cursor:not-allowed}.button-primary{color:#071715;background:#56b8a5;border-color:#56b8a5}.button-primary:hover:not(:disabled){background:#6bcbb8;border-color:#6bcbb8}.create-button{height:36px;width:100%;margin-top:2px}.form-hint{margin:0;color:#77828a;font-size:10px;line-height:1.6}.dataset-heading{margin:22px 2px 10px;color:#89949d;font-size:10px;font-weight:600;letter-spacing:.03em}.dataset-heading span:last-child{color:#68747d;font-weight:400}.dataset-list{display:grid;gap:5px;grid-auto-flow:row;grid-auto-rows:min-content}.dataset-item{display:grid;grid-template-columns:30px minmax(0,1fr) auto;align-items:center;width:100%;min-height:55px;gap:10px;padding:8px;color:#9aa5ad;text-align:left;background:transparent;border:1px solid transparent;border-radius:7px;cursor:pointer}.dataset-item:hover{background:#1e2428}.dataset-item.active{color:#dce8e6;background:#4a9c8e1a;border-color:#4a9c8e3d}.dataset-item.active .folder-icon{color:#65c4b1}.dataset-item .dataset-count{min-width:23px;height:23px}.folder-icon{display:grid;width:30px;height:30px;place-items:center;color:#788791;background:#222a2f;border-radius:6px;font-size:20px}.dataset-copy{display:grid;min-width:0;gap:4px}.dataset-copy strong{overflow:hidden;color:#d3dadd;font-size:11px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.dataset-copy small{overflow:hidden;color:#74818a;font-size:9px;text-overflow:ellipsis;white-space:nowrap}.empty-list{padding:24px 8px;color:#74818a;text-align:center}.empty-list p{margin:8px 0 5px;font-size:11px}.empty-list small{font-size:9px}.empty-folder{color:#57646c;font-size:25px}.sidebar-note{display:grid;grid-template-columns:15px minmax(0,1fr);gap:8px;margin-top:24px;padding:12px 9px 0;border-top:1px solid #2a3136}.sidebar-note p{margin:0;color:#77828a;font-size:10px;line-height:1.7}.note-mark{display:grid;width:15px;height:15px;place-items:center;color:#8ea19e;border:1px solid #596a68;border-radius:50%;font-size:9px}.main-content{width:100%;height:100%;min-height:0;max-width:1440px;margin:0 auto;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:30px 38px 48px}.page-heading{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;margin-bottom:23px}.page-heading h2{font-size:23px}.page-heading p{margin:8px 0 0;color:#89949c;font-size:12px}.workspace-meta{display:grid;justify-items:end;gap:4px;padding:10px 13px;background:#171d21;border:1px solid #2b343a;border-radius:7px}.workspace-meta strong{color:#dce4e7;font-size:12px;font-weight:500}.meta-label,.scene-code{color:#7d8991;font-size:9px}.scene-code{color:#65b8a8;letter-spacing:.02em}.notice{display:grid;grid-template-columns:17px minmax(0,1fr);align-items:center;gap:9px;margin:0 0 12px;padding:10px 13px;border:1px solid;border-radius:6px;font-size:11px}.notice>span{display:grid;width:17px;height:17px;place-items:center;border-radius:50%;font-size:10px;font-weight:700}.error-notice{color:#f0a2a2;background:#c245451a;border-color:#c2454547}.error-notice>span{color:#311515;background:#dc7474}.success-notice{color:#91d7bd;background:#45c58a14;border-color:#45c58a38}.success-notice>span{color:#10271e;background:#6fc9a1}.model-panel,.images-panel,.results-panel{margin-bottom:16px;padding:20px 21px;background:#171c20;border:1px solid #2b3339;border-radius:9px}.panel-topline h3{margin:5px 0 0;color:#e0e6e9;font-size:14px;font-weight:600}.selection-count,.subtle-count{color:#829099;font-size:10px;font-weight:400}.model-switch{display:grid;grid-template-columns:1fr 1fr;gap:11px;margin-top:16px}.model-switch>button{display:grid;grid-template-columns:35px minmax(0,1fr) auto;align-items:center;min-height:65px;gap:12px;padding:11px 13px;color:#939ea6;text-align:left;background:#13181b;border:1px solid #2d363c;border-radius:7px;cursor:pointer;transition:border-color .15s ease,background .15s ease}.model-switch>button:hover{border-color:#43534f}.model-switch>button.active{background:#428e8114;border-color:#438f82}.model-switch>button.active .model-symbol{color:#14251f;background:#68c2ae}.model-symbol{display:grid;width:35px;height:35px;place-items:center;color:#8ca4c4;background:#253142;border-radius:8px;font-size:15px;font-weight:700}.patchcore-symbol{color:#d2a9e0;background:#33283a}.model-copy{display:grid;min-width:0;gap:5px}.model-copy strong{color:#d9e0e3;font-size:12px;font-weight:600}.model-copy small{color:#839098;font-size:10px}.model-active{padding:4px 7px;color:#7ccbb7;background:#56b8a51a;border-radius:4px;font-size:9px}.model-details{min-height:52px;grid-template-columns:minmax(0,1fr) auto;gap:16px;margin-top:12px}.model-description{display:grid;grid-template-columns:max-content minmax(0,1fr);align-items:center;gap:9px}.model-label{color:#8d989f;font-size:10px}.class-list,.detection-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(48px,max-content));justify-content:start;gap:6px}.class-chip{padding:4px 8px;color:#b4c6c4;background:#222c2d;border:1px solid #354444;border-radius:4px;font-size:10px}.patchcore-description p{max-width:500px;margin:0;color:#87939b;font-size:10px;line-height:1.5}.run-button{min-width:155px;height:36px;padding:0 13px}.loading-label{display:inline-grid;grid-auto-flow:column;justify-content:center;align-items:center;gap:7px}.spinner{width:12px;height:12px;border:2px solid rgba(7,23,21,.3);border-top-color:#071715;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.images-panel{min-height:230px}.image-panel-heading{grid-template-columns:minmax(0,1fr) auto;margin-bottom:17px}.image-actions{grid-auto-flow:column;grid-template-columns:repeat(4,max-content);justify-content:end;gap:8px}.image-control{height:32px;padding:0 26px 0 10px;color:#b5c0c5;background:#1d2428;border:1px solid #38434a;border-radius:6px;outline:none;font:inherit;font-size:10px;cursor:pointer}.image-control:focus{border-color:#568f83}.image-control option{color:#d8e4e3;background:#171c20}.button-quiet,.button-outline{min-height:32px;padding:0 11px;color:#b5c0c5;background:#1d2428;border-color:#38434a}.button-quiet:hover:not(:disabled),.button-outline:hover:not(:disabled){color:#d8e4e3;background:#252f33;border-color:#568f83}.upload-button{cursor:pointer}.upload-button input{display:none}.image-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:12px}.image-card{min-width:0;padding:0;overflow:hidden;color:#d8dfe2;text-align:left;background:#12171a;border:1px solid #2b343a;border-radius:7px;cursor:pointer;transition:border-color .15s ease,transform .15s ease}.image-card:hover{transform:translateY(-2px);border-color:#536b67}.image-card.selected{border-color:#5ab6a3;box-shadow:0 0 0 1px #5ab6a32e}.image-card.selected .image-caption strong{color:#c8e8df}.image-card.has-result .image-preview{box-shadow:inset 0 0 0 1px #56b8a540}.image-preview{position:relative;display:block;height:105px;overflow:hidden;background:#20272b}.image-preview img{width:100%;height:100%;object-fit:cover}.image-check{position:absolute;top:7px;right:7px;display:grid;width:19px;height:19px;place-items:center;color:#10211d;background:#68c5ae;border:2px solid rgba(15,24,24,.9);border-radius:50%;font-size:10px;font-weight:700}.result-indicator{position:absolute;right:6px;bottom:6px;padding:4px 6px;color:#c4e9df;background:#101b1be0;border:1px solid rgba(86,184,165,.35);border-radius:4px;font-size:9px}.result-badges{position:absolute;inset:6px 6px auto;display:grid;grid-template-columns:repeat(2,max-content);justify-content:start;gap:5px;pointer-events:none}.result-badge{display:inline-grid;align-items:center;min-height:22px;padding:4px 7px;color:#9fe0cb;background:#0d1c18eb;border:1px solid rgba(86,184,165,.42);border-radius:4px;font-size:9px;line-height:1.2;white-space:nowrap}.result-badge.anomaly{color:#f3a18c;background:#2c1512ed;border-color:#de735b7a}.score-badge{color:#e4c48e;background:#241e14ed;border-color:#cfa96966}.image-caption{display:grid;gap:4px;padding:8px 9px}.image-caption strong{overflow:hidden;color:#c4cdd1;font-size:10px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.image-caption small{color:#75818a;font-size:9px}.image-empty{display:grid;min-height:165px;justify-items:center;align-content:center;padding:15px;color:#7c8991;text-align:center;background:#14191c;border:1px dashed #354047;border-radius:7px}.image-empty h4{margin:7px 0 4px;color:#c2cbd0;font-size:12px;font-weight:500}.image-empty p{margin:0 0 12px;font-size:10px}.empty-image-icon{color:#5b6a72;font-size:27px}.image-empty input{display:none}.preview-overlay{position:fixed;z-index:1000;inset:0;display:grid;place-items:center;padding:24px;background:#05090bd1}.preview-dialog{display:grid;grid-template-rows:auto minmax(0,1fr);width:min(900px,92vw);max-height:90vh;padding:14px;background:#171c20;border:1px solid #354047;border-radius:10px;box-shadow:0 18px 70px #00000080}.preview-image{position:relative;display:grid;min-height:0;place-items:center;overflow:hidden;background:#101316;border-radius:5px}.preview-image>img{display:block;width:100%;max-height:calc(90vh - 110px);object-fit:contain}.preview-result-badges{position:absolute;top:12px;left:12px;display:grid;grid-template-columns:repeat(2,max-content);gap:8px;max-width:calc(100% - 24px);padding:8px;background:#0a1011c7;border:1px solid rgba(86,184,165,.24);border-radius:7px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.preview-result-badges .result-badge{min-height:28px;padding:6px 10px;font-size:11px}.preview-heading{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;padding-bottom:12px}.preview-heading strong{overflow:hidden;color:#dce4e7;font-size:12px;text-overflow:ellipsis;white-space:nowrap}.preview-close{width:28px;height:28px;color:#b5c0c5;background:#252f33;border:1px solid #38434a;border-radius:5px;font-size:18px;cursor:pointer}.results-panel{margin-bottom:0}.results-list{display:grid;gap:10px;margin-top:15px}.result-card{display:grid;grid-template-columns:minmax(260px,.85fr) minmax(200px,1fr);align-items:center;gap:18px;padding:11px;background:#13181b;border:1px solid #2c353b;border-radius:7px}.result-images{display:grid;grid-template-columns:1fr 20px 1fr;align-items:center;gap:7px}.result-images figure{min-width:0;margin:0}.result-images figure img{display:block;width:100%;height:95px;object-fit:contain;background:#20272b;border-radius:4px}.result-images figure figcaption{margin-top:5px;color:#7e8a92;font-size:9px;text-align:center}.result-images .output-image img{border:1px solid rgba(86,184,165,.4)}.result-arrow{color:#6c7a81;text-align:center}.result-info{display:grid;grid-template-columns:repeat(3,max-content);justify-content:start;align-items:center;gap:9px 12px}.result-info .detection-list{grid-column:1/-1}.result-filename{grid-column:1/-1;overflow:hidden;color:#d1dadd;font-size:11px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.result-state{display:inline-grid;grid-template-columns:auto auto;align-items:center;gap:6px;padding:5px 8px;color:#73c8a2;background:#45c58a1a;border-radius:4px;font-size:10px}.result-state .state-dot{width:6px;height:6px;background:#53c793;box-shadow:none}.result-state.anomaly{color:#ed8e7c;background:#d35b491f}.result-state.anomaly .state-dot{background:#e37c68}.result-score{color:#8d999f;font-size:10px}.result-score strong{margin-left:4px;color:#e0b578;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}.detection-chip{padding:4px 7px;color:#9fd8c8;background:#56b8a51a;border:1px solid rgba(86,184,165,.2);border-radius:4px;font-size:10px}.detection-chip small{margin-left:4px;color:#7eada2;font-size:9px}.detection-chip.other-class{color:#d0b27c;background:#d0b27c14;border-color:#d0b27c2e}.no-detections{color:#89959d;font-size:10px}.result-time{grid-column:1/-1;color:#6f7c84;font-size:9px}@media(max-width:900px){.workspace{grid-template-columns:230px minmax(0,1fr)}.main-content{padding:24px 20px 36px}.model-details{grid-template-columns:1fr;justify-items:start}.run-button{justify-self:end}}@media(max-width:650px){.app-shell{grid-template-rows:66px minmax(0,1fr)}.topbar{height:66px;padding:0 15px}.brand h1{font-size:13px}.brand img{width:29px;height:29px}.topbar-status{font-size:10px}.workspace{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,42dvh) minmax(0,1fr)}.sidebar{height:100%;min-height:0;padding:17px 15px;border-right:0;border-bottom:1px solid #2c3339}.create-form{grid-template-columns:1fr 1fr;margin-top:15px}.create-form label,.create-button,.form-hint{grid-column:1/-1}.dataset-heading{margin-top:18px}.dataset-list{max-height:none}.sidebar-note{margin-top:14px}.main-content{height:100%;min-height:0;padding:21px 14px 30px}.page-heading{grid-template-columns:1fr;justify-items:start;gap:13px}.workspace-meta{justify-items:start}.model-panel,.images-panel,.results-panel{padding:15px}.model-switch{grid-template-columns:1fr}.model-details{justify-items:stretch}.run-button{justify-self:stretch}.image-panel-heading{grid-template-columns:1fr;justify-items:start;gap:12px}.image-actions{grid-auto-flow:row;grid-template-columns:repeat(2,max-content);justify-content:start}.result-card{grid-template-columns:1fr}}
