Files
apex/client/src/pages/Configurator.module.css
T
lejayandCursor 6c0d7e47b8 v2.0
Co-authored-by: Cursor <[email protected]>
2026-05-28 07:20:38 +02:00

243 lines
4.8 KiB
CSS

/* ===== 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; }
}