.visualizer-page{background:linear-gradient(#0f172a 0%,#1e293b 100%);min-height:calc(100vh - 72px);padding:0}.visualizer-header{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);z-index:10;background:#0f172ae6;border-bottom:1px solid #64748b26;justify-content:space-between;align-items:center;padding:16px 24px;display:flex;position:sticky;top:0}.visualizer-header-left{align-items:center;gap:16px;display:flex}.visualizer-title{color:#f1f5f9;align-items:center;gap:8px;margin:0;font-size:1.25rem;font-weight:700;display:flex}.visualizer-icon{font-size:1.5rem}.visualizer-vehicle-name{color:#a78bfa;background:#8b5cf61f;border:1px solid #8b5cf633;border-radius:20px;padding:4px 12px;font-size:.95rem;font-weight:500}.visualizer-back-btn{color:#94a3b8;cursor:pointer;background:#64748b26;border:1px solid #64748b33;border-radius:8px;padding:8px 16px;font-size:.875rem;transition:all .2s}.visualizer-back-btn:hover{color:#e2e8f0;background:#64748b40}.visualizer-search{text-align:center;max-width:600px;margin:80px auto;padding:0 24px}.visualizer-search-box{gap:8px;display:flex}.visualizer-search-input{color:#f1f5f9;background:#1e293bcc;border:1px solid #64748b4d;border-radius:12px;outline:none;flex:1;padding:14px 20px;font-size:1rem;transition:border-color .2s}.visualizer-search-input:focus{border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf626}.visualizer-search-input::placeholder{color:#64748b}.visualizer-search-btn{color:#fff;cursor:pointer;white-space:nowrap;background:linear-gradient(135deg,#8b5cf6,#6d28d9);border:none;border-radius:12px;padding:14px 28px;font-size:1rem;font-weight:600;transition:all .2s}.visualizer-search-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 20px #8b5cf666}.visualizer-search-btn:disabled{opacity:.5;cursor:not-allowed}.visualizer-error{color:#f87171;margin-top:12px;font-size:.9rem}.visualizer-main{grid-template-columns:1fr 360px;gap:0;min-height:calc(100vh - 137px);display:grid}.visualizer-canvas-area{flex-direction:column;gap:16px;padding:24px;display:flex}.vehicle-canvas-container{background:#0f172a;border:1px solid #64748b26;border-radius:16px;transition:border-color .3s;position:relative;overflow:hidden}.vehicle-canvas-container.vehicle-canvas--drag-over{border-color:#8b5cf6;box-shadow:0 0 30px #8b5cf633}.vehicle-canvas{width:100%;height:auto;display:block}.vehicle-canvas-drop-hint{color:#a78bfa;pointer-events:none;background:#8b5cf614;justify-content:center;align-items:center;font-size:1.25rem;font-weight:600;display:flex;position:absolute;inset:0}.visualizer-toolbar{align-items:center;gap:8px;padding:8px 0;display:flex}.toolbar-btn{color:#94a3b8;cursor:pointer;background:#1e293bcc;border:1px solid #64748b33;border-radius:10px;padding:10px 18px;font-size:.875rem;transition:all .2s}.toolbar-btn:hover{color:#e2e8f0;background:#334155cc}.visualizer-panel{background:#0f172af2;border-left:1px solid #64748b1f;max-height:calc(100vh - 137px);overflow-y:auto}.panel-section{border-bottom:1px solid #64748b1a;padding:20px}.panel-heading{color:#e2e8f0;margin:0 0 12px;font-size:.95rem;font-weight:600}.panel-footer{padding:16px 20px}.panel-disclaimer{color:#64748b;text-align:center;margin:0;font-size:.75rem}.vehicle-uploader{text-align:center;cursor:pointer;background:#1e293b66;border:2px dashed #64748b4d;border-radius:12px;padding:24px 16px;transition:all .3s}.vehicle-uploader:hover{background:#8b5cf60d;border-color:#8b5cf6}.uploader-icon{margin-bottom:8px;font-size:2rem}.uploader-title{color:#e2e8f0;margin:0 0 4px;font-size:.95rem;font-weight:600}.uploader-subtitle{color:#8b5cf6;margin:0 0 4px;font-size:.8rem}.uploader-hint{color:#64748b;margin:0 0 12px;font-size:.75rem}.uploader-skip-toggle{color:#94a3b8;cursor:pointer;align-items:center;gap:6px;font-size:.75rem;display:inline-flex}.uploader-skip-toggle input{accent-color:#8b5cf6}.vehicle-uploader--active{border-style:solid;border-color:#64748b33;padding:0;overflow:hidden}.uploader-preview{position:relative}.uploader-preview img{border-radius:10px;width:100%;display:block}.uploader-preview-processing{opacity:.6;filter:blur(1px)}.uploader-preview-done{opacity:1}.uploader-progress-overlay{background:#0f172a99;flex-direction:column;justify-content:center;align-items:center;gap:8px;display:flex;position:absolute;inset:0}.uploader-progress-bar{background:#64748b4d;border-radius:3px;width:70%;height:6px;overflow:hidden}.uploader-progress-fill{background:linear-gradient(90deg,#8b5cf6,#a78bfa);border-radius:3px;height:100%;transition:width .3s}.uploader-progress-text{color:#e2e8f0;font-size:.8rem;font-weight:500}.uploader-done-badge{color:#4ade80;background:#22c55e33;border:1px solid #22c55e4d;border-radius:16px;padding:4px 10px;font-size:.75rem;font-weight:600;position:absolute;top:8px;right:8px}.uploader-error{text-align:center;color:#f87171;padding:12px;font-size:.85rem}.uploader-reset-btn{color:#94a3b8;cursor:pointer;background:#1e293bcc;border:none;border-top:1px solid #64748b26;width:100%;padding:10px;font-size:.85rem;transition:all .2s}.uploader-reset-btn:hover{color:#e2e8f0;background:#334155cc}.wheel-picker-section{margin-bottom:16px}.wheel-picker-section:last-child{margin-bottom:0}.wheel-picker-heading{color:#e2e8f0;align-items:center;gap:6px;margin:0 0 10px;font-size:.9rem;font-weight:600;display:flex}.wheel-count{color:#64748b;font-size:.8rem;font-weight:400}.size-slider-container{padding:4px 0 24px;position:relative}.size-slider{appearance:none;cursor:pointer;background:#64748b33;border-radius:3px;outline:none;width:100%;height:6px}.size-slider::-webkit-slider-thumb{appearance:none;cursor:pointer;background:linear-gradient(135deg,#8b5cf6,#6d28d9);border-radius:50%;width:24px;height:24px;transition:transform .15s;box-shadow:0 2px 8px #8b5cf666}.size-slider::-webkit-slider-thumb:hover{transform:scale(1.15)}.size-slider-labels{justify-content:space-between;margin-top:6px;display:flex}.size-label{color:#64748b;font-size:.7rem;transition:color .2s}.size-label--active{color:#a78bfa;font-weight:700}.size-label--oem{text-underline-offset:3px;-webkit-text-decoration:underline #8b5cf666;text-decoration:underline #8b5cf666}.size-display{color:#a78bfa;background:#8b5cf626;border-radius:8px;padding:2px 10px;font-size:.8rem;font-weight:700;position:absolute;top:-4px;right:0}.wheel-grid{grid-template-columns:repeat(2,1fr);gap:8px;display:grid}.wheel-card{cursor:pointer;text-align:center;background:#1e293b99;border:1px solid #64748b26;border-radius:10px;padding:8px;transition:all .2s;position:relative}.wheel-card:hover{background:#1e293bcc;border-color:#8b5cf666;transform:translateY(-2px)}.wheel-card--selected{background:#8b5cf61a;border-color:#8b5cf6;box-shadow:0 0 16px #8b5cf626}.wheel-card-image{aspect-ratio:1;background:#0f172a66;border-radius:8px;width:100%;margin-bottom:6px;overflow:hidden}.wheel-card-image img{object-fit:cover;width:100%;height:100%}.wheel-card-placeholder{opacity:.3;justify-content:center;align-items:center;width:100%;height:100%;font-size:2rem;display:flex}.wheel-card-info{flex-direction:column;gap:1px;display:flex}.wheel-card-brand{color:#64748b;text-transform:uppercase;letter-spacing:.5px;font-size:.7rem}.wheel-card-model{color:#e2e8f0;white-space:nowrap;text-overflow:ellipsis;font-size:.8rem;font-weight:500;overflow:hidden}.wheel-card-check{color:#fff;background:#8b5cf6;border-radius:50%;justify-content:center;align-items:center;width:20px;height:20px;font-size:.7rem;font-weight:700;display:flex;position:absolute;top:4px;right:4px}.wheel-empty{text-align:center;color:#64748b;grid-column:1/-1;padding:16px 0;font-size:.85rem}.color-options{flex-wrap:wrap;gap:6px;display:flex}.color-btn{color:#94a3b8;cursor:pointer;background:#1e293b99;border:1px solid #64748b33;border-radius:20px;align-items:center;gap:5px;padding:6px 12px;font-size:.75rem;transition:all .2s;display:flex}.color-btn:hover{color:#e2e8f0;border-color:#8b5cf666}.color-btn--active{color:#a78bfa;background:#8b5cf61f;border-color:#8b5cf6}.color-dot{background:#64748b;border-radius:50%;width:10px;height:10px}.color-check{color:#8b5cf6;font-weight:700}.share-buttons{gap:8px;margin-left:auto;display:flex}.share-btn{cursor:pointer;border:none;border-radius:10px;padding:10px 18px;font-size:.875rem;font-weight:500;transition:all .2s}.share-btn--primary{color:#fff;background:linear-gradient(135deg,#8b5cf6,#6d28d9)}.share-btn--primary:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 20px #8b5cf666}.share-btn--secondary{color:#94a3b8;background:#1e293bcc;border:1px solid #64748b33}.share-btn--secondary:hover:not(:disabled){color:#e2e8f0;background:#334155cc}.share-btn:disabled{opacity:.5;cursor:not-allowed}@media (max-width:768px){.visualizer-main{grid-template-columns:1fr}.visualizer-panel{border-top:1px solid #64748b1f;border-left:none;max-height:none}.visualizer-canvas-area{padding:12px}.visualizer-header{padding:12px 16px}.visualizer-title{font-size:1rem}.visualizer-vehicle-name{font-size:.8rem}.visualizer-search{margin:40px auto}.visualizer-search-box{flex-direction:column}.wheel-grid{grid-template-columns:repeat(3,1fr)}.visualizer-toolbar{flex-wrap:wrap}}@media (max-width:480px){.wheel-grid{grid-template-columns:repeat(2,1fr)}}.photo-switcher{justify-content:center;align-items:center;gap:10px;padding:10px 0;display:flex}.photo-dot{cursor:pointer;background:#1e293b99;border:2px solid #94a3b866;border-radius:50%;width:14px;height:14px;padding:0;transition:all .25s;position:relative}.photo-dot:hover{border-color:#a78bfa99;transform:scale(1.2)}.photo-dot.active{background:linear-gradient(135deg,#6366f1,#8b5cf6);border-color:#a78bfa;transform:scale(1.15);box-shadow:0 0 10px #6366f180}.nobg-badge{pointer-events:none;font-size:.6rem;position:absolute;top:-10px;right:-10px}.panel-photo-gallery{flex-wrap:wrap;gap:8px;display:flex}.panel-photo-thumb{cursor:pointer;background:#0f172a99;border:2px solid #94a3b833;border-radius:8px;width:72px;height:54px;padding:0;transition:all .25s;position:relative;overflow:hidden}.panel-photo-thumb img{object-fit:cover;width:100%;height:100%}.panel-photo-thumb:hover{border-color:#a78bfa99;transform:scale(1.05)}.panel-photo-thumb.active{border-color:#a78bfa;box-shadow:0 0 10px #6366f180}.nobg-badge-thumb{pointer-events:none;font-size:.55rem;position:absolute;top:2px;right:2px}
