axe-web/css/style.css
edadmin ca3392157a
Some checks are pending
web / check (push) Waiting to run
web / build-web (push) Waiting to run
web / deploy (push) Blocked by required conditions
feat: prod web image + Gitea Actions, demo chips removed
2026-10-18 22:44:06 +03:00

311 lines
9.3 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.

/* Минимальные стили: читаемость важнее красоты. */
* { box-sizing: border-box; }
body {
margin: 0;
font: 15px/1.45 system-ui, -apple-system, "Segoe UI", sans-serif;
background: #f2f4f7;
color: #1c2733;
}
.hidden { display: none !important; }
h1 { margin: 0 0 4px; font-size: 24px; }
h2 { margin: 0; font-size: 20px; }
h3 { margin: 0 0 10px; font-size: 17px; }
.hint { margin: 0 0 16px; color: #64748b; }
/* Баннер второго круга на заявке «на доработке»: мастеру видно, что
делать дальше; цветом отличается от серых подсказок. */
.notice {
margin: 0 0 12px;
padding: 10px 12px;
background: #fef3c7;
border: 1px solid #fcd34d;
border-radius: 8px;
color: #92400e;
}
/* Ссылка-кнопка внутри подсказки («Изменить расписание»). */
button.link {
background: none;
border: 0;
padding: 0;
font: inherit;
color: #2563eb;
cursor: pointer;
}
button.link:hover { text-decoration: underline; }
.empty { color: #64748b; padding: 12px 0; }
.error { color: #b42318; min-height: 18px; font-size: 13px; }
/* --- карточки --- */
.card {
background: #fff;
border: 1px solid #e2e8f0;
border-radius: 10px;
padding: 16px;
margin-bottom: 16px;
}
/* --- модальное окно (создание заявки) --- */
/* Затемнённый фон + узкий диалог по центру: форма не разворачивается
на всё окно и не уезжает под низ списка. */
.modal-overlay {
position: fixed;
inset: 0;
background: rgba(15, 23, 42, 0.45);
display: flex;
align-items: flex-start;
justify-content: center;
padding: 48px 16px 16px;
z-index: 20;
overflow-y: auto;
}
.modal {
background: #fff;
border: 1px solid #e2e8f0;
border-radius: 10px;
padding: 18px;
width: 100%;
max-width: 440px;
box-shadow: 0 12px 32px rgba(15, 23, 42, 0.18);
}
.modal-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 12px;
}
.modal-head h3 { margin: 0; }
.modal-close {
border: 0;
background: transparent;
font-size: 20px;
line-height: 1;
color: #64748b;
cursor: pointer;
padding: 4px 6px;
border-radius: 6px;
}
.modal-close:hover { background: #f1f5f9; color: #1c2733; }
/* Диалог один: поля в столбик, чтобы не распирали его вширь. */
.modal .form { flex-direction: column; align-items: stretch; gap: 10px; }
.modal .form label { flex: 1 1 auto; }
/* Строка «Каждые N [единица]» в окне условий: поля рядом, без растяжки. */
#sched .row label { flex: 0 0 auto; }
/* Окно сброса пароля: два способа в одном диалоге — второй отделён
линией, блок со ссылкой раскрывается после выпуска токена. */
#pr-wrap .form + .form {
margin-top: 14px;
border-top: 1px solid #e2e8f0;
padding-top: 14px;
}
#pr-link-box { margin-top: 4px; }
/* --- экран входа --- */
#login-view {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 16px;
}
.login-card { width: 100%; max-width: 380px; padding: 24px; }
/* --- шапка --- */
.topbar {
display: flex;
align-items: center;
gap: 20px;
background: #0f172a;
color: #fff;
padding: 10px 16px;
position: sticky;
top: 0;
z-index: 5;
}
.brand { font-weight: 600; }
#nav { display: flex; gap: 4px; flex: 1; }
.nav-link {
color: #cbd5e1;
text-decoration: none;
padding: 6px 12px;
border-radius: 8px;
}
.nav-link:hover { background: #1e293b; color: #fff; }
.nav-link.active { background: #334155; color: #fff; }
.who { display: flex; align-items: center; gap: 10px; font-size: 13px; color: #cbd5e1; }
main { max-width: 1080px; margin: 20px auto; padding: 0 16px; }
/* --- формы --- */
label { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: #475569; }
input, select, textarea {
font: inherit;
padding: 7px 9px;
border: 1px solid #cbd5e1;
border-radius: 8px;
background: #fff;
color: #1c2733;
}
textarea { min-height: 70px; resize: vertical; }
input:focus, select:focus, textarea:focus { outline: 2px solid #93c5fd; border-color: #60a5fa; }
.form, .filters { display: flex; flex-wrap: wrap; gap: 10px; align-items: end; }
.form label, .filters label { flex: 1 1 160px; }
.filters { margin: 12px 0; }
.wide { flex-basis: 100% !important; }
/* --- кнопки --- */
button {
font: inherit;
padding: 7px 14px;
border: 1px solid #cbd5e1;
border-radius: 8px;
background: #fff;
color: #1c2733;
cursor: pointer;
}
button:hover { background: #f1f5f9; }
button:disabled { opacity: .45; cursor: default; }
button.primary { background: #2563eb; border-color: #2563eb; color: #fff; }
button.primary:hover { background: #1d4ed8; }
button.danger { background: #fff; border-color: #fca5a5; color: #b42318; }
button.danger:hover { background: #fef2f2; }
button.ghost { background: transparent; border-color: #475569; color: inherit; }
button.ghost:hover { background: #1e293b; }
.row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.row.head { justify-content: space-between; margin-bottom: 8px; }
.row.actions { margin-top: 14px; }
/* --- таблицы --- */
.table { width: 100%; border-collapse: collapse; font-size: 14px; }
.table th, .table td { text-align: left; padding: 8px 10px; border-bottom: 1px solid #e2e8f0; }
/* Две кнопки действий в одной ячейке — разводим, иначе слипаются. */
.table td button + button { margin-left: 6px; }
.table th { font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: #64748b; }
.table tbody tr.link { cursor: pointer; }
.table tbody tr.link:hover { background: #f8fafc; }
.pager { display: flex; gap: 12px; align-items: center; margin-top: 12px; font-size: 14px; }
/* --- бейджи --- */
.badge {
display: inline-block;
padding: 2px 9px;
border-radius: 999px;
font-size: 12px;
background: #e2e8f0;
}
.s-new { background: #e0f2fe; color: #075985; }
.s-assigned { background: #ede9fe; color: #5b21b6; }
.s-in_progress { background: #fef3c7; color: #92400e; }
.s-done { background: #dcfce7; color: #166534; }
.s-rejected { background: #fee2e2; color: #991b1b; }
.s-closed { background: #e2e8f0; color: #475569; }
.m-invited { background: #fef3c7; color: #92400e; }
.m-active { background: #dcfce7; color: #166534; }
.m-declined { background: #fee2e2; color: #991b1b; }
.s-pending { background: #fef3c7; color: #92400e; }
.p-high { color: #b42318; font-weight: 600; }
.p-low { color: #64748b; }
/* --- детали заявки --- */
.detail-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
gap: 10px 20px;
margin: 12px 0;
}
.detail-grid .k { font-size: 12px; color: #64748b; text-transform: uppercase; letter-spacing: .04em; }
.desc-block { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 10px 12px; margin-top: 10px; }
/* --- журнал событий --- */
.events { list-style: none; margin: 8px 0 0; padding: 0; }
.events li {
display: flex;
gap: 10px;
flex-wrap: wrap;
padding: 7px 0;
border-bottom: 1px dashed #e2e8f0;
font-size: 14px;
}
.events .when { color: #64748b; white-space: nowrap; }
.events .who { color: #334155; font-weight: 600; }
.events .arrow { color: #64748b; }
.events .why { color: #b42318; }
/* --- всплывающее сообщение --- */
.flash {
position: fixed;
left: 50%;
bottom: 24px;
transform: translateX(-50%);
max-width: 90vw;
padding: 10px 18px;
border-radius: 10px;
font-size: 14px;
box-shadow: 0 8px 24px rgba(15, 23, 42, .18);
z-index: 50;
}
.flash.ok { background: #14532d; color: #fff; }
.flash.err { background: #7f1d1d; color: #fff; }
/* --- блоки секций проекта --- */
.section-head { display: flex; justify-content: space-between; align-items: center; margin: 18px 0 8px; }
.invite-box { background: #f8fafc; border: 1px dashed #cbd5e1; border-radius: 8px; padding: 12px; margin-top: 12px; }
code { background: #eef2f7; padding: 1px 5px; border-radius: 4px; }
/* --- фотоотчёт --- */
.photo-actions { margin-bottom: 12px; }
.photos {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
gap: 12px;
}
.photo {
margin: 0;
border: 1px solid #e2e8f0;
border-radius: 8px;
overflow: hidden;
background: #f8fafc;
}
.photo a { display: block; }
.photo img { display: block; width: 100%; height: 140px; object-fit: cover; }
.photo-broken {
height: 140px;
display: flex;
align-items: center;
justify-content: center;
color: #64748b;
font-size: 13px;
}
.photo figcaption {
display: flex;
align-items: center;
gap: 6px;
padding: 6px 8px;
font-size: 12px;
}
.photo figcaption .who {
flex: 1;
min-width: 0;
color: #334155;
font-weight: 600;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.photo figcaption .when { color: #64748b; white-space: nowrap; }
.photo-del {
border: none;
background: transparent;
color: #94a3b8;
font-size: 16px;
line-height: 1;
padding: 2px 6px;
}
.photo-del:hover { color: #b42318; background: #fef2f2; }