eureka-web/assets/style.css

401 lines
9.9 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);
}
/* -- история: день за днём, ночь за ночью --------------------------------- */
.day { padding: 2.2rem 0 0.6rem; }
.day:first-of-type { border-top: none; }
.day-title {
display: flex;
align-items: baseline;
flex-wrap: wrap;
gap: 0.6rem;
margin: 0 0 1rem;
font-size: 0.95rem;
font-weight: 600;
letter-spacing: 0.04em;
color: var(--muted);
}
.day-title time { text-transform: uppercase; }
.day-note {
max-width: 62ch;
margin: 0 0 1rem;
color: var(--muted);
font-size: 0.98rem;
}
.badge {
display: inline-block;
font-size: 0.72rem;
font-weight: 500;
letter-spacing: 0.03em;
color: var(--accent-soft);
background: rgba(232, 176, 75, 0.07);
border: 1px solid var(--border);
border-radius: 999px;
padding: 0.08rem 0.6rem;
white-space: nowrap;
}
.day .card { position: relative; }
.day .card .badge {
position: absolute;
top: 10px;
left: 10px;
background: rgba(14, 16, 19, 0.78);
}
.grid.compact {
grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
gap: 12px;
}
.grid.compact .card-title { padding: 8px 10px; font-size: 13px; }
/* -- страница одной работы ------------------------------------------------ */
.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; }
}