*{box-sizing:border-box}body{margin:0;background:var(--bs-secondary-bg);color:var(--bs-body-color);font-family:var(--bs-body-font-family)}button,input,textarea,select{font:inherit}.app-shell{max-width:1200px;margin:0 auto;padding:2rem 1rem 3rem}.hero{padding:1.5rem;margin-bottom:1.5rem;background:var(--bs-body-bg);border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius-lg);box-shadow:var(--bs-box-shadow-sm)}.hero h1,.step-screen-head h2,.preview h2,.log-console h2,.diagnostics h2,.modal h3{margin:0;font-size:calc(1.325rem + .9vw);font-weight:600;line-height:1.2}.hero p,.step-screen-head p,.control-hint,footer{color:var(--bs-secondary-color)}.hero p{margin:.5rem 0 0;max-width:760px}.step-progress{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem;margin-bottom:1.5rem}.step{padding:1rem 1.25rem;background:var(--bs-body-bg);border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius-lg);box-shadow:var(--bs-box-shadow-sm)}.step span{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;margin-bottom:.75rem;border-radius:50rem;background:var(--bs-secondary-bg);border:1px solid var(--bs-border-color);font-weight:600}.step p{margin:0;font-weight:600}.step.active{border-color:var(--bs-primary-border-subtle);background:var(--bs-primary-bg-subtle)}.step.done span{background:var(--bs-success-bg-subtle);border-color:var(--bs-success-border-subtle);color:var(--bs-success-text-emphasis)}.card{margin-bottom:1rem}.step-screen.card,.results-screen .card,.step-screen-head.card{padding:1.5rem}.error-banner{margin-bottom:1rem;padding:.75rem 1rem;color:var(--bs-danger-text-emphasis);background:var(--bs-danger-bg-subtle);border:1px solid var(--bs-danger-border-subtle);border-radius:var(--bs-border-radius);white-space:pre-wrap}.step-screen,.results-screen,.config-grid,.cluster-list,.switch-modal,.switch-options{display:grid;gap:1rem}.step-screen-head{display:flex;justify-content:space-between;align-items:flex-end;gap:1rem}.step-screen-head small{display:inline-block;margin-bottom:.5rem;color:var(--bs-secondary-color);font-size:.875rem;text-transform:uppercase;letter-spacing:.05em}.step-screen-head p{max-width:560px;margin:0}.analysis-progress-wrap{padding:1rem;background:var(--bs-light-bg-subtle);border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.analysis-progress-head,.cluster-head,.card-meta,.score-row{display:flex;justify-content:space-between;align-items:center;gap:.75rem}.analysis-progress-head{margin-bottom:.5rem}.analysis-progress-track,.bar-wrap{width:100%;overflow:hidden;background:var(--bs-secondary-bg);border:1px solid var(--bs-border-color);border-radius:999px}.analysis-progress-track{height:1rem}.bar-wrap{height:.75rem}.analysis-progress-fill,.bar-fill{height:100%;background:var(--bs-primary)}.upload-zone{display:flex;flex-direction:column;justify-content:center;gap:.75rem;min-height:220px;padding:2rem;text-align:center;background:var(--bs-body-bg);border:2px dashed var(--bs-border-color);border-radius:var(--bs-border-radius-lg);cursor:pointer}.upload-zone p{margin:0}.upload-zone button,.analyze-btn,.secondary-btn,.stop-btn,.close,.switch-btn,.remove-btn,.cluster-toggle{border-radius:var(--bs-border-radius)}.upload-zone button,.analyze-btn{border:1px solid var(--bs-primary);background:var(--bs-primary);color:#fff;padding:.5rem 1rem}.secondary-btn,.close{border:1px solid var(--bs-secondary-border-subtle);background:var(--bs-body-bg);color:var(--bs-body-color);padding:.5rem 1rem}.stop-btn,.remove-btn{border:1px solid var(--bs-danger);background:var(--bs-danger);color:#fff;padding:.375rem .75rem}.switch-btn{border:1px solid var(--bs-primary);background:rgba(var(--bs-primary-rgb),.95);color:#fff;padding:.375rem .75rem}.cluster-toggle{width:100%;border:0;background:transparent;padding:1rem;text-align:left}.step-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.75rem}label{display:grid;gap:.5rem;font-weight:500}input,textarea,select{display:block;width:100%;min-width:0;padding:.375rem .75rem;color:var(--bs-body-color);background:var(--bs-body-bg);border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius)}input:focus,textarea:focus,select:focus{outline:0;border-color:#86b7fe;box-shadow:0 0 0 .25rem #0d6efd40}input[type=range]{padding:0}.analyze-btn:disabled,.secondary-btn:disabled,.stop-btn:disabled{opacity:.65;cursor:not-allowed}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem}.stats div,.cluster-item,.cluster-thumb,.photo-card,.switch-target,.switch-option{background:var(--bs-body-bg);border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius-lg)}.stats div{padding:1rem}.stats small{display:block;color:var(--bs-secondary-color);margin-bottom:.25rem}.stats strong{font-size:1.5rem;font-weight:600}.log-body{max-height:180px;overflow:auto;padding:1rem;background:var(--bs-tertiary-bg);border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.log-body pre{margin:0 0 .25rem;white-space:pre-wrap;overflow-wrap:anywhere}.diagnostics h2,.preview h2{margin-bottom:1rem}.insights p{margin:0 0 .5rem}.cluster-thumbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(90px,1fr));gap:.75rem;padding:0 1rem 1rem}.cluster-thumb{padding:.5rem}.cluster-thumb.selected{border-color:var(--bs-primary)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:1rem}.photo-card{position:relative;overflow:hidden;cursor:pointer;box-shadow:var(--bs-box-shadow-sm)}.photo-card img,.cluster-thumb img,.modal img,.switch-target img,.switch-option img{display:block;width:100%;object-fit:cover}.photo-card img,.switch-target img,.switch-option img{aspect-ratio:4 / 3}.cluster-thumb img{aspect-ratio:1 / 1;margin-bottom:.5rem}.modal img{max-height:320px;margin-bottom:1rem;border-radius:var(--bs-border-radius)}.remove-btn,.switch-btn{position:absolute;top:.75rem;opacity:0;transition:opacity .2s ease-in-out}.switch-btn{left:.75rem}.remove-btn{right:.75rem}.photo-card:hover .remove-btn,.photo-card:hover .switch-btn{opacity:1}.card-meta{padding:1rem}.badge{min-width:2.5rem;font-size:.875rem}.tags{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem}.tags span{display:inline-flex;align-items:center;padding:.25rem .5rem;font-size:.75rem;background:var(--bs-secondary-bg);border:1px solid var(--bs-border-color);border-radius:50rem}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:grid;place-items:center;padding:1rem;background:#21252980}.modal{display:block;width:min(700px,100%);max-height:88vh;overflow:auto;padding:1.5rem;background:var(--bs-body-bg);border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius-xl);box-shadow:var(--bs-box-shadow)}.switch-target{display:grid;grid-template-columns:120px 1fr;gap:1rem;align-items:center;padding:1rem}.switch-target small,.switch-option small{display:block;margin-top:.25rem;color:var(--bs-secondary-color)}.switch-option{display:grid;grid-template-columns:160px 1fr auto;gap:1rem;align-items:center;padding:1rem}.switch-option-meta{min-width:0}.score-row{display:grid;grid-template-columns:110px 1fr 44px;margin-bottom:.75rem}.close{margin-bottom:1rem}footer{margin-top:1.5rem;font-size:.875rem}@media (max-width: 920px){.step-progress,.stats{grid-template-columns:1fr}.step-screen-head,.step-actions,.cluster-head{flex-direction:column;align-items:stretch}.switch-option,.switch-target,.score-row{grid-template-columns:1fr}}
