*{box-sizing:border-box;padding:0;margin:0}body,html{max-width:100vw;overflow-x:hidden;height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{height:100vh}.ifc-viewer-container,main{width:100%;display:flex;flex-direction:column}.ifc-viewer-container{height:100%;position:relative}.controls{padding:1rem;background-color:#1a1a1a;border-bottom:1px solid #333;display:flex;align-items:center;gap:1rem;z-index:10}.file-input-label{padding:.5rem 1rem;background-color:#0070f3;color:#fff;border-radius:4px;cursor:pointer;font-size:.875rem;font-weight:500;transition:background-color .2s}.file-input-label:hover:not(:has(+input:disabled)){background-color:#0051cc}.file-input{display:none}.error-message{color:#f44;font-size:.875rem;padding:.5rem 1rem;background-color:rgba(255,68,68,.1);border-radius:4px;border:1px solid rgba(255,68,68,.3)}.viewer-canvas{width:100%}.viewer-layout{flex:1 1;display:flex;flex-direction:row;overflow:hidden}.viewer-canvas{flex:1 1;position:relative;overflow:hidden}.viewer-canvas canvas{display:block;width:100%;height:100%;outline:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;touch-action:none;-webkit-touch-callout:none}.door-count{color:#0f0;font-size:.875rem;font-weight:500;padding:.5rem 1rem;background-color:rgba(0,255,0,.1);border-radius:4px}.batch-panel{width:400px;background-color:#2a2a2a;border-left:1px solid #333;overflow-y:auto;padding:1rem}.batch-processor{display:flex;flex-direction:column;gap:1.5rem}.batch-header h2{color:#fff;font-size:1.25rem;margin-bottom:.5rem}.batch-header p{color:#aaa;font-size:.875rem}.batch-header .warning-text{color:#fa0;font-size:.875rem}.style-controls{background-color:#1a1a1a;padding:1rem;border-radius:4px}.style-controls h3{color:#fff;font-size:1rem;margin-bottom:1rem}.control-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:1rem;gap:1rem}.control-group{display:flex;flex-direction:column;gap:.5rem}.control-group label{color:#ccc;font-size:.875rem}.control-group input[type=color]{width:100%;height:40px;border:1px solid #444;border-radius:4px;cursor:pointer}.control-group input[type=number]{width:100%;padding:.5rem;background-color:#1a1a1a;border:1px solid #444;border-radius:4px;color:#fff;font-size:.875rem}.batch-actions{display:flex;flex-direction:column;gap:1rem}.generate-button{padding:.75rem 1.5rem;background-color:#0070f3;color:#fff;border:none;border-radius:4px;font-size:1rem;font-weight:500;cursor:pointer;transition:background-color .2s}.generate-button:hover:not(:disabled){background-color:#0051cc}.generate-button:disabled{background-color:#555;cursor:not-allowed}.progress-bar{width:100%;height:8px;background-color:#333;border-radius:4px;overflow:hidden}.progress-fill{height:100%;background-color:#0070f3;transition:width .3s ease}.door-list{background-color:#1a1a1a;padding:1rem;border-radius:4px}.door-list h3{color:#fff;font-size:1rem;margin-bottom:1rem}.door-subset-info{color:#aaa;font-size:.75rem;margin-bottom:.75rem;font-style:italic}.door-items{gap:.75rem}.door-item,.door-items{display:flex;flex-direction:column}.door-item{gap:.5rem;padding:.75rem;background-color:#2a2a2a;border-radius:4px}.door-info{color:#ccc;font-size:.875rem}.door-actions{display:flex;gap:.5rem}.download-button{flex:1 1;padding:.5rem;background-color:#444;color:#fff;border:none;border-radius:4px;font-size:.875rem;cursor:pointer;transition:background-color .2s}.download-button:hover:not(:disabled){background-color:#555}.download-button:disabled{opacity:.5;cursor:not-allowed}.airtable-button{flex:1 1;padding:.5rem;background-color:#18bfff;color:#fff;border:none;border-radius:4px;font-size:.875rem;cursor:pointer;transition:background-color .2s}.airtable-button:hover:not(:disabled){background-color:#0da8e6}.airtable-button:disabled{opacity:.6;cursor:not-allowed}.airtable-button.sending{background-color:#f0ad4e}.airtable-button.success{background-color:#5cb85c}.airtable-button.error{background-color:#d9534f}