/* ===== New step-based layout ===== */ .configurator { display: flex; flex-direction: column; min-height: calc(100vh - 60px); width: 100%; overflow: visible; } .loading { padding: 3rem; text-align: center; color: var(--text-muted); } .previewSection { padding: 0.5rem 1rem; } .stepContent { padding: 1.25rem 1.5rem 3rem; } /* ===== Desktop split: 3D (2/3) + options (1/3) ===== */ .splitLayout { display: flex; flex-direction: column; min-width: 0; } @media (min-width: 1000px) { .splitLayout { flex-direction: row; align-items: stretch; gap: 1.5rem; padding: 0.75rem 1.25rem 2.25rem; min-height: 0; } .previewSection { flex: 2; padding: 0; min-width: 0; /* allow canvas to shrink without overflow */ position: sticky; top: 58px; align-self: flex-start; z-index: 10; } .stepContent { flex: 1; /* Extra right padding so scrollbars don't cover slider thumbs/cursors */ padding: 0.75rem 1.4rem 0.25rem 0.9rem; min-width: 0; } } /* ===== Material Picker Modal (kept from original) ===== */ .matPickerOverlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.6); display: flex; align-items: center; justify-content: center; z-index: 1000; padding: 1rem; } .matPickerModal { background: #fff; border-radius: 12px; width: 95vw; max-width: 1400px; height: 90vh; display: flex; flex-direction: column; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); overflow: hidden; } .matPickerHeader { display: flex; align-items: center; gap: 1rem; padding: 1rem 1.5rem; border-bottom: 1px solid var(--border); flex-shrink: 0; } .matPickerHeader h2 { margin: 0; font-size: 1.15rem; font-weight: 600; white-space: nowrap; } .matPickerSearch { flex: 1; padding: 0.5rem 0.75rem; border: 1px solid var(--border); border-radius: 6px; font-size: 0.9rem; max-width: 350px; } .matPickerSearch:focus { outline: none; border-color: var(--action); box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.1); } .matPickerClose { background: none; border: none; font-size: 1.75rem; color: var(--text-muted); cursor: pointer; padding: 0 0.5rem; line-height: 1; margin-left: auto; } .matPickerClose:hover { color: var(--text); } .matPickerTabs { display: flex; gap: 0; padding: 0 1.5rem; border-bottom: 1px solid var(--border); overflow-x: auto; flex-shrink: 0; } .matPickerTab { padding: 0.6rem 1rem; border: none; background: none; font-size: 0.8rem; font-weight: 500; color: var(--text-muted); cursor: pointer; white-space: nowrap; border-bottom: 2px solid transparent; transition: all 0.15s; } .matPickerTab:hover { color: var(--action); } .matPickerTabActive { color: var(--action); border-bottom-color: var(--action); } .matPickerContent { flex: 1; overflow-y: auto; padding: 1.25rem 1.5rem; } .matPickerGroup { margin-bottom: 1.5rem; } .matPickerGroupTitle { font-size: 0.85rem; font-weight: 600; color: var(--text-muted); margin: 0 0 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; padding-bottom: 0.35rem; border-bottom: 1px solid var(--border); } .matPickerGrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); gap: 0.75rem; } .matPickerCard { position: relative; display: flex; flex-direction: column; align-items: center; gap: 0.35rem; padding: 0.5rem 0.35rem; border: 2px solid var(--border); border-radius: 8px; background: #fff; cursor: pointer; transition: all 0.15s; } .matPickerCard:hover { border-color: var(--action); transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } .matPickerCardSelected { border-color: var(--action); background: color-mix(in srgb, var(--action) 8%, #fff); box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.15); } .matPickerCardImg { width: 70px; height: 70px; object-fit: cover; border-radius: 6px; } .matPickerCardNoImg { width: 70px; height: 70px; background: var(--border); border-radius: 6px; display: flex; align-items: center; justify-content: center; color: var(--text-muted); font-size: 0.75rem; } .matPickerCardLabel { font-size: 0.7rem; text-align: center; color: var(--text); line-height: 1.2; max-width: 100%; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .matPickerCheck { position: absolute; top: 4px; right: 4px; width: 1.2rem; height: 1.2rem; background: var(--action); color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.7rem; font-weight: 700; } .matPickerEmpty { text-align: center; padding: 3rem; color: var(--text-muted); } @media (max-width: 700px) { .stepContent { padding: 1rem; } }