Files
QuoteForge/web/static/app.css
T
Mikhail ChusavitinandClaude Sonnet 5 681ec15e2b feat: режим индикаторов без цветовой кодировки + переустройство /setup
Новая настройка 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
2026-08-31 18:08:38 +03:00

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;
}