- Unify API: lib/api.ts uses /api/v1, inbox uses /api/inbox (rewrites) - Remove localhost refs: openapi, inbox page - Add rewrites: /api/inbox|tmc -> inbox-server, /api/v1 -> FastAPI - Add stub routes: knowledge/insights, recommendations, search, log-error - Transfer from PAPA: prompts (inspection, tmc), scripts, supabase, data/tmc-requests - Fix inbox-server: ORDER BY created_at, package.json - Remove redundant app/api/inbox/files route (rewrites handle it) - knowledge/ in gitignore (large PDFs) Co-authored-by: Cursor <cursoragent@cursor.com>
136 lines
2.6 KiB
CSS
136 lines
2.6 KiB
CSS
/* Глобальные стили с поддержкой доступности */
|
||
|
||
/* Базовые стили */
|
||
* {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
html {
|
||
scroll-behavior: smooth;
|
||
}
|
||
|
||
body {
|
||
margin: 0;
|
||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
||
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
||
sans-serif;
|
||
-webkit-font-smoothing: antialiased;
|
||
-moz-osx-font-smoothing: grayscale;
|
||
}
|
||
|
||
/* Фокус для доступности */
|
||
*:focus-visible {
|
||
outline: 2px solid #4a90e2;
|
||
outline-offset: 2px;
|
||
}
|
||
|
||
button:focus-visible,
|
||
a:focus-visible,
|
||
input:focus-visible,
|
||
select:focus-visible,
|
||
textarea:focus-visible {
|
||
outline: 2px solid #4a90e2;
|
||
outline-offset: 2px;
|
||
}
|
||
|
||
/* Скрытие элементов для screen readers */
|
||
.sr-only {
|
||
position: absolute;
|
||
width: 1px;
|
||
height: 1px;
|
||
padding: 0;
|
||
margin: -1px;
|
||
overflow: hidden;
|
||
clip: rect(0, 0, 0, 0);
|
||
white-space: nowrap;
|
||
border-width: 0;
|
||
}
|
||
|
||
/* Улучшение контраста для ссылок */
|
||
a {
|
||
color: #1e3a5f;
|
||
text-decoration: none;
|
||
}
|
||
|
||
a:hover {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
a:focus-visible {
|
||
outline: 2px solid #4a90e2;
|
||
outline-offset: 2px;
|
||
}
|
||
|
||
/* Стили для disabled элементов */
|
||
button:disabled,
|
||
input:disabled,
|
||
select:disabled,
|
||
textarea:disabled {
|
||
cursor: not-allowed;
|
||
opacity: 0.6;
|
||
}
|
||
|
||
/* Улучшение читаемости */
|
||
p, li {
|
||
line-height: 1.6;
|
||
}
|
||
|
||
/* Минимальный размер области клика (44x44px для touch) */
|
||
button,
|
||
a[role="button"] {
|
||
min-height: 44px;
|
||
min-width: 44px;
|
||
}
|
||
|
||
/* Skip to main content link (для screen readers) */
|
||
.skip-to-main {
|
||
position: absolute;
|
||
top: -40px;
|
||
left: 0;
|
||
background: #1e3a5f;
|
||
color: white;
|
||
padding: 8px;
|
||
text-decoration: none;
|
||
z-index: 100;
|
||
}
|
||
|
||
.skip-to-main:focus {
|
||
top: 0;
|
||
}
|
||
|
||
/* Улучшение контраста для текста */
|
||
.text-primary {
|
||
color: #1e3a5f; /* Контраст с белым фоном: ~8.5:1 - AAA */
|
||
}
|
||
|
||
.text-secondary {
|
||
color: #666; /* Контраст с белым фоном: ~7.1:1 - AAA */
|
||
}
|
||
|
||
.text-error {
|
||
color: #c62828; /* Контраст с белым фоном: ~7.5:1 - AAA */
|
||
}
|
||
|
||
/* Анимации с учетом prefers-reduced-motion */
|
||
@media (prefers-reduced-motion: reduce) {
|
||
*,
|
||
*::before,
|
||
*::after {
|
||
animation-duration: 0.01ms !important;
|
||
animation-iteration-count: 1 !important;
|
||
transition-duration: 0.01ms !important;
|
||
}
|
||
}
|
||
|
||
/* Высокий контраст режим */
|
||
@media (prefers-contrast: high) {
|
||
* {
|
||
border-color: currentColor;
|
||
}
|
||
|
||
button,
|
||
a {
|
||
border: 2px solid currentColor;
|
||
}
|
||
}
|