*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--color-bg: #f8f9fa;--color-surface: #ffffff;--color-border: #dee2e6;--color-border-hover: #adb5bd;--color-text: #212529;--color-text-secondary: #6c757d;--color-primary: #2563eb;--color-primary-hover: #1d4ed8;--color-primary-light: #dbeafe;--color-success: #16a34a;--color-success-light: #dcfce7;--color-warning: #ca8a04;--color-warning-light: #fef9c3;--color-error: #dc2626;--color-error-light: #fee2e2;--radius: 8px;--radius-sm: 4px;--shadow: 0 1px 3px rgba(0, 0, 0, .08);--shadow-md: 0 4px 12px rgba(0, 0, 0, .1);--transition: .15s ease}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:var(--color-bg);color:var(--color-text);line-height:1.5;min-height:100vh}.container{max-width:640px;margin:0 auto;padding:24px 16px 48px}.header{text-align:center;margin-bottom:32px}.header h1{font-size:24px;font-weight:700;letter-spacing:-.02em}.header-subtitle{color:var(--color-text-secondary);font-size:14px;margin-top:4px}.section{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:20px;margin-bottom:16px;box-shadow:var(--shadow)}.section-title{font-size:14px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-secondary);margin-bottom:16px}.upload-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media(max-width:480px){.upload-grid{grid-template-columns:1fr}}.upload-zone{position:relative;border:2px dashed var(--color-border);border-radius:var(--radius);padding:24px 16px;text-align:center;cursor:pointer;transition:border-color var(--transition),background-color var(--transition)}.upload-zone:hover{border-color:var(--color-primary);background:var(--color-primary-light)}.upload-zone.drag-over{border-color:var(--color-primary);background:var(--color-primary-light);border-style:solid}.upload-zone.has-file{border-color:var(--color-success);border-style:solid;background:var(--color-success-light);cursor:default}.upload-icon{color:var(--color-text-secondary);margin-bottom:8px}.upload-zone:hover .upload-icon,.upload-zone.drag-over .upload-icon{color:var(--color-primary)}.upload-zone.has-file .upload-icon{color:var(--color-success)}.upload-label{font-size:14px;font-weight:600;margin-bottom:4px}.upload-hint{font-size:12px;color:var(--color-text-secondary)}.upload-input{position:absolute;inset:0;opacity:0;cursor:pointer}.upload-zone.has-file .upload-input,.upload-zone.has-file .upload-zone-content{display:none}.upload-file-info{display:flex;align-items:center;justify-content:center;gap:8px}.file-name{font-size:13px;font-weight:500;word-break:break-all}.file-remove{background:none;border:none;font-size:20px;line-height:1;color:var(--color-text-secondary);cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm);transition:color var(--transition),background-color var(--transition)}.file-remove:hover{color:var(--color-error);background:var(--color-error-light)}.validation-msg{display:flex;align-items:flex-start;gap:8px;padding:8px 12px;border-radius:var(--radius-sm);font-size:13px;margin-bottom:8px}.validation-msg:last-child{margin-bottom:0}.validation-msg-success{background:var(--color-success-light);color:var(--color-success)}.validation-msg-warning{background:var(--color-warning-light);color:var(--color-warning)}.validation-msg-error{background:var(--color-error-light);color:var(--color-error)}.validation-icon{flex-shrink:0;font-size:14px;line-height:1.4}.metrics-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}@media(max-width:480px){.metrics-grid{grid-template-columns:1fr 1fr}}.metric-card{text-align:center;padding:12px 8px;background:var(--color-bg);border-radius:var(--radius-sm)}.metric-card-wide{grid-column:1 / -1}.metric-value{display:block;font-size:24px;font-weight:700;line-height:1.2}.metric-value-small{font-size:16px}.metric-label{display:block;font-size:12px;color:var(--color-text-secondary);margin-top:4px}.stage-controls{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:16px}.stage-checkbox{display:flex;align-items:center;gap:6px;font-size:14px;cursor:pointer;user-select:none}.stage-checkbox input[type=checkbox]{width:16px;height:16px;accent-color:var(--color-primary);cursor:pointer}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 20px;border:none;border-radius:var(--radius);font-size:14px;font-weight:600;cursor:pointer;text-decoration:none;transition:background-color var(--transition),opacity var(--transition)}.btn-primary{background:var(--color-primary);color:#fff;width:100%}.btn-primary:hover{background:var(--color-primary-hover)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-primary.generating{opacity:.7;cursor:wait}.progress-item{margin-bottom:16px}.progress-item:last-of-type{margin-bottom:0}.progress-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.progress-label{font-size:13px;font-weight:500}.progress-status{font-size:12px;color:var(--color-text-secondary)}.progress-status.running{color:var(--color-primary)}.progress-status.done{color:var(--color-success)}.progress-bar-track{height:6px;background:var(--color-bg);border-radius:3px;overflow:hidden}.progress-bar-fill{height:100%;background:var(--color-primary);border-radius:3px;transition:width .2s ease-out}.progress-bar-fill.done{background:var(--color-success)}.progress-total{display:flex;justify-content:space-between;align-items:center;margin-top:16px;padding-top:12px;border-top:1px solid var(--color-border);font-size:13px}.progress-total-label{color:var(--color-text-secondary)}.progress-total-value{font-weight:600}.download-grid{display:flex;flex-direction:column;gap:8px}.btn-download{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius);text-align:left;color:var(--color-text);text-decoration:none;transition:border-color var(--transition),box-shadow var(--transition)}.btn-download:hover{border-color:var(--color-primary);box-shadow:var(--shadow-md)}.download-icon{flex-shrink:0;color:var(--color-primary);display:flex}.download-text{display:flex;flex-direction:column}.download-name{font-size:14px;font-weight:600}.download-filename{font-size:12px;color:var(--color-text-secondary)}.error-banner{position:fixed;bottom:16px;left:50%;transform:translate(-50%);max-width:600px;width:calc(100% - 32px)}.error-banner:not([hidden]){display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--color-error);color:#fff;border-radius:var(--radius);box-shadow:var(--shadow-md);font-size:14px;z-index:100}.error-text{flex:1}.error-dismiss{background:none;border:none;color:#fff;font-size:20px;line-height:1;cursor:pointer;padding:2px 6px;opacity:.8;transition:opacity var(--transition)}.error-dismiss:hover{opacity:1}.generating .upload-zone,.generating .stage-checkbox{pointer-events:none;opacity:.6}
