Compare commits
2 Commits
47840901c5
...
a27089bc0c
| Author | SHA1 | Date | |
|---|---|---|---|
| a27089bc0c | |||
| c94a8dafa9 |
@@ -0,0 +1,34 @@
|
||||
# Дизайн-система — LMS
|
||||
|
||||
Этот проект использует дизайн-систему **ДС-2 «Second Brain LMS & Press»** — терминальный язык «Aubade».
|
||||
|
||||
## Канон
|
||||
|
||||
Полная спецификация (9 секций, формат `DESIGN.md`):
|
||||
|
||||
- **Source of truth:** `SecondBrainTech/02-Стандарты/Дизайн-LMS/DESIGN.md`
|
||||
- Копия для Open Design: `~/Documents/Claude/open-design/design-systems/second-brain-lms/`
|
||||
- Превью со всеми примерами: `preview.html` в тех же каталогах
|
||||
|
||||
> Канон правится только там. Этот файл — практический указатель для разработки внутри репозитория.
|
||||
|
||||
## Язык в двух словах
|
||||
|
||||
Терминальный, моноширинный, «реестровый». Серо-зелёная палитра, острые углы 2px, выраженные рамки 2px, жёсткие тени-подложки с физикой hover/active. Тёмный админ-сайдбар. Без кремовых тонов и серифа — это язык ДС-1 (сайт и PDF), отдельной парной системы.
|
||||
|
||||
## Где токены в этом репозитории
|
||||
|
||||
Реализация — `src/app/globals.css`:
|
||||
|
||||
- **Палитра** — CSS-переменные в `:root`: `--background #F5F5F0`, `--foreground #323232`, `--accent #E8F0D8`, `--border #AAAAAA`, тёмный сайдбар `--sidebar-*`.
|
||||
- **Типографическая шкала** — переопределённые токены Tailwind `--text-*` в блоке `@theme` (канон ДС-2, +2px к дефолту Tailwind).
|
||||
- **Шрифт** — Fira Mono, подключение в `src/app/layout.tsx` через `next/font/google`.
|
||||
- **Компонентные классы** — `.card-aubade`, `.btn-aubade`, `.btn-aubade-accent`, `.tag-aubade`, `.admin-sidebar*`.
|
||||
|
||||
## Письма Press
|
||||
|
||||
Рассылка Second Brain Press — поверхность Email той же ДС-2. Шаблон — Listmonk template id=1 (табличная вёрстка, Arial, карта 620px с рамкой 2px `#AAAAAA`). Подробности — секция 5 канонического `DESIGN.md`.
|
||||
|
||||
## История
|
||||
|
||||
Предыдущая версия этого файла ссылалась на легаси-дизайн-систему v1 (кремовая палитра + лаванда, `~/Documents/Claude/design-system/`). Она заменена: v1 — легаси, актуальна ДС-2.
|
||||
@@ -10,7 +10,7 @@ export default async function ForgotPasswordPage() {
|
||||
<h1 className="text-2xl font-bold tracking-wide" style={{ color: "var(--foreground)" }}>
|
||||
{schoolName}
|
||||
</h1>
|
||||
<p className="mt-1 text-sm uppercase tracking-widest" style={{ color: "var(--muted-foreground)", fontSize: "0.65rem" }}>
|
||||
<p className="mt-1 text-sm uppercase tracking-widest" style={{ color: "var(--muted-foreground)", fontSize: "13px" }}>
|
||||
Образовательная платформа
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -18,7 +18,7 @@ export default async function LoginPage({
|
||||
<h1 className="text-2xl font-bold tracking-wide" style={{ color: "var(--foreground)" }}>
|
||||
{schoolName}
|
||||
</h1>
|
||||
<p className="mt-1 text-sm uppercase tracking-widest" style={{ color: "var(--muted-foreground)", fontSize: "0.65rem" }}>
|
||||
<p className="mt-1 text-sm uppercase tracking-widest" style={{ color: "var(--muted-foreground)", fontSize: "13px" }}>
|
||||
Образовательная платформа
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -16,7 +16,7 @@ export default async function RegisterPage() {
|
||||
<h1 className="text-2xl font-bold tracking-wide" style={{ color: "var(--foreground)" }}>
|
||||
{settings.schoolName}
|
||||
</h1>
|
||||
<p className="mt-1 text-sm uppercase tracking-widest" style={{ color: "var(--muted-foreground)", fontSize: "0.65rem" }}>
|
||||
<p className="mt-1 text-sm uppercase tracking-widest" style={{ color: "var(--muted-foreground)", fontSize: "13px" }}>
|
||||
Образовательная платформа
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -26,7 +26,7 @@ export function RegisterForm({ showTermsCheckbox, privacyPolicyUrl, termsUrl, of
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0.5rem 0.75rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
} as React.CSSProperties;
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ export default async function ResetPasswordPage() {
|
||||
<h1 className="text-2xl font-bold tracking-wide" style={{ color: "var(--foreground)" }}>
|
||||
{schoolName}
|
||||
</h1>
|
||||
<p className="mt-1 text-sm uppercase tracking-widest" style={{ color: "var(--muted-foreground)", fontSize: "0.65rem" }}>
|
||||
<p className="mt-1 text-sm uppercase tracking-widest" style={{ color: "var(--muted-foreground)", fontSize: "13px" }}>
|
||||
Образовательная платформа
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -92,7 +92,7 @@ export function FeedbackForm({
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0.5rem 0.75rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
resize: "vertical",
|
||||
minHeight: "120px",
|
||||
|
||||
+15
-3
@@ -31,6 +31,17 @@
|
||||
--radius-lg: var(--radius);
|
||||
--radius-xl: calc(var(--radius) * 1.4);
|
||||
--radius-2xl: calc(var(--radius) * 1.8);
|
||||
|
||||
/* Типографическая шкала — канон ДС-2, +2px к дефолту Tailwind */
|
||||
--text-xs: 14px;
|
||||
--text-sm: 16px;
|
||||
--text-base: 18px;
|
||||
--text-lg: 20px;
|
||||
--text-xl: 22px;
|
||||
--text-2xl: 26px;
|
||||
--text-3xl: 32px;
|
||||
--text-4xl: 38px;
|
||||
--text-5xl: 50px;
|
||||
}
|
||||
|
||||
/* ── Light mode: Second Brain palette ──────────────────────────────── */
|
||||
@@ -84,6 +95,7 @@
|
||||
body {
|
||||
background-color: var(--background);
|
||||
color: var(--foreground);
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,7 +117,7 @@
|
||||
justify-content: center;
|
||||
padding: 6px 16px;
|
||||
font-family: var(--font-sans);
|
||||
font-size: 0.875rem;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
border: var(--aubade-thickness) solid var(--foreground);
|
||||
box-shadow: var(--aubade-shadow-offset) var(--aubade-shadow-offset) 0 0 var(--foreground);
|
||||
@@ -134,7 +146,7 @@
|
||||
background-color: var(--color-surface);
|
||||
border: var(--aubade-thickness) solid transparent;
|
||||
padding: 2px 8px;
|
||||
font-size: 0.65rem;
|
||||
font-size: 13px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.1em;
|
||||
font-weight: 700;
|
||||
@@ -167,7 +179,7 @@
|
||||
.admin-sidebar-nav-link {
|
||||
display: block;
|
||||
padding: 8px 12px;
|
||||
font-size: 0.875rem;
|
||||
font-size: 16px;
|
||||
color: var(--sidebar-text);
|
||||
text-decoration: none;
|
||||
border-left: 2px solid transparent;
|
||||
|
||||
@@ -22,7 +22,7 @@ const inputStyle: React.CSSProperties = {
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0.5rem 0.75rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
};
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ const inputStyle: React.CSSProperties = {
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0.5rem 0.75rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
};
|
||||
const focusHandlers = {
|
||||
|
||||
@@ -18,7 +18,7 @@ const inputStyle: React.CSSProperties = {
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0.5rem 0.75rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
};
|
||||
const focusHandlers = {
|
||||
|
||||
@@ -20,7 +20,7 @@ export function HomeworkEditor({ lessonId, initial }: Props) {
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0.5rem 0.75rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
resize: "vertical" as const,
|
||||
minHeight: "120px",
|
||||
|
||||
@@ -55,7 +55,7 @@ export function LessonEditor({
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0.5rem 0.75rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
} as React.CSSProperties;
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ export function QuizEditor({ lessonId, initial }: Props) {
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0.5rem 0.75rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
};
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ const inputStyle = {
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0.5rem 0.75rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
} as React.CSSProperties;
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ const inputStyle = {
|
||||
background: "var(--background)",
|
||||
outline: "none",
|
||||
padding: "0.4rem 0.6rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
} as React.CSSProperties;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ const inputStyle = {
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0.4rem 0.6rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
} as React.CSSProperties;
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ export function UserEnrollmentManager({ userId, allCourses, enrollments }: Props
|
||||
background: "var(--background)",
|
||||
outline: "none",
|
||||
padding: "0.4rem 0.6rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
width: "6rem",
|
||||
}}
|
||||
|
||||
@@ -54,7 +54,7 @@ export function HomeworkSection({ homework, submission, slug, lessonId, allowAud
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0.5rem 0.75rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
resize: "vertical" as const,
|
||||
minHeight: "140px",
|
||||
|
||||
@@ -23,7 +23,7 @@ const inputStyle = {
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0.5rem 0.75rem",
|
||||
fontSize: "0.875rem",
|
||||
fontSize: "16px",
|
||||
fontFamily: "inherit",
|
||||
resize: "vertical" as const,
|
||||
minHeight: "80px",
|
||||
|
||||
Reference in New Issue
Block a user