Новая настройка app_settings.indicator_mode (color | accessible), переключается на /setup. В режиме accessible сигналы, которые раньше держались только на цвете, переходят на форму/текст: - качество цены (0-9) — 5-ступенчатый signal-meter вместо градиентной точки/числа; единый модуль web/static/price-quality.js, ветвление по window.QF_INDICATOR_MODE; - вкладка «Ценообразование»: ведущая колонка-meter вместо заливки строк, пометка W вместо амбер-подсветки world-цен, ⚠ вместо красного «загрязнённого» итога. - GET/PUT /api/settings/ui (без рестарта), регистрируется в обоих наборах роутов. /setup переустроен: две колонки одной высоты, кнопка «Вернуться в приложение», исправлен <title>. Документация: bible-local 02/03/04 + decisions/2026-08-31-accessible-indicator-mode.md Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LbRvQgPZpM4SJTaX3iLrXk
86 lines
2.2 KiB
CSS
86 lines
2.2 KiB
CSS
/* QuoteForge custom styles */
|
|
/* Tailwind is loaded via CDN, this file is for any custom overrides */
|
|
|
|
.line-clamp-2 {
|
|
display: -webkit-box;
|
|
-webkit-line-clamp: 2;
|
|
-webkit-box-orient: vertical;
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* Pricing footer totals: instant hover popup explaining how much of the sum rests on
|
|
world-pricelist stand-in prices. A native title= tooltip was too slow and too easy to
|
|
miss on a number the user is meant to distrust. */
|
|
.pricing-total-tip {
|
|
position: relative;
|
|
cursor: help;
|
|
}
|
|
|
|
.pricing-total-tip > .pricing-total-tip__body {
|
|
visibility: hidden;
|
|
opacity: 0;
|
|
position: absolute;
|
|
right: 0;
|
|
bottom: calc(100% + 6px);
|
|
z-index: 30;
|
|
width: max-content;
|
|
max-width: 20rem;
|
|
padding: 0.5rem 0.625rem;
|
|
border-radius: 0.375rem;
|
|
background: #1f2937;
|
|
color: #f9fafb;
|
|
font-size: 0.75rem;
|
|
font-weight: 400;
|
|
line-height: 1.35;
|
|
text-align: left;
|
|
white-space: normal;
|
|
box-shadow: 0 4px 12px rgb(0 0 0 / 0.18);
|
|
transition: opacity 0.1s ease-in;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.pricing-total-tip:hover > .pricing-total-tip__body,
|
|
.pricing-total-tip:focus-visible > .pricing-total-tip__body {
|
|
visibility: visible;
|
|
opacity: 1;
|
|
}
|
|
|
|
/* Colour-blind-safe price-quality indicator (mono mode). 5-step signal meter,
|
|
single neutral hue — magnitude reads from the number of lit bars, not colour. */
|
|
.qf-quality-meter {
|
|
display: inline-flex;
|
|
align-items: flex-end;
|
|
gap: 1px;
|
|
height: 12px;
|
|
vertical-align: middle;
|
|
line-height: 0;
|
|
}
|
|
.qf-quality-meter > i {
|
|
display: inline-block;
|
|
width: 3px;
|
|
background-color: #d1d5db;
|
|
border-radius: 1px;
|
|
}
|
|
.qf-quality-meter > i.on {
|
|
background-color: #374151;
|
|
}
|
|
.qf-quality-meter > i:nth-child(1) { height: 30%; }
|
|
.qf-quality-meter > i:nth-child(2) { height: 45%; }
|
|
.qf-quality-meter > i:nth-child(3) { height: 62%; }
|
|
.qf-quality-meter > i:nth-child(4) { height: 80%; }
|
|
.qf-quality-meter > i:nth-child(5) { height: 100%; }
|
|
.qf-quality-meter[data-size="sm"] {
|
|
height: 10px;
|
|
gap: 1px;
|
|
}
|
|
.qf-quality-meter[data-size="sm"] > i {
|
|
width: 2px;
|
|
}
|
|
|
|
/* Leading meter column on the pricing tab tables (mono mode). */
|
|
.pricing-quality-meter {
|
|
width: 1%;
|
|
white-space: nowrap;
|
|
text-align: center;
|
|
}
|