zov-tech/miniapp/assets/podbor.css
wasrusgen ca342c0641 ai+report: deeper analysis — required pros/cons, category insights, source visibility
AI PROMPT (ai.py):
- Requires minimum 3 pros + 2 cons per model with NUMBERS (36 dB, 463 L, A++, не 'тихий/большой')
- New field 'reasoning' — 1-sentence why-this-model justification
- New per-category 'analysis' — 2-3 sentences about trade-offs
- Strict rules: no fake article numbers, account for parallel-import price markup
- Russian market 2026 awareness: Haier/Korting up, Bosch/Siemens ⚠

TELEGRAM FORMAT (main.py):
- Renders category analysis as italic prelude
- Lists pros/cons as bullet lists (up to 4 pros, 3 cons)
- Shows '🛒 Нашли в: OZON · Citilink · WB' line listing successful sources
- Rating + reviews + stores count line: '📊 ★ 4.7 · 1242 отзыв. · 12 магаз.'
- Direct link to best store: '🔗 Открыть в магазине'

WB PARSER:
- Generates 3 query variants per request: full → brand+model → model only
- Increases hit rate when AI search_query is too verbose
- First non-empty variant wins

MINIAPP REPORT (podbor.js + podbor.css):
- Category analysis block above models (italic, walnut left-border)
- Pros block: green tinted bg, bullet list, header 'Плюсы'
- Cons block: terracotta tinted bg, bullet list, header 'Минусы'
- Reasoning chip: 💡 italic in warm background
- Source badges with per-store price '<store> · 89 990 ₽'
- Color-coded source links: OZON blue, Citilink yellow, WB pink, Я.Маркет red, DNS orange
- 'X магазинов нашли товар' header + plural fix
- '— не найден' fallback if 0 sources

PREVIEW (preview-report.html):
- Mock updated with Haier as flagship (more relevant for 2026 RF)
- Shows analysis, reasoning, source spread (4 stores with different prices)
2026-05-11 14:34:08 +03:00

1494 lines
32 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); }
/* Сравнительная таблица — accordion */
.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; }