Files
srcoder.moe/static/css/style.css
T
Black_Raven 4ee119a960
Build, Test and Push Flask App / deploy (push) Canceled after 0s
Build, Test and Push Flask App / docker-build-and-push (push) Canceled after 40s
feat(all): 1-st site version
2026-10-07 16:28:14 +03:00

810 lines
19 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.
:root {
--bg: #07080d;
--bg-soft: #0c0e16;
--card: rgba(255, 255, 255, 0.035);
--card-border: rgba(255, 255, 255, 0.08);
--text: #e8ecf5;
--muted: #97a0b5;
--accent: #5eead4;
--accent-2: #7c8cff;
--accent-3: #f472b6;
--radius: 18px;
--max: 1140px;
--font: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
--mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", monospace;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
font-family: var(--font);
background: var(--bg);
color: var(--text);
line-height: 1.65;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
}
a { color: inherit; text-decoration: none; }
::selection { background: rgba(94, 234, 212, 0.25); }
/* ---------- фон ---------- */
.bg-glow {
position: fixed;
inset: 0;
z-index: -2;
background:
radial-gradient(600px 400px at 15% 0%, rgba(124, 140, 255, 0.18), transparent 65%),
radial-gradient(700px 500px at 85% 10%, rgba(94, 234, 212, 0.14), transparent 65%),
radial-gradient(800px 600px at 50% 110%, rgba(244, 114, 182, 0.10), transparent 70%);
animation: drift 24s ease-in-out infinite alternate;
}
@keyframes drift {
from { transform: translate3d(-2%, -1%, 0) scale(1); }
to { transform: translate3d(2%, 2%, 0) scale(1.06); }
}
.grid-overlay {
position: fixed;
inset: 0;
z-index: -1;
background-image:
linear-gradient(rgba(255,255,255,0.035) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,0.035) 1px, transparent 1px);
background-size: 64px 64px;
mask-image: radial-gradient(ellipse at 50% 30%, #000 30%, transparent 85%);
-webkit-mask-image: radial-gradient(ellipse at 50% 30%, #000 30%, transparent 85%);
}
/* ---------- хедер ---------- */
.site-header {
position: sticky;
top: 0;
z-index: 50;
backdrop-filter: blur(14px);
-webkit-backdrop-filter: blur(14px);
background: rgba(7, 8, 13, 0.72);
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
transition: box-shadow .3s ease;
}
.site-header.scrolled { box-shadow: 0 10px 30px rgba(0, 0, 0, 0.45); }
.nav {
max-width: var(--max);
margin: 0 auto;
padding: 16px 24px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
}
.logo {
display: inline-flex;
align-items: center;
gap: 10px;
font-weight: 700;
font-size: 1.05rem;
letter-spacing: -0.02em;
}
.logo-mark {
font-family: var(--mono);
font-size: .8rem;
padding: 5px 9px;
border-radius: 8px;
background: linear-gradient(135deg, rgba(94, 234, 212, .2), rgba(124, 140, 255, .2));
border: 1px solid rgba(94, 234, 212, .35);
color: var(--accent);
}
.accent { color: var(--accent); }
.nav-links {
display: flex;
align-items: center;
gap: 6px;
list-style: none;
}
.nav-links a {
display: block;
padding: 8px 14px;
border-radius: 10px;
font-size: .92rem;
color: var(--muted);
transition: color .2s, background .2s;
}
.nav-links a:hover { color: var(--text); background: rgba(255, 255, 255, 0.06); }
.nav-cta {
color: var(--accent) !important;
border: 1px solid rgba(94, 234, 212, .35);
background: rgba(94, 234, 212, .07);
}
.nav-cta:hover { background: rgba(94, 234, 212, .14) !important; }
.nav-toggle {
display: none;
flex-direction: column;
gap: 5px;
background: none;
border: 0;
cursor: pointer;
padding: 6px;
}
.nav-toggle span {
width: 22px;
height: 2px;
background: var(--text);
border-radius: 2px;
transition: transform .25s, opacity .25s;
}
.nav-toggle.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav-toggle.open span:nth-child(2) { opacity: 0; }
.nav-toggle.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
/* ---------- hero ---------- */
.hero {
max-width: var(--max);
margin: 0 auto;
padding: clamp(70px, 12vw, 130px) 24px clamp(50px, 8vw, 90px);
text-align: center;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: 9px;
font-family: var(--mono);
font-size: .78rem;
letter-spacing: .04em;
padding: 7px 15px;
border-radius: 999px;
background: rgba(255, 255, 255, .04);
border: 1px solid rgba(255, 255, 255, .1);
color: var(--muted);
margin-bottom: 26px;
}
.pulse {
width: 8px;
height: 8px;
border-radius: 50%;
background: #34d399;
box-shadow: 0 0 0 0 rgba(52, 211, 153, .7);
animation: pulse 2s infinite;
}
@keyframes pulse {
70% { box-shadow: 0 0 0 9px rgba(52, 211, 153, 0); }
100% { box-shadow: 0 0 0 0 rgba(52, 211, 153, 0); }
}
.hero-title {
font-size: clamp(2.3rem, 6.5vw, 4.3rem);
line-height: 1.1;
letter-spacing: -0.035em;
font-weight: 700;
margin-bottom: 22px;
}
.gradient-text {
background: linear-gradient(100deg, var(--accent) 0%, var(--accent-2) 45%, var(--accent-3) 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.hero-subtitle {
max-width: 660px;
margin: 0 auto 34px;
color: var(--muted);
font-size: clamp(1rem, 2vw, 1.12rem);
}
.hero-actions {
display: flex;
flex-wrap: wrap;
gap: 14px;
justify-content: center;
margin-bottom: 56px;
}
.btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 13px 26px;
border-radius: 12px;
font-size: .95rem;
font-weight: 600;
transition: transform .2s, box-shadow .2s, background .2s, border-color .2s;
}
.btn:active { transform: translateY(1px); }
.btn-primary {
background: linear-gradient(135deg, var(--accent), #2dd4bf);
color: #04120f;
box-shadow: 0 8px 26px rgba(94, 234, 212, .22);
}
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 14px 34px rgba(94, 234, 212, .32); }
.btn-ghost {
border: 1px solid rgba(255, 255, 255, .14);
color: var(--text);
background: rgba(255, 255, 255, .03);
}
.btn-ghost:hover { background: rgba(255, 255, 255, .08); border-color: rgba(255, 255, 255, .25); }
.hero-stats {
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: clamp(26px, 6vw, 70px);
}
.stat { display: flex; flex-direction: column; gap: 2px; }
.stat-num {
font-family: var(--mono);
font-size: clamp(1.7rem, 4vw, 2.4rem);
font-weight: 600;
background: linear-gradient(180deg, #fff, var(--accent));
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.stat-label { font-size: .8rem; color: var(--muted); letter-spacing: .03em; }
/* ---------- секции ---------- */
.section {
max-width: var(--max);
margin: 0 auto;
padding: clamp(50px, 8vw, 90px) 24px;
}
.section-head { max-width: 700px; margin-bottom: 46px; }
.section-tag {
display: inline-block;
font-family: var(--mono);
font-size: .78rem;
color: var(--accent);
letter-spacing: .08em;
margin-bottom: 12px;
}
.section-title {
font-size: clamp(1.7rem, 4vw, 2.5rem);
letter-spacing: -0.03em;
line-height: 1.2;
margin-bottom: 14px;
}
.section-desc { color: var(--muted); }
/* ---------- карточки ---------- */
.cards {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(310px, 1fr));
gap: 20px;
}
.card {
position: relative;
display: flex;
flex-direction: column;
gap: 14px;
padding: 26px;
border-radius: var(--radius);
background: var(--card);
border: 1px solid var(--card-border);
overflow: hidden;
transition: transform .3s ease, border-color .3s ease, background .3s ease;
}
.card::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(140deg, rgba(94, 234, 212, .10), transparent 45%);
opacity: 0;
transition: opacity .35s ease;
pointer-events: none;
}
.card:hover {
transform: translateY(-6px);
border-color: rgba(94, 234, 212, .35);
background: rgba(255, 255, 255, .055);
}
.card:hover::before { opacity: 1; }
.card-icon {
font-size: 1.9rem;
width: 56px;
height: 56px;
display: grid;
place-items: center;
border-radius: 14px;
background: rgba(255, 255, 255, .05);
border: 1px solid rgba(255, 255, 255, .08);
padding: 10px;
object-fit: contain;
flex: none;
}
.card-body h3 {
font-size: 1.22rem;
letter-spacing: -0.02em;
margin-bottom: 8px;
}
.card-body p { font-size: .93rem; color: var(--muted); }
.card-badge {
align-self: flex-start;
margin-top: auto;
font-family: var(--mono);
font-size: .72rem;
letter-spacing: .05em;
text-transform: uppercase;
padding: 5px 11px;
border-radius: 999px;
background: rgba(124, 140, 255, .1);
border: 1px solid rgba(124, 140, 255, .25);
color: #a9b3ff;
}
.card-featured {
background: linear-gradient(160deg, rgba(94, 234, 212, .08), rgba(255, 255, 255, .03));
border-color: rgba(94, 234, 212, .25);
}
.inline-link {
color: var(--accent);
border-bottom: 1px dashed rgba(94, 234, 212, .5);
font-weight: 600;
transition: border-color .2s, color .2s;
}
.inline-link:hover { color: #fff; border-bottom-color: #fff; }
/* ---------- о сервере ---------- */
.about {
display: grid;
grid-template-columns: 1.1fr 1fr;
gap: 40px;
align-items: center;
padding: clamp(28px, 5vw, 48px);
border-radius: 24px;
background: rgba(255, 255, 255, .03);
border: 1px solid var(--card-border);
}
.about-text p { color: var(--muted); margin-bottom: 16px; font-size: .97rem; }
.about-btn { margin-top: 8px; }
img.card-icon { border-radius: 12px; }
/* ---------- характеристики сервера ---------- */
.about-sub {
font-size: 1.02rem;
font-weight: 600;
letter-spacing: -0.01em;
margin: 24px 0 6px;
color: var(--text);
}
.spec-list { margin: 0; }
.spec-row {
display: flex;
flex-wrap: wrap;
align-items: baseline;
justify-content: space-between;
gap: 6px 16px;
padding: 10px 0;
border-bottom: 1px dashed rgba(255, 255, 255, .08);
}
.spec-row:last-child { border-bottom: 0; }
.spec-row dt {
font-family: var(--mono);
font-size: .74rem;
letter-spacing: .08em;
text-transform: uppercase;
color: var(--muted);
}
.spec-row dd {
margin: 0;
text-align: right;
font-size: .96rem;
font-weight: 600;
color: var(--text);
}
.about-terminal {
border-radius: 16px;
overflow: hidden;
background: #0a0d14;
border: 1px solid rgba(255, 255, 255, .1);
box-shadow: 0 24px 60px rgba(0, 0, 0, .55);
}
.terminal-bar {
display: flex;
align-items: center;
gap: 8px;
padding: 11px 14px;
background: rgba(255, 255, 255, .04);
border-bottom: 1px solid rgba(255, 255, 255, .07);
}
.dot { width: 11px; height: 11px; border-radius: 50%; }
.dot.red { background: #ff5f57; }
.dot.yellow { background: #febc2e; }
.dot.green { background: #28c840; }
.terminal-title {
margin-left: 8px;
font-family: var(--mono);
font-size: .76rem;
color: var(--muted);
}
.terminal-body {
padding: 20px;
font-family: var(--mono);
font-size: .85rem;
line-height: 1.85;
min-height: 260px;
color: #c9d4e8;
white-space: pre-wrap;
word-break: break-word;
}
.terminal-body .prompt { color: var(--accent); }
.terminal-body .dim { color: #6b7691; }
.terminal-body .ok { color: #4ade80; }
.terminal-body .cursor {
display: inline-block;
width: 8px;
height: 1.05em;
background: var(--accent);
vertical-align: text-bottom;
animation: blink 1s steps(1) infinite;
}
@keyframes blink { 50% { opacity: 0; } }
/* ---------- футер ---------- */
.site-footer {
margin-top: clamp(40px, 7vw, 80px);
border-top: 1px solid rgba(255, 255, 255, .07);
background: rgba(255, 255, 255, .02);
backdrop-filter: blur(10px);
}
.footer-inner {
max-width: var(--max);
margin: 0 auto;
padding: 26px 24px;
display: grid;
grid-template-columns: 1fr auto 1fr;
align-items: center;
gap: 18px;
font-size: .87rem;
color: var(--muted);
}
.footer-left { justify-self: start; }
.footer-center { justify-self: center; text-align: center; }
.footer-right { justify-self: end; text-align: right; }
.footer-badge {
display: inline-flex;
align-items: center;
gap: 9px;
padding: 7px 14px;
border-radius: 999px;
background: rgba(255, 255, 255, .04);
border: 1px solid rgba(255, 255, 255, .09);
}
.footer-center a,
.footer-right a {
color: var(--muted);
transition: color .2s;
border-bottom: 1px solid transparent;
}
.footer-center a:hover,
.footer-right a:hover {
color: var(--accent);
border-bottom-color: rgba(94, 234, 212, .5);
}
/* ---------- страница об авторе ---------- */
.card-icon svg { width: 24px; height: 24px; color: var(--accent); }
.author-hero {
max-width: 880px;
margin: 0 auto;
padding: clamp(56px, 10vw, 110px) 24px clamp(24px, 4vw, 44px);
text-align: center;
}
.author-avatar {
display: block;
width: clamp(140px, 24vw, 190px);
height: auto;
aspect-ratio: 1;
margin: 0 auto 26px;
border-radius: 50%;
object-fit: cover;
border: 3px solid rgba(94, 234, 212, .45);
box-shadow: 0 0 0 10px rgba(94, 234, 212, .07), 0 26px 60px rgba(0, 0, 0, .55);
}
.author-name {
font-size: clamp(1.9rem, 5vw, 3rem);
letter-spacing: -0.03em;
line-height: 1.15;
margin-bottom: 10px;
}
.author-role {
font-family: var(--mono);
font-size: .82rem;
letter-spacing: .16em;
text-transform: uppercase;
color: var(--accent);
margin-bottom: 22px;
}
.author-bio {
max-width: 640px;
margin: 0 auto;
color: var(--muted);
font-size: 1.02rem;
}
.contact-groups {
display: flex;
flex-direction: column;
gap: 26px;
margin-top: 34px;
}
.contact-group h3 {
font-family: var(--mono);
font-size: .74rem;
font-weight: 600;
letter-spacing: .16em;
text-transform: uppercase;
color: var(--muted);
text-align: center;
margin-bottom: 14px;
}
.contact-buttons {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 12px;
margin-top: 0;
}
.contact-btn {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 11px 18px;
border-radius: 12px;
background: rgba(255, 255, 255, .04);
border: 1px solid rgba(255, 255, 255, .1);
font-size: .92rem;
font-weight: 600;
transition: transform .2s ease, border-color .2s ease, background .2s ease;
}
.contact-btn img { width: 18px; height: 18px; opacity: .9; }
.contact-btn .handle {
font-family: var(--mono);
font-size: .8rem;
font-weight: 400;
color: var(--muted);
}
.contact-btn:hover {
transform: translateY(-3px);
border-color: rgba(94, 234, 212, .4);
background: rgba(94, 234, 212, .08);
}
.author-cards .card-wide { grid-column: span 2; }
.card-body .list {
list-style: none;
display: flex;
flex-direction: column;
gap: 9px;
font-size: .93rem;
color: var(--muted);
}
.card-body .list li::before {
content: "\203A";
color: var(--accent);
margin-right: 9px;
font-weight: 700;
}
.card-body strong { color: var(--text); }
.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.chip {
font-family: var(--mono);
font-size: .76rem;
padding: 6px 12px;
border-radius: 999px;
background: rgba(124, 140, 255, .1);
border: 1px solid rgba(124, 140, 255, .25);
color: #b6beff;
}
/* ---------- кнопка друга ---------- */
.friend-cta {
display: flex;
flex-direction: column;
align-items: center;
gap: 14px;
padding: 6px 24px clamp(40px, 7vw, 72px);
text-align: center;
}
.friend-note {
font-family: var(--mono);
font-size: .78rem;
letter-spacing: .1em;
text-transform: uppercase;
color: var(--muted);
}
.friend-btn {
display: inline-flex;
align-items: center;
gap: 14px;
padding: 16px 28px;
border-radius: 16px;
font-weight: 700;
font-size: 1.02rem;
background: linear-gradient(135deg, rgba(244, 114, 182, .14), rgba(124, 140, 255, .14));
border: 1px solid rgba(244, 114, 182, .35);
transition: transform .2s ease, box-shadow .2s ease;
}
.friend-btn:hover {
transform: translateY(-3px);
box-shadow: 0 16px 40px rgba(244, 114, 182, .22);
}
/* ---------- нижняя строка футера / nix webring ---------- */
.footer-bottom {
max-width: var(--max);
margin: 0 auto;
padding: 0 24px 26px;
text-align: center;
}
.webring {
display: inline-flex;
justify-content: center;
gap: 6px;
}
.webring a {
display: inline-block;
min-width: 42px;
font-family: var(--mono);
font-size: .82rem;
letter-spacing: .06em;
color: var(--muted);
padding: 8px 16px;
border-radius: 999px;
border: 1px solid rgba(255, 255, 255, .1);
background: rgba(255, 255, 255, .03);
transition: color .2s ease, border-color .2s ease, background .2s ease;
}
.webring a:hover {
color: var(--accent);
border-color: rgba(94, 234, 212, .4);
background: rgba(94, 234, 212, .08);
}
.webring .webring-main { font-weight: 600; letter-spacing: .1em; }
/* ---------- появление ---------- */
[data-reveal] {
opacity: 0;
transform: translateY(26px);
transition: opacity .7s cubic-bezier(.22, 1, .36, 1), transform .7s cubic-bezier(.22, 1, .36, 1);
}
[data-reveal].visible { opacity: 1; transform: none; }
/* ---------- адаптив ---------- */
@media (max-width: 900px) {
.about { grid-template-columns: 1fr; }
.author-cards .card-wide { grid-column: auto; }
}
@media (max-width: 760px) {
.nav-toggle { display: flex; }
.nav-links {
position: absolute;
top: 100%;
left: 0;
right: 0;
flex-direction: column;
align-items: stretch;
gap: 4px;
padding: 14px 20px 22px;
background: rgba(9, 10, 16, .97);
border-bottom: 1px solid rgba(255, 255, 255, .08);
transform: translateY(-14px);
opacity: 0;
pointer-events: none;
transition: opacity .25s, transform .25s;
}
.nav-links.open {
opacity: 1;
transform: none;
pointer-events: auto;
}
.nav-links a { padding: 12px 14px; text-align: center; }
.footer-inner {
grid-template-columns: 1fr;
text-align: center;
gap: 14px;
}
.footer-left, .footer-center, .footer-right {
justify-self: center;
text-align: center;
}
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: .01ms !important;
transition-duration: .01ms !important;
}
html { scroll-behavior: auto; }
}