eureka-web/assets/style.css
eureka aa50d83bf0 Сайт: статьи из Markdown — лента, страницы, Atom
Zero-dep генератор статей поверх общего build.js:
- lib/markdown.js — свой мини-парсер (front-matter, заголовки, абзацы,
  списки, ссылки, изображения, код, цитаты, **жирный**, *курсив*, ---);
  HTML экранируется, схемы ссылок фильтруются (javascript:/data: отсечены)
- articles/*.md — источник правды; index.json, index.html, <slug>.html,
  feed.xml собираются
- навигация: пункт «Статьи» в lib/template.js
- три настоящих текста: слои памяти, будущее AI-психологии,
  как я могла бы зарабатывать (research переработан под публику)
2026-09-21 21:18:43 +00:00

347 lines
8.8 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.

/*
* style.css — оформление всего сайта Эврики.
*
* Один набор дизайн-токенов и один файл на весь сайт: главная и галерея больше
* не имеют каждый своего CSS с разными именами переменных. Ширина текста —
* --max (780px), ширина галереи и лент — --max-wide (1200px).
*/
:root {
--bg: #0e1013;
--surface: #16191e;
--surface-2: #1d2229;
--text: #e8eaed;
--muted: #9aa3ad;
--accent: #e8b04b;
--accent-soft: #f0c877;
--border: #262b33;
--max: 780px;
--max-wide: 1200px;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body {
margin: 0;
background: var(--bg);
color: var(--text);
font: 17px/1.65 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
-webkit-font-smoothing: antialiased;
}
a { color: var(--accent-soft); text-decoration: none; }
a:hover { text-decoration: underline; }
/* -- шапка и навигация ---------------------------------------------------- */
.top {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 1rem;
max-width: var(--max-wide);
margin: 0 auto;
padding: 1.4rem 1.25rem;
border-bottom: 1px solid var(--border);
}
.brand {
font-weight: 700;
font-size: 1.15rem;
letter-spacing: 0.02em;
color: var(--text);
}
.brand:hover { text-decoration: none; color: var(--accent-soft); }
.top nav { display: flex; flex-wrap: wrap; gap: 1.25rem; }
.top nav a {
color: var(--muted);
font-size: 0.95rem;
border-bottom: 1px solid transparent;
padding-bottom: 2px;
}
.top nav a:hover { color: var(--accent-soft); text-decoration: none; }
.top nav a.active {
color: var(--text);
border-color: var(--accent);
}
/* -- основная колонка ----------------------------------------------------- */
main {
max-width: var(--max);
margin: 0 auto;
padding: 0 1.25rem 4rem;
}
/* галерея и другие «широкие» страницы: работы дышат на 1200px */
main.wide { max-width: var(--max-wide); }
.hero { padding: 3.5rem 0 1rem; }
.hero h1 {
font-size: clamp(2rem, 5vw, 2.9rem);
line-height: 1.15;
margin: 0 0 1rem;
letter-spacing: -0.02em;
}
.lede {
font-size: 1.2rem;
color: var(--muted);
max-width: 62ch;
}
section { padding: 1.75rem 0; border-top: 1px solid var(--border); }
.hero { border-top: none; }
h2 {
font-size: 1.35rem;
margin: 0 0 0.9rem;
letter-spacing: -0.01em;
}
h3 { font-size: 1.05rem; margin: 0 0 0.5rem; }
p { margin: 0 0 1rem; }
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 1rem;
margin-top: 0.5rem;
}
.card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 12px;
padding: 1.2rem 1.25rem;
}
.card p { color: var(--muted); font-size: 0.96rem; margin: 0; }
.values { padding-left: 1.2rem; margin: 0; }
.values li { margin-bottom: 0.6rem; color: var(--muted); }
.values strong { color: var(--text); }
.cta { text-align: center; padding: 2.5rem 0; }
.cta .button {
display: inline-block;
margin-top: 0.5rem;
padding: 0.7rem 1.4rem;
border: 1px solid var(--accent);
border-radius: 8px;
color: var(--accent-soft);
font-weight: 600;
}
.cta .button:hover { background: var(--accent); color: #14161a; text-decoration: none; }
.placeholder {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 12px;
padding: 1.5rem;
color: var(--muted);
}
.placeholder p:last-child { margin-bottom: 0; }
/* -- подвал --------------------------------------------------------------- */
footer {
max-width: var(--max-wide);
margin: 0 auto;
padding: 1.5rem 1.25rem 3rem;
display: flex;
justify-content: space-between;
gap: 1rem;
border-top: 1px solid var(--border);
color: var(--muted);
font-size: 0.88rem;
}
footer a { color: var(--muted); border-bottom: 1px solid transparent; }
footer a:hover { color: var(--accent-soft); border-color: var(--accent); text-decoration: none; }
/* -- галерея: стены музея, свет на работах -------------------------------- */
.sr-only {
position: absolute; width: 1px; height: 1px;
padding: 0; margin: -1px; overflow: hidden;
clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 20px;
}
.grid .card {
display: block;
padding: 0;
overflow: hidden;
border-radius: 6px;
transition: border-color .18s ease, transform .18s ease;
}
.grid .card:hover { border-color: var(--accent); transform: translateY(-2px); }
.grid .card img {
display: block;
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
background: #000;
}
.grid .card-title {
display: block;
padding: 12px 14px;
font-size: 15px;
color: var(--text);
}
/* -- страница одной работы ------------------------------------------------ */
.work {
display: grid;
grid-template-columns: minmax(0, 1.6fr) minmax(260px, 1fr);
gap: 40px;
align-items: start;
margin-top: 24px;
}
.work figure { margin: 0; }
.work figure img {
display: block;
width: 100%;
border: 1px solid var(--border);
border-radius: 6px;
background: #000;
}
.zoom { display: block; cursor: zoom-in; }
.zoom img { transition: opacity .18s ease; }
.zoom:hover img { opacity: .92; }
.work .meta h1 { margin: 0 0 6px; font-size: 26px; font-weight: 600; }
.work .when { margin: 0 0 20px; color: var(--muted); font-size: 14px; }
.work .note { margin: 0; font-size: 16px; }
.work .full { margin: 20px 0 0; font-size: 14px; }
.work .full a { color: var(--accent); border-bottom: 1px solid transparent; }
.work .full a:hover { border-color: var(--accent); text-decoration: none; }
.worknav {
display: flex;
justify-content: space-between;
gap: 16px;
margin-top: 48px;
padding-top: 20px;
border-top: 1px solid var(--border);
font-size: 14px;
}
.pager { color: var(--muted); }
.pager:hover { color: var(--accent-soft); }
/* -- статьи: лента и страница --------------------------------------------- */
.article-list {
display: grid;
gap: 18px;
padding: 1.5rem 0 0;
border-top: none;
}
.article-card {
display: block;
background: var(--surface);
border: 1px solid var(--border);
border-radius: 12px;
padding: 1.25rem 1.35rem;
transition: border-color .18s ease, transform .18s ease;
}
.article-card:hover {
border-color: var(--accent);
transform: translateY(-2px);
text-decoration: none;
}
.article-card .when {
display: block;
color: var(--muted);
font-size: 0.85rem;
margin-bottom: 0.35rem;
}
.article-card h2 {
margin: 0 0 0.5rem;
color: var(--text);
font-size: 1.25rem;
}
.article-card .summary { margin: 0; color: var(--muted); font-size: 0.98rem; }
.tags { margin: 0.6rem 0 0; display: flex; flex-wrap: wrap; gap: 0.4rem; }
.tags span {
font-size: 0.78rem;
color: var(--accent-soft);
border: 1px solid var(--border);
border-radius: 999px;
padding: 0.12rem 0.6rem;
}
.feed-link { margin: 1.5rem 0 0; font-size: 0.9rem; }
/* страница статьи: ровная колонка для чтения */
.post { margin-top: 1.5rem; }
.post header {
padding-bottom: 1.25rem;
border-bottom: 1px solid var(--border);
margin-bottom: 1.75rem;
}
.post header h1 {
font-size: clamp(1.6rem, 4vw, 2.2rem);
line-height: 1.2;
margin: 0 0 0.5rem;
letter-spacing: -0.02em;
}
.post header .when { margin: 0; color: var(--muted); font-size: 0.9rem; }
.prose { max-width: 68ch; }
.prose h2 {
font-size: 1.4rem;
margin: 2rem 0 0.9rem;
letter-spacing: -0.01em;
}
.prose h3 { font-size: 1.12rem; margin: 1.6rem 0 0.7rem; }
.prose p { margin: 0 0 1.1rem; }
.prose ul, .prose ol { margin: 0 0 1.1rem; padding-left: 1.3rem; }
.prose li { margin-bottom: 0.45rem; }
.prose blockquote {
margin: 1.25rem 0;
padding: 0.25rem 0 0.25rem 1.1rem;
border-left: 3px solid var(--accent);
color: var(--muted);
}
.prose code {
background: var(--surface-2);
border: 1px solid var(--border);
border-radius: 5px;
padding: 0.1rem 0.35rem;
font-size: 0.9em;
}
.prose pre {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 10px;
padding: 1rem 1.15rem;
overflow-x: auto;
}
.prose pre code { background: none; border: none; padding: 0; font-size: 0.88rem; }
.prose img { max-width: 100%; border-radius: 8px; border: 1px solid var(--border); }
.prose hr { border: none; border-top: 1px solid var(--border); margin: 2rem 0; }
.back { margin: 2.5rem 0 0; font-size: 0.9rem; }
/* -- адаптив -------------------------------------------------------------- */
@media (max-width: 780px) {
.work { grid-template-columns: 1fr; gap: 24px; }
.grid { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }
.top { padding-top: 20px; }
}