zov-tech/miniapp/assets/podbor.css
wasrusgen d7be644aed miniapp: price comparison matrix as PRIMARY view per category
WHAT CHANGED:
- New _renderPriceMatrix(models) — table with rows=models, columns=stores
- Inserted as PRIMARY view above model cards (was secondary accordion)
- Columns dynamically include only stores that returned data
- Sticky model column (left) — scrolls horizontally on mobile
- Best price per row highlighted: green bg + ✓ badge + green text
- Empty cells: '—' if no URL, 'смотреть →' if URL but no price yet
- 'Мин' column on far right — explicit cheapest price summary

CSS:
- .report-matrix-wrap with rounded card
- Sticky col-model with box-shadow on right edge
- Cell-price.best with rgba green background
- .best-mark circle badge

PREVIEW:
- Updated mock with 3 fridges + 3 hobs across multiple stores (real pricing spread)
- Demonstrates min-price highlighting working

UX:
- User can now visually compare 'where is it cheapest' at a glance
- Tap any cell with price → opens store page
- Tap empty cell with URL → opens search in store

NEXT: same matrix can become PDF/Excel export for client briefcase
2026-05-11 14:56:41 +03:00

1636 lines
36 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ============================================================
Подбор техники — стили (Editorial Calm)
============================================================ */
/* ----- Header ----- */
.podbor-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: var(--s4);
}
.podbor-back {
width: 28px;
height: 28px;
display: grid;
place-items: center;
color: var(--ink);
cursor: pointer;
}
.podbor-back svg { width: 20px; height: 20px; }
.podbor-title {
font-family: var(--font-mono);
font-size: 11px;
font-weight: 500;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--muted);
}
/* ----- Progress ----- */
.podbor-progress {
margin-bottom: var(--s5);
}
.podbor-progress-bar {
height: 2px;
background: var(--line);
border-radius: var(--r-pill);
overflow: hidden;
margin-bottom: 6px;
}
.podbor-progress-bar .bar {
height: 100%;
background: var(--accent-2);
border-radius: inherit;
transition: width 0.3s ease;
}
.podbor-progress-meta {
display: flex;
justify-content: space-between;
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--muted);
}
.podbor-progress-meta .num { color: var(--ink); }
/* ----- Лента категорий ----- */
.cat-strip {
display: flex;
gap: 6px;
overflow-x: auto;
margin: 0 -20px var(--s4);
padding: 0 20px 4px;
scrollbar-width: none;
-ms-overflow-style: none;
}
.cat-strip::-webkit-scrollbar { display: none; }
.cat-strip-chip {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 12px 6px 8px;
background: #fff;
border: 1px solid var(--line);
border-radius: var(--r-pill);
font-family: var(--font-sans);
font-size: 12px;
font-weight: 500;
letter-spacing: -0.005em;
color: var(--muted);
white-space: nowrap;
cursor: pointer;
flex-shrink: 0;
transition: all 0.12s;
}
.cat-strip-chip:active { transform: scale(0.96); }
.cat-strip-chip.active {
border-color: var(--accent-2);
background: var(--warm);
color: var(--ink);
box-shadow: 0 0 0 1px var(--accent-2) inset;
}
.cat-strip-chip.filled { color: var(--ink); }
.cat-strip-icon {
width: 16px;
height: 16px;
display: grid;
place-items: center;
color: var(--accent-2);
}
.cat-strip-icon svg { width: 16px; height: 16px; }
.cat-strip-tick {
width: 12px;
height: 12px;
display: grid;
place-items: center;
color: var(--accent-2);
margin-left: 2px;
}
.cat-strip-tick svg { width: 11px; height: 11px; stroke-width: 2.5; }
/* ----- Step container ----- */
.podbor-screen { animation: fadeIn 0.2s ease; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
.podbor-step {
display: flex;
flex-direction: column;
gap: var(--s4);
}
.display-title {
font-family: var(--font-display);
font-style: italic;
font-size: 32px;
font-weight: 400;
line-height: 1.05;
letter-spacing: -0.02em;
color: var(--ink);
margin: 0;
}
.display-title .accent { color: var(--accent-2); }
.lede {
font-size: 14.5px;
line-height: 1.45;
color: var(--ink-2);
margin: 0;
}
/* ----- Form basics ----- */
.field {
display: flex;
flex-direction: column;
gap: 4px;
}
.field-label {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--muted);
}
.field input,
.field textarea,
.field-inline input {
font-family: var(--font-ui);
font-size: 15px;
color: var(--ink);
background: var(--card);
border: 1px solid var(--line-strong);
border-radius: var(--r-btn);
padding: 11px 12px;
outline: none;
transition: border-color 0.12s;
width: 100%;
}
.field input:focus,
.field textarea:focus,
.field-inline input:focus { border-color: var(--accent-2); }
.field textarea { resize: vertical; min-height: 64px; font-family: var(--font-ui); }
.form-row { display: flex; flex-direction: column; gap: var(--s2); }
.form-row.two-col { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s2); }
/* ----- Block grouping ----- */
.block {
background: var(--card);
border: 1px solid var(--line-strong);
border-radius: var(--r-card);
padding: var(--s4);
display: flex;
flex-direction: column;
gap: var(--s3);
}
.block-head {
font-family: var(--font-mono);
font-size: 11px;
font-weight: 500;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--muted);
}
.hint {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.10em;
text-transform: uppercase;
color: var(--muted);
}
/* ----- Categories grid ----- */
.cat-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--s2);
}
.cat-card {
background: var(--card);
border: 1px solid var(--line-strong);
border-radius: var(--r-card);
padding: 12px;
display: flex;
flex-direction: column;
gap: 8px;
align-items: flex-start;
position: relative;
cursor: pointer;
transition: background 0.12s, border-color 0.12s;
min-height: 84px;
}
.cat-card:active { background: var(--paper-2); }
.cat-card.active {
border-color: var(--ink);
background: var(--paper-2);
}
.cat-card .cat-icon {
width: 26px; height: 26px;
display: grid; place-items: center;
color: var(--ink);
}
.cat-card .cat-icon svg { width: 22px; height: 22px; stroke-width: 1.4; }
.cat-card .cat-label {
font-family: var(--font-ui);
font-size: 13.5px;
font-weight: 600;
letter-spacing: -0.01em;
color: var(--ink);
}
.cat-card .cat-check {
position: absolute;
top: 10px; right: 10px;
width: 18px; height: 18px;
background: var(--accent-2);
color: var(--paper);
border-radius: var(--r-pill);
display: grid; place-items: center;
}
.cat-card .cat-check svg { width: 12px; height: 12px; stroke-width: 2.5; }
/* ----- Niches ----- */
.niche-list { display: flex; flex-direction: column; gap: var(--s2); }
.niche-row { display: flex; flex-direction: column; gap: 4px; }
.niche-label {
font-family: var(--font-ui);
font-size: 13px;
font-weight: 500;
color: var(--ink-2);
}
.niche-inputs {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 6px;
min-width: 0;
}
.niche-inputs input {
min-width: 0; /* критично — иначе input не даёт колонке сжиматься */
width: 100%;
font-family: var(--font-mono);
font-size: 12.5px;
padding: 8px 4px;
text-align: center;
background: var(--paper);
border: 1px solid var(--line);
border-radius: var(--r-tag);
color: var(--ink);
}
.niche-inputs input::placeholder { font-size: 11px; }
.budget-list { display: flex; flex-direction: column; gap: var(--s2); }
.field-inline {
display: flex; align-items: center; justify-content: space-between; gap: var(--s3);
font-family: var(--font-ui); font-size: 14px; color: var(--ink-2);
}
.field-inline input {
width: 130px; padding: 8px 10px; font-family: var(--font-mono); font-size: 13px;
background: var(--paper); border: 1px solid var(--line); border-radius: var(--r-tag);
text-align: right; color: var(--ink);
}
/* ----- Price range (от — до по категориям) ----- */
.price-list { display: flex; flex-direction: column; gap: var(--s3); }
.price-row {
display: flex;
flex-direction: column;
gap: 6px;
}
.price-label {
font-family: var(--font-ui);
font-size: 13.5px;
font-weight: 500;
color: var(--ink-2);
}
.price-inputs {
display: flex;
align-items: center;
gap: 6px;
min-width: 0;
}
.price-inputs input {
flex: 1;
min-width: 0;
width: 100%;
font-family: var(--font-mono);
font-size: 13px;
padding: 8px 10px;
text-align: center;
background: var(--paper);
border: 1px solid var(--line);
border-radius: var(--r-tag);
color: var(--ink);
}
.price-inputs .dash {
font-family: var(--font-mono);
color: var(--muted);
flex-shrink: 0;
}
.price-inputs .rub {
font-family: var(--font-mono);
font-size: 12px;
color: var(--muted);
flex-shrink: 0;
padding-left: 2px;
}
.price-total {
margin-top: var(--s2);
padding-top: var(--s2);
border-top: 1px solid var(--line);
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.10em;
text-transform: uppercase;
color: var(--ink-2);
text-align: right;
}
.price-total strong { font-family: var(--font-ui); font-size: 14px; color: var(--ink); font-weight: 600; }
.price-total.muted { color: var(--muted); }
/* ----- Option chips ----- */
.opt-list { display: flex; flex-wrap: wrap; gap: 6px; }
.opt {
font-family: var(--font-ui);
font-size: 13px;
font-weight: 500;
padding: 8px 12px;
border-radius: var(--r-pill);
border: 1px solid var(--line-strong);
background: var(--paper);
color: var(--ink-2);
cursor: pointer;
transition: all 0.12s;
}
.opt:active { transform: scale(0.97); }
.opt.on {
background: var(--ink);
color: var(--paper);
border-color: var(--ink);
}
/* ----- Brand chips ----- */
/* Тиры (Premium/Middle/Budget) различаются цветом, без явных текстовых ярлыков.
Внутренне храним tier для аналитики «температуры» клиента. */
.brand-chips {
display: flex;
flex-wrap: wrap;
gap: 6px;
padding: 6px 0;
border-top: 1px dashed var(--line);
}
.brand-chips:first-of-type {
border-top: none;
padding-top: 0;
}
.chip {
font-family: var(--font-ui);
font-size: 12.5px;
font-weight: 500;
padding: 6px 11px;
border-radius: var(--r-tag);
border: 1px solid;
cursor: pointer;
transition: all 0.12s;
position: relative;
}
/* Базовый цвет покоя по тирам — без слов, только тёплый/холодный оттенок */
.chip.tier-premium {
background: var(--paper);
color: var(--accent-2); /* walnut */
border-color: rgba(107, 74, 43, 0.35);
}
.chip.tier-middle {
background: var(--paper);
color: var(--ink-2);
border-color: var(--line-strong);
}
.chip.tier-budget {
background: var(--paper);
color: var(--muted);
border-color: var(--line);
}
/* Состояние preferred — заливка цветом тира */
.chip.tier-premium.status-preferred {
background: var(--accent-2); /* walnut */
color: var(--paper);
border-color: var(--accent-2);
font-weight: 600;
}
.chip.tier-middle.status-preferred {
background: var(--ink);
color: var(--paper);
border-color: var(--ink);
font-weight: 600;
}
.chip.tier-budget.status-preferred {
background: var(--muted);
color: var(--paper);
border-color: var(--muted);
font-weight: 600;
}
.chip.status-preferred::before { content: "★ "; }
/* Состояние acceptable — обводка цветом тира, прозрачная заливка */
.chip.status-acceptable {
background: var(--paper-2);
}
.chip.tier-premium.status-acceptable { border-color: var(--accent-2); color: var(--accent-2); }
.chip.tier-middle.status-acceptable { border-color: var(--ink); color: var(--ink); }
.chip.tier-budget.status-acceptable { border-color: var(--muted); color: var(--ink-2); }
.chip.status-acceptable::before { content: "✓ "; }
/* Состояние avoid — приглушённый, перечёркнутый */
.chip.status-avoid {
background: #F5E1DC;
border-color: #C7705A;
color: #8A3E2A;
text-decoration: line-through;
opacity: 0.85;
}
.chip.status-avoid::before { content: "✗ "; text-decoration: none; display: inline-block; }
/* Disabled кнопка */
.btn-primary[disabled],
.btn-secondary[disabled] {
opacity: 0.4;
cursor: not-allowed;
pointer-events: none;
}
/* ----- Summary ----- */
.summary-block { gap: 8px; }
.summary-block .kv {
display: flex; justify-content: space-between; align-items: baseline;
padding: 6px 0;
border-bottom: 1px solid var(--line);
font-family: var(--font-ui);
font-size: 14px;
}
.summary-block .kv:last-child { border-bottom: none; }
.summary-block .kv span {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--muted);
}
.summary-block .kv strong { font-weight: 600; color: var(--ink); }
/* ----- CTA / buttons ----- */
.podbor-cta-row {
display: flex; gap: var(--s2);
margin-top: var(--s3);
}
.btn-primary, .btn-secondary {
flex: 1;
font-family: var(--font-ui);
font-size: 14.5px;
font-weight: 600;
letter-spacing: -0.01em;
padding: 12px var(--s4);
border-radius: var(--r-btn);
cursor: pointer;
transition: opacity 0.12s, background 0.12s;
}
.btn-primary {
background: var(--ink);
color: var(--paper);
}
.btn-primary:active { opacity: 0.85; }
.btn-primary:disabled { opacity: 0.6; cursor: not-allowed; }
.btn-secondary {
background: transparent;
color: var(--ink);
border: 1px solid var(--line-strong);
}
.btn-secondary:active { background: var(--paper-2); }
/* ----- Submit result ----- */
.submit-result { margin-top: var(--s3); }
.submit-result .success {
display: flex; align-items: center; gap: var(--s3);
background: var(--paper-2);
border: 1px solid var(--accent-2);
border-radius: var(--r-card);
padding: var(--s4);
}
.submit-result .success-icon {
width: 36px; height: 36px;
background: var(--accent-2);
color: var(--paper);
border-radius: var(--r-pill);
display: grid; place-items: center;
flex-shrink: 0;
}
.submit-result .success-icon svg { width: 20px; height: 20px; stroke-width: 2.5; }
.submit-result .success-title {
font-family: var(--font-ui);
font-size: 15px;
font-weight: 600;
color: var(--ink);
}
.submit-result .success-sub {
font-family: var(--font-mono);
font-size: 10.5px;
letter-spacing: 0.10em;
text-transform: uppercase;
color: var(--muted);
margin-top: 2px;
}
.submit-result .error {
background: rgba(192, 57, 43, 0.08);
border: 1px solid rgba(192, 57, 43, 0.30);
color: #8C3F1E;
border-radius: var(--r-card);
padding: var(--s3) var(--s4);
font-size: 14px;
}
.spinner-inline {
display: inline-block;
width: 14px; height: 14px;
border: 1.5px solid rgba(251,247,240,0.3);
border-top-color: var(--paper);
border-radius: var(--r-pill);
animation: spin 0.7s linear infinite;
margin-right: 6px;
vertical-align: -2px;
}
.empty { text-align: center; color: var(--muted); padding: var(--s7) 0; }
/* ============================================================
Detail menu — list of categories with status
============================================================ */
.detail-list {
display: flex;
flex-direction: column;
gap: var(--s2);
}
.detail-card {
display: flex;
align-items: center;
gap: var(--s3);
background: var(--card);
border: 1px solid var(--line-strong);
border-radius: var(--r-card);
padding: var(--s3) var(--s4);
cursor: pointer;
transition: background 0.12s;
text-align: left;
}
.detail-card:active { background: var(--paper-2); }
.detail-card.done { border-color: var(--accent-2); }
.detail-icon {
width: 28px;
height: 28px;
display: grid;
place-items: center;
color: var(--ink);
flex-shrink: 0;
}
.detail-icon svg { width: 22px; height: 22px; stroke-width: 1.4; }
.detail-card.done .detail-icon { color: var(--accent-2); }
.detail-text { flex: 1; min-width: 0; }
.detail-name {
font-family: var(--font-ui);
font-size: 14.5px;
font-weight: 600;
letter-spacing: -0.01em;
color: var(--ink);
}
.detail-sum {
font-family: var(--font-mono);
font-size: 10.5px;
letter-spacing: 0.06em;
color: var(--muted);
margin-top: 2px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.detail-card.done .detail-sum { color: var(--ink-2); text-transform: none; letter-spacing: 0; font-family: var(--font-ui); font-size: 12.5px; }
.detail-status {
flex-shrink: 0;
width: 22px;
height: 22px;
display: grid;
place-items: center;
color: var(--muted-2);
}
.detail-status svg { width: 18px; height: 18px; }
.detail-card.done .detail-status {
width: 22px;
height: 22px;
background: var(--accent-2);
color: var(--paper);
border-radius: var(--r-pill);
}
.detail-card.done .detail-status svg { width: 14px; height: 14px; stroke-width: 2.5; }
/* ============================================================
Category detail screen
============================================================ */
.cat-detail-header {
display: flex;
align-items: center;
gap: var(--s3);
margin-bottom: var(--s4);
}
.cat-detail-icon {
width: 30px;
height: 30px;
display: grid;
place-items: center;
color: var(--accent-2);
}
.cat-detail-icon svg { width: 26px; height: 26px; stroke-width: 1.4; }
.cat-detail-title {
font-family: var(--font-display);
font-style: italic;
font-size: 24px;
font-weight: 400;
margin: 0;
color: var(--ink);
flex: 1;
}
.param-group {
display: flex;
flex-direction: column;
gap: 6px;
padding: var(--s3) 0;
border-top: 1px solid var(--line);
}
.param-group:first-of-type {
border-top: none;
padding-top: 0;
}
.param-label {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--muted);
}
/* ============================================================
Accordion "Подробнее"
============================================================ */
.accordion-head {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
padding: var(--s3) var(--s4);
background: var(--card);
border: 1px solid var(--line-strong);
border-radius: var(--r-card);
font-family: var(--font-mono);
font-size: 11px;
font-weight: 500;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--muted);
cursor: pointer;
}
.accordion-chev {
display: grid;
place-items: center;
color: var(--muted);
transition: transform 0.18s;
}
.accordion-chev svg { width: 16px; height: 16px; transform: rotate(90deg); transition: transform 0.18s; }
.accordion-chev.open svg { transform: rotate(-90deg); }
.accordion-body {
overflow: hidden;
max-height: 0;
transition: max-height 0.25s ease;
padding: 0;
}
.accordion-body.open {
max-height: 2000px;
padding-top: var(--s3);
}
.accordion-body > * + * { margin-top: var(--s3); }
/* ============================================================
Feature card (in accordion)
============================================================ */
.feature-list {
display: flex;
flex-direction: column;
gap: 6px;
}
.feature {
display: grid;
grid-template-columns: 1fr 22px;
gap: var(--s2);
align-items: center;
background: var(--card);
border: 1px solid var(--line);
border-radius: var(--r-tag);
padding: 10px 12px;
cursor: pointer;
text-align: left;
transition: all 0.12s;
}
.feature:active { background: var(--paper-2); }
.feature.on {
border-color: var(--accent-2);
background: var(--paper-2);
}
.feature-name {
grid-column: 1 / 2;
font-family: var(--font-ui);
font-size: 13.5px;
font-weight: 600;
color: var(--ink);
line-height: 1.2;
}
.feature-hint {
grid-column: 1 / 2;
font-family: var(--font-ui);
font-size: 12px;
color: var(--muted);
line-height: 1.3;
margin-top: 2px;
}
.feature-tick {
grid-column: 2 / 3;
grid-row: 1 / 3;
width: 22px;
height: 22px;
display: grid;
place-items: center;
border: 1px solid var(--line-strong);
border-radius: var(--r-pill);
align-self: center;
}
.feature.on .feature-tick {
background: var(--accent-2);
color: var(--paper);
border-color: var(--accent-2);
}
.feature.on .feature-tick svg { width: 12px; height: 12px; stroke-width: 2.5; }
/* ============================================================
Иерархический wizard (новая схема steps[])
============================================================ */
.podbor-wizard { gap: var(--s4); }
.wiz-header {
display: grid;
grid-template-columns: 28px 1fr 28px;
align-items: center;
gap: 12px;
margin-bottom: 4px;
}
.wiz-header-meta {
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
}
.wiz-cat {
font-family: var(--font-display);
font-style: italic;
font-size: 20px;
line-height: 1;
letter-spacing: -0.01em;
color: var(--ink);
}
.wiz-progress {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--muted);
}
.wiz-cat-icon {
width: 28px;
height: 28px;
color: var(--accent-2);
display: grid;
place-items: center;
}
.wiz-cat-icon svg { width: 22px; height: 22px; }
/* Чипы прошлых ответов */
.wiz-chips {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin: -4px 0 4px;
}
.wiz-chip {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--accent-2);
background: var(--warm);
border: 1px solid var(--accent-2);
padding: 4px 10px;
border-radius: var(--r-pill);
cursor: pointer;
transition: background 0.12s;
}
.wiz-chip:active { background: #EAD9B6; }
/* Заголовок шага */
.wiz-title {
font-family: var(--font-display);
font-style: italic;
font-size: 24px;
font-weight: 400;
line-height: 1.1;
letter-spacing: -0.02em;
color: var(--ink);
margin: 6px 0 0;
}
.wiz-multi {
font-style: normal;
font-family: var(--font-mono);
font-size: 11px;
font-weight: 500;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--muted);
}
/* Сетка карточек (cards-режим — с пиктограммами) */
.wiz-grid { gap: 10px; }
.wiz-grid--cards {
display: grid;
grid-template-columns: 1fr 1fr;
}
@media (min-width: 540px) {
.wiz-grid--cards { grid-template-columns: repeat(3, 1fr); }
}
/* Пин-режим (без пиктограмм, компактные таблетки) */
.wiz-grid--pins {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.wiz-card {
position: relative;
background: #fff;
border: 1px solid var(--line);
border-radius: var(--r-card, 14px);
padding: 12px 10px 14px;
display: flex;
flex-direction: column;
align-items: center;
gap: 6px;
cursor: pointer;
transition: all 0.12s;
text-align: center;
font: inherit;
color: var(--ink);
}
.wiz-card:active { background: var(--warm); transform: scale(0.98); }
.wiz-card.on {
border-color: var(--accent-2);
background: var(--warm);
box-shadow: 0 0 0 1px var(--accent-2) inset;
}
.wiz-card.star::before {
content: "⭐";
position: absolute;
top: 6px;
left: 8px;
font-size: 11px;
opacity: 0.85;
}
.wiz-pict {
width: 72px;
height: 96px;
display: grid;
place-items: center;
}
.wiz-pict svg { width: 100%; height: 100%; display: block; }
.wiz-pict-placeholder {
width: 72px;
height: 96px;
background: repeating-linear-gradient(45deg, transparent, transparent 6px, rgba(107, 74, 43, 0.06) 6px, rgba(107, 74, 43, 0.06) 7px);
border: 1px dashed var(--line);
border-radius: 6px;
}
.wiz-label {
font-family: var(--font-sans);
font-size: 13.5px;
font-weight: 600;
letter-spacing: -0.01em;
color: var(--ink);
line-height: 1.2;
}
.wiz-hint {
font-family: var(--font-mono);
font-size: 9.5px;
font-weight: 500;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--muted);
line-height: 1.25;
}
.wiz-tick {
position: absolute;
top: 6px;
right: 6px;
width: 20px;
height: 20px;
background: var(--accent-2);
color: var(--paper);
border-radius: var(--r-pill);
display: grid;
place-items: center;
}
.wiz-tick svg { width: 11px; height: 11px; stroke-width: 2.5; }
/* Пин-карточка (компактная таблетка, без пиктограммы) */
.wiz-card--pin {
display: inline-flex;
align-items: center;
flex-direction: row;
gap: 8px;
padding: 9px 14px 9px 14px;
border-radius: var(--r-pill);
width: auto;
text-align: left;
}
.wiz-card--pin .wiz-pict,
.wiz-card--pin .wiz-pict-placeholder { display: none; }
.wiz-card--pin .wiz-label {
font-size: 13px;
font-weight: 500;
letter-spacing: -0.005em;
}
.wiz-card--pin .wiz-hint {
font-size: 9.5px;
letter-spacing: 0.04em;
text-transform: none;
font-family: var(--font-sans);
font-weight: 400;
color: var(--muted);
}
.wiz-card--pin .wiz-tick {
position: static;
width: 14px;
height: 14px;
}
.wiz-card--pin .wiz-tick svg { width: 9px; height: 9px; }
.wiz-card--pin.star { padding-left: 26px; }
.wiz-card--pin.star::before { top: 50%; transform: translateY(-50%); }
/* Review-экран */
.rev-list {
background: #fff;
border: 1px solid var(--line);
border-radius: var(--r-card, 14px);
overflow: hidden;
}
.rev-row {
display: flex;
justify-content: space-between;
align-items: baseline;
padding: 12px 14px;
border-bottom: 1px solid var(--line);
gap: 12px;
}
.rev-row:last-child { border-bottom: 0; }
.rev-label {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--muted);
flex-shrink: 0;
}
.rev-val {
font-family: var(--font-sans);
font-size: 14px;
font-weight: 500;
color: var(--ink);
text-align: right;
line-height: 1.3;
}
.rev-val .muted { color: var(--muted); font-weight: 400; }
/* ============================================================
Inline-отчёт после отправки подбора
============================================================ */
.report {
margin-top: 20px;
display: flex;
flex-direction: column;
gap: 18px;
}
.report-head .kicker {
margin-bottom: 4px;
}
.report-summary {
font-size: 14px;
line-height: 1.5;
color: var(--ink-2);
margin: 6px 0 0;
padding: 12px 14px;
background: var(--warm);
border-radius: 12px;
border-left: 3px solid var(--accent-2);
}
.report-cat {
display: flex;
flex-direction: column;
gap: 12px;
}
.report-cat-head {
font-family: var(--font-display);
font-style: italic;
font-weight: 400;
font-size: 22px;
line-height: 1;
letter-spacing: -0.01em;
color: var(--ink);
margin: 0;
display: flex;
align-items: center;
gap: 10px;
padding-bottom: 8px;
border-bottom: 1px solid var(--line);
}
.report-cat-icon {
width: 24px;
height: 24px;
display: grid;
place-items: center;
color: var(--accent-2);
}
.report-cat-icon svg { width: 22px; height: 22px; }
.report-models {
display: flex;
flex-direction: column;
gap: 12px;
}
.report-model {
display: grid;
grid-template-columns: 88px 1fr;
gap: 12px;
padding: 12px;
background: #fff;
border: 1px solid var(--line);
border-radius: 14px;
position: relative;
}
.report-model-img {
width: 88px;
height: 88px;
background: var(--warm);
border-radius: 10px;
overflow: hidden;
display: grid;
place-items: center;
}
.report-model-img img {
width: 100%;
height: 100%;
object-fit: contain;
background: #fff;
}
.report-model-img.placeholder {
background: repeating-linear-gradient(45deg, var(--warm), var(--warm) 5px, #F0E8D5 5px, #F0E8D5 10px);
}
.report-model-img.placeholder::after {
content: "📷";
font-size: 24px;
opacity: 0.4;
}
.report-model-body {
display: flex;
flex-direction: column;
gap: 4px;
min-width: 0;
}
.report-model-brand {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--muted);
}
.report-model-name {
font-family: var(--font-sans);
font-size: 15px;
font-weight: 600;
letter-spacing: -0.01em;
color: var(--ink);
line-height: 1.2;
margin-bottom: 2px;
}
.report-model-meta {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.06em;
color: var(--muted);
display: flex;
flex-wrap: wrap;
gap: 4px 8px;
margin: 2px 0;
}
.report-model-meta .rating { color: var(--accent-2); font-weight: 500; }
.report-model-price {
font-family: var(--font-display);
font-style: italic;
font-size: 17px;
color: var(--ink);
margin: 4px 0;
letter-spacing: -0.01em;
}
.report-model-price strong { font-style: normal; font-weight: 600; }
.report-model-price .muted { font-style: normal; font-size: 13px; color: var(--muted); }
.report-highlights {
font-size: 12px;
line-height: 1.4;
color: var(--ink-2);
margin-top: 2px;
}
.report-pros {
font-size: 12px;
line-height: 1.4;
color: #2A6B3F;
margin-top: 2px;
}
.report-cons {
font-size: 12px;
line-height: 1.4;
color: #8A3E2A;
margin-top: 2px;
}
/* Блоки плюсов/минусов с маркированными списками */
.report-pros-block, .report-cons-block {
margin-top: 8px;
padding: 8px 10px;
border-radius: 8px;
font-size: 12.5px;
line-height: 1.45;
}
.report-pros-block {
background: rgba(42, 107, 63, 0.08);
border-left: 2px solid #2A6B3F;
}
.report-cons-block {
background: rgba(138, 62, 42, 0.08);
border-left: 2px solid #8A3E2A;
}
.pc-head {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.14em;
text-transform: uppercase;
margin-bottom: 4px;
}
.report-pros-block .pc-head { color: #2A6B3F; }
.report-cons-block .pc-head { color: #8A3E2A; }
.pc-list {
margin: 0;
padding-left: 16px;
color: var(--ink);
}
.pc-list li { margin: 2px 0; }
.report-reasoning {
margin-top: 8px;
padding: 8px 12px;
background: var(--warm);
border-radius: 8px;
font-style: italic;
font-size: 13px;
line-height: 1.45;
color: var(--walnut);
}
.report-cat-analysis {
font-size: 13.5px;
line-height: 1.5;
color: var(--ink-2);
font-style: italic;
padding: 10px 14px;
background: #FFFCF6;
border: 1px solid var(--line);
border-left: 3px solid var(--accent-2);
border-radius: 8px;
margin: 4px 0 4px;
}
.report-links-head {
font-family: var(--font-mono);
font-size: 9.5px;
font-weight: 500;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--muted);
margin-bottom: 4px;
width: 100%;
}
.report-links-empty {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.08em;
color: var(--muted);
font-style: italic;
margin-top: 8px;
}
/* Цветовая дифференциация бейджей магазинов */
.report-link--ozon { border-color: #0044CC; color: #0044CC; }
.report-link--citilink { border-color: #FFBA00; color: #B57E00; }
.report-link--wb { border-color: #CB11AB; color: #CB11AB; }
.report-link--yamarket { border-color: #FC3F1D; color: #FC3F1D; }
.report-link--dns { border-color: #FA9300; color: #C26C00; }
.report-links {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-top: 8px;
}
.report-link {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--accent-2);
text-decoration: none;
border: 1px solid var(--accent-2);
padding: 4px 9px;
border-radius: var(--r-pill);
transition: background 0.12s;
}
.report-link:active { background: var(--warm); }
/* ============================================================
Матрица цен по магазинам (PRIMARY view категории)
============================================================ */
.report-matrix-wrap {
background: #fff;
border: 1px solid var(--line);
border-radius: 14px;
overflow: hidden;
margin: 8px 0 16px;
}
.report-matrix-head {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--muted);
padding: 12px 14px 8px;
}
.report-matrix-scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
scrollbar-width: thin;
}
.report-matrix {
width: 100%;
border-collapse: collapse;
font-size: 12.5px;
min-width: 100%;
}
.report-matrix thead th {
background: var(--warm);
font-family: var(--font-mono);
font-size: 9.5px;
font-weight: 500;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--muted);
padding: 10px 12px;
text-align: left;
border-bottom: 1px solid var(--line);
white-space: nowrap;
position: relative;
}
.report-matrix .col-model {
position: sticky;
left: 0;
background: var(--warm);
z-index: 2;
min-width: 130px;
box-shadow: 2px 0 4px rgba(31, 26, 20, 0.06);
}
.report-matrix tbody .col-model {
background: #FFFCF6;
}
.report-matrix tbody td {
padding: 10px 12px;
border-top: 1px solid var(--line);
vertical-align: middle;
white-space: nowrap;
}
.report-matrix .m-brand {
font-family: var(--font-mono);
font-size: 9px;
font-weight: 500;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--muted);
margin-bottom: 2px;
}
.report-matrix .m-name {
font-family: var(--font-sans);
font-size: 12.5px;
font-weight: 600;
color: var(--ink);
white-space: normal;
line-height: 1.25;
}
.report-matrix .cell-price {
font-size: 12.5px;
color: var(--ink);
}
.report-matrix .cell-price a {
color: var(--ink);
text-decoration: none;
border-bottom: 1px dashed transparent;
transition: border 0.12s;
}
.report-matrix .cell-price a:active { border-bottom-color: var(--accent-2); }
.report-matrix .cell-price.empty { color: var(--muted); text-align: center; }
.report-matrix .cell-price.best {
background: rgba(42, 107, 63, 0.10);
}
.report-matrix .cell-price.best a,
.report-matrix .cell-price.best strong {
color: #1F5530;
}
.report-matrix .best-mark {
display: inline-block;
width: 16px;
height: 16px;
background: #2A6B3F;
color: #fff;
border-radius: 50%;
text-align: center;
font-size: 10px;
font-weight: 700;
line-height: 16px;
margin-left: 4px;
vertical-align: middle;
}
.cell-noprice-link {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.06em;
color: var(--accent-2);
}
.report-matrix .col-best {
font-size: 12.5px;
color: var(--ink);
font-weight: 600;
background: #FFFCF6;
}
.report-matrix-hint {
font-size: 11.5px;
color: var(--muted);
font-style: italic;
padding: 10px 14px 14px;
border-top: 1px dashed var(--line);
}
/* Сравнительная таблица — accordion (legacy, оставлен для совместимости) */
.report-compare {
background: #fff;
border: 1px solid var(--line);
border-radius: 14px;
margin-top: 4px;
overflow: hidden;
}
.report-compare summary {
font-family: var(--font-mono);
font-size: 11px;
font-weight: 500;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--muted);
padding: 12px 14px;
cursor: pointer;
list-style: none;
display: flex;
justify-content: space-between;
align-items: center;
}
.report-compare summary::-webkit-details-marker { display: none; }
.report-compare summary::after {
content: "↓";
font-size: 12px;
color: var(--muted);
transition: transform 0.2s;
}
.report-compare[open] summary::after { transform: rotate(180deg); }
.report-compare table {
width: 100%;
border-collapse: collapse;
font-size: 12px;
}
.report-compare th,
.report-compare td {
padding: 8px 10px;
text-align: left;
border-top: 1px solid var(--line);
vertical-align: top;
}
.report-compare th {
font-family: var(--font-mono);
font-size: 9.5px;
font-weight: 500;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--muted);
background: var(--warm);
}
.report-compare td strong { font-weight: 600; color: var(--ink); }
/* Итого */
.report-total {
padding: 14px 16px;
background: var(--ink);
color: var(--paper);
border-radius: 14px;
display: flex;
align-items: baseline;
gap: 12px;
flex-wrap: wrap;
}
.report-total .lbl {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.16em;
text-transform: uppercase;
opacity: 0.7;
}
.report-total strong {
font-family: var(--font-display);
font-style: italic;
font-size: 20px;
font-weight: 500;
letter-spacing: -0.01em;
}
.report-total .status {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.1em;
text-transform: uppercase;
opacity: 0.7;
margin-left: auto;
}
.report-warnings {
background: #F5E1DC;
border: 1px solid #C7705A;
border-radius: 12px;
padding: 10px 14px;
color: #8A3E2A;
font-size: 13px;
line-height: 1.5;
}
.report-warnings > div { margin: 2px 0; }