Commit e78ff4
2026-03-20 18:47:39 GitLab Deploy: Add landing.html page for home redirect| /dev/null .. landing.html | |
| @@ 0,0 1,422 @@ | |
| + | <!DOCTYPE html> |
| + | <html lang="ru"> |
| + | <head> |
| + | <meta charset="UTF-8"> |
| + | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| + | <title>SKIF.PRO — Центр документации</title> |
| + | <meta name="description" content="Документация, руководства и инструкции по работе с платформой мониторинга транспорта SKIF.PRO"> |
| + | <link rel="preconnect" href="https://fonts.googleapis.com"> |
| + | <link href="https://fonts.googleapis.com/css2?family=Onest:wght@400;500;600;700&display=swap" rel="stylesheet"> |
| + | <script>(function(){var t=localStorage.getItem('theme');if(!t)t=matchMedia('(prefers-color-scheme:dark)').matches?'dark':'light';document.documentElement.dataset.theme=t})()</script> |
| + | <style> |
| + | :root, [data-theme="light"] { |
| + | --bg-base: #f4f6fb; |
| + | --bg-raised: #ffffff; |
| + | --bg-card: #ffffff; |
| + | --bg-card-hover: #edf1fa; |
| + | --border: #dfe4ee; |
| + | --border-hover: rgba(56,142,255,0.35); |
| + | --text: #1a1f2e; |
| + | --text-dim: #5c6478; |
| + | --text-muted: #9aa2b5; |
| + | --accent: #2b7ff2; |
| + | --accent-light: #1a6ad8; |
| + | --accent-soft: rgba(56,142,255,0.08); |
| + | --accent-glow: rgba(56,142,255,0.04); |
| + | --orange: #e86a10; |
| + | --radius: 14px; |
| + | --radius-sm: 10px; |
| + | --header-bg: rgba(244,246,251,0.88); |
| + | --card-shadow: 0 1px 3px rgba(0,0,0,0.04), 0 1px 2px rgba(0,0,0,0.06); |
| + | --card-hover-shadow: 0 8px 28px rgba(0,0,0,0.08); |
| + | --hero-glow-1: rgba(56,142,255,0.06); |
| + | --hero-glow-2: rgba(56,142,255,0.03); |
| + | --hero-grid: rgba(56,142,255,0.03); |
| + | } |
| + | |
| + | [data-theme="dark"] { |
| + | --bg-base: #090c14; |
| + | --bg-raised: #0f1320; |
| + | --bg-card: #141927; |
| + | --bg-card-hover: #191f33; |
| + | --border: #1e2640; |
| + | --border-hover: rgba(56,142,255,0.35); |
| + | --text: #e4e8f1; |
| + | --text-dim: #7c849a; |
| + | --text-muted: #4a5068; |
| + | --accent: #388eff; |
| + | --accent-light: #5ea4ff; |
| + | --accent-soft: rgba(56,142,255,0.1); |
| + | --accent-glow: rgba(56,142,255,0.06); |
| + | --header-bg: rgba(9,12,20,0.85); |
| + | --card-shadow: none; |
| + | --card-hover-shadow: 0 8px 28px rgba(0,0,0,0.25); |
| + | --hero-glow-1: rgba(56,142,255,0.07); |
| + | --hero-glow-2: rgba(56,142,255,0.04); |
| + | --hero-grid: rgba(56,142,255,0.025); |
| + | } |
| + | |
| + | *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } |
| + | |
| + | body { |
| + | font-family: 'Onest', -apple-system, BlinkMacSystemFont, sans-serif; |
| + | background: var(--bg-base); |
| + | color: var(--text); |
| + | min-height: 100vh; |
| + | -webkit-font-smoothing: antialiased; |
| + | -moz-osx-font-smoothing: grayscale; |
| + | } |
| + | |
| + | /* ═══ HEADER ═══ */ |
| + | .header { |
| + | display: flex; |
| + | align-items: center; |
| + | justify-content: space-between; |
| + | padding: 0 40px; |
| + | height: 60px; |
| + | background: var(--header-bg); |
| + | backdrop-filter: blur(16px); |
| + | -webkit-backdrop-filter: blur(16px); |
| + | border-bottom: 1px solid var(--border); |
| + | position: sticky; |
| + | top: 0; |
| + | z-index: 100; |
| + | } |
| + | .header-left { |
| + | display: flex; |
| + | align-items: center; |
| + | gap: 14px; |
| + | } |
| + | .logo-img { |
| + | height: 28px; |
| + | width: auto; |
| + | object-fit: contain; |
| + | } |
| + | .header-divider { |
| + | width: 1px; |
| + | height: 20px; |
| + | background: var(--border); |
| + | } |
| + | .header-label { |
| + | font-size: 13px; |
| + | color: var(--text-dim); |
| + | font-weight: 500; |
| + | } |
| + | .header-right { |
| + | display: flex; |
| + | align-items: center; |
| + | gap: 8px; |
| + | } |
| + | .header-link { |
| + | font-size: 13px; |
| + | font-weight: 500; |
| + | color: var(--text-dim); |
| + | text-decoration: none; |
| + | padding: 7px 14px; |
| + | border-radius: 8px; |
| + | transition: all 0.15s; |
| + | } |
| + | .header-link:hover { |
| + | color: var(--text); |
| + | background: var(--accent-soft); |
| + | } |
| + | |
| + | /* ═══ HERO ═══ */ |
| + | .hero { |
| + | position: relative; |
| + | text-align: center; |
| + | padding: 72px 40px 64px; |
| + | overflow: hidden; |
| + | } |
| + | .hero::before { |
| + | content: ''; |
| + | position: absolute; |
| + | inset: 0; |
| + | background: |
| + | radial-gradient(ellipse 60% 50% at 50% 0%, var(--hero-glow-1) 0%, transparent 70%), |
| + | radial-gradient(ellipse 40% 60% at 80% 20%, var(--hero-glow-2) 0%, transparent 60%); |
| + | pointer-events: none; |
| + | } |
| + | .hero::after { |
| + | content: ''; |
| + | position: absolute; |
| + | inset: 0; |
| + | background-image: |
| + | linear-gradient(35deg, var(--hero-grid) 1px, transparent 1px), |
| + | linear-gradient(-35deg, var(--hero-grid) 1px, transparent 1px); |
| + | background-size: 40px 40px; |
| + | mask-image: radial-gradient(ellipse 70% 60% at 50% 30%, black, transparent); |
| + | -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 30%, black, transparent); |
| + | pointer-events: none; |
| + | } |
| + | .hero-inner { |
| + | position: relative; |
| + | z-index: 1; |
| + | max-width: 640px; |
| + | margin: 0 auto; |
| + | } |
| + | .hero h1 { |
| + | font-size: 40px; |
| + | font-weight: 700; |
| + | letter-spacing: -0.8px; |
| + | line-height: 1.15; |
| + | margin-bottom: 16px; |
| + | } |
| + | .hero p { |
| + | font-size: 16px; |
| + | line-height: 1.65; |
| + | color: var(--text-dim); |
| + | max-width: 480px; |
| + | margin: 0 auto 36px; |
| + | } |
| + | |
| + | /* ═══ CONTENT ═══ */ |
| + | .content { |
| + | max-width: 720px; |
| + | margin: 0 auto; |
| + | padding: 0 40px 80px; |
| + | } |
| + | |
| + | /* ═══ MODULE BLOCK ═══ */ |
| + | .module-block { |
| + | background: var(--bg-card); |
| + | border: 1px solid var(--border); |
| + | border-radius: var(--radius); |
| + | padding: 40px 36px; |
| + | box-shadow: var(--card-shadow); |
| + | } |
| + | .module-header { |
| + | display: flex; |
| + | align-items: center; |
| + | gap: 12px; |
| + | margin-bottom: 8px; |
| + | } |
| + | .module-header svg { |
| + | color: var(--accent); |
| + | flex-shrink: 0; |
| + | } |
| + | .module-header h2 { |
| + | font-size: 22px; |
| + | font-weight: 700; |
| + | letter-spacing: -0.3px; |
| + | } |
| + | .module-desc { |
| + | font-size: 14px; |
| + | line-height: 1.6; |
| + | color: var(--text-dim); |
| + | margin-bottom: 28px; |
| + | } |
| + | |
| + | /* ═══ AUDIENCE CARDS ═══ */ |
| + | .audience-grid { |
| + | display: grid; |
| + | grid-template-columns: 1fr 1fr; |
| + | gap: 16px; |
| + | } |
| + | .audience-card { |
| + | background: var(--bg-raised); |
| + | border: 1px solid var(--border); |
| + | border-radius: var(--radius-sm); |
| + | padding: 24px; |
| + | transition: all 0.2s; |
| + | } |
| + | .audience-card:hover { |
| + | border-color: var(--border-hover); |
| + | box-shadow: var(--card-hover-shadow); |
| + | } |
| + | .audience-label { |
| + | display: flex; |
| + | align-items: center; |
| + | gap: 8px; |
| + | font-size: 14px; |
| + | font-weight: 600; |
| + | margin-bottom: 8px; |
| + | } |
| + | .audience-label svg { |
| + | stroke: var(--accent); |
| + | fill: none; |
| + | stroke-width: 2; |
| + | stroke-linecap: round; |
| + | stroke-linejoin: round; |
| + | } |
| + | .audience-desc { |
| + | font-size: 13px; |
| + | line-height: 1.5; |
| + | color: var(--text-dim); |
| + | margin-bottom: 16px; |
| + | } |
| + | .audience-link { |
| + | font-size: 13px; |
| + | font-weight: 500; |
| + | color: var(--accent); |
| + | text-decoration: none; |
| + | transition: color 0.15s; |
| + | } |
| + | .audience-link:hover { |
| + | color: var(--accent-light); |
| + | text-decoration: underline; |
| + | text-underline-offset: 3px; |
| + | } |
| + | |
| + | @media (max-width: 600px) { |
| + | .audience-grid { grid-template-columns: 1fr; } |
| + | .module-block { padding: 28px 20px; } |
| + | } |
| + | |
| + | /* ═══ FOOTER ═══ */ |
| + | .footer { |
| + | border-top: 1px solid var(--border); |
| + | padding: 28px 40px; |
| + | text-align: center; |
| + | font-size: 13px; |
| + | color: var(--text-muted); |
| + | } |
| + | .footer a { |
| + | color: var(--accent); |
| + | text-decoration: none; |
| + | } |
| + | .footer a:hover { text-decoration: underline; } |
| + | |
| + | /* ═══ THEME TOGGLE ═══ */ |
| + | .theme-toggle { |
| + | background: none; |
| + | border: 1px solid var(--border); |
| + | border-radius: 8px; |
| + | padding: 7px; |
| + | cursor: pointer; |
| + | display: flex; |
| + | align-items: center; |
| + | justify-content: center; |
| + | color: var(--text-dim); |
| + | transition: all 0.15s; |
| + | } |
| + | .theme-toggle:hover { |
| + | color: var(--text); |
| + | background: var(--accent-soft); |
| + | } |
| + | .theme-toggle svg { |
| + | width: 16px; |
| + | height: 16px; |
| + | stroke: currentColor; |
| + | fill: none; |
| + | stroke-width: 2; |
| + | stroke-linecap: round; |
| + | stroke-linejoin: round; |
| + | } |
| + | .theme-toggle .icon-sun { display: none; } |
| + | .theme-toggle .icon-moon { display: block; } |
| + | [data-theme="dark"] .theme-toggle .icon-sun { display: block; } |
| + | [data-theme="dark"] .theme-toggle .icon-moon { display: none; } |
| + | |
| + | /* ═══ RESPONSIVE ═══ */ |
| + | @media (max-width: 768px) { |
| + | .card-grid, .card-grid.cols-3 { grid-template-columns: 1fr; } |
| + | .hero { padding: 48px 20px 40px; } |
| + | .hero h1 { font-size: 28px; } |
| + | .content, .quick-bar { padding-left: 20px; padding-right: 20px; } |
| + | .header { padding: 0 20px; } |
| + | } |
| + | |
| + | /* ═══ ANIMATIONS ═══ */ |
| + | @keyframes fadeUp { |
| + | from { opacity: 0; transform: translateY(14px); } |
| + | to { opacity: 1; transform: translateY(0); } |
| + | } |
| + | .hero-inner { animation: fadeUp 0.5s ease-out; } |
| + | .quick-bar { animation: fadeUp 0.5s ease-out 0.05s backwards; } |
| + | .card { animation: fadeUp 0.45s ease-out backwards; } |
| + | .card:nth-child(1) { animation-delay: 0.08s; } |
| + | .card:nth-child(2) { animation-delay: 0.12s; } |
| + | .card:nth-child(3) { animation-delay: 0.16s; } |
| + | .card:nth-child(4) { animation-delay: 0.20s; } |
| + | .card:nth-child(5) { animation-delay: 0.24s; } |
| + | .card:nth-child(6) { animation-delay: 0.28s; } |
| + | </style> |
| + | </head> |
| + | <body> |
| + | |
| + | <!-- ═══════ HEADER ═══════ --> |
| + | <header class="header"> |
| + | <div class="header-left"> |
| + | <img src="logo.webp" alt="SKIF.PRO" class="logo-img"> |
| + | <div class="header-divider"></div> |
| + | <span class="header-label">Центр документации</span> |
| + | </div> |
| + | <div class="header-right"> |
| + | <a class="header-link" href="https://skif.pro" target="_blank">Платформа</a> |
| + | <a class="header-link" href="/ru/home">Wiki</a> |
| + | <button class="theme-toggle" id="themeToggle" aria-label="Переключить тему"> |
| + | <svg class="icon-moon" viewBox="0 0 24 24"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg> |
| + | <svg class="icon-sun" viewBox="0 0 24 24"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg> |
| + | </button> |
| + | </div> |
| + | </header> |
| + | |
| + | <!-- ═══════ HERO ═══════ --> |
| + | <section class="hero"> |
| + | <div class="hero-inner"> |
| + | <h1>Документация SKIF.PRO</h1> |
| + | <p>Руководства, инструкции и экспертные статьи — всё, что нужно для эффективной работы с платформой мониторинга.</p> |
| + | </div> |
| + | </section> |
| + | |
| + | <!-- ═══════ AGRO MODULE ═══════ --> |
| + | <div class="content"> |
| + | |
| + | <div class="module-block"> |
| + | <div class="module-header"> |
| + | <svg viewBox="0 0 24 24" width="28" height="28"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M7 12.5c1.5-3 3-5 5-6.5 1.5 2 3 4.5 3.5 7s-.5 5-3.5 6c-2-1-4-3-5-6.5z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M12 6v12" stroke="currentColor" stroke-width="1" opacity="0.5"/></svg> |
| + | <h2>Агро-модуль</h2> |
| + | </div> |
| + | <p class="module-desc">Мониторинг сельскохозяйственной техники, учёт обработок полей, отчёты и справочники.</p> |
| + | |
| + | <div class="audience-grid"> |
| + | |
| + | <div class="audience-card"> |
| + | <div class="audience-label"> |
| + | <svg viewBox="0 0 24 24" width="18" height="18"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg> |
| + | Для пользователей |
| + | </div> |
| + | <p class="audience-desc">Руководства по работе с модулем: поля, обработки, отчёты, настройки.</p> |
| + | <a href="/Руководство пользователя/Агро-модуль" class="audience-link">Перейти к статьям</a> |
| + | </div> |
| + | |
| + | <div class="audience-card"> |
| + | <div class="audience-label"> |
| + | <svg viewBox="0 0 24 24" width="18" height="18"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg> |
| + | Для интеграторов |
| + | </div> |
| + | <p class="audience-desc">Техническая документация: настройка, подключение оборудования, интеграция.</p> |
| + | <a href="/Документация для интеграторов" class="audience-link">Перейти к статьям</a> |
| + | </div> |
| + | |
| + | </div> |
| + | </div> |
| + | |
| + | </div> |
| + | |
| + | <!-- ═══════ FOOTER ═══════ --> |
| + | <footer class="footer"> |
| + | © 2026 SKIF.PRO · <a href="https://skif.pro" target="_blank">Платформа</a> |
| + | </footer> |
| + | |
| + | <!-- ═══════ SCRIPTS ═══════ --> |
| + | <script> |
| + | // Theme toggle |
| + | document.getElementById('themeToggle').addEventListener('click', () => { |
| + | const current = document.documentElement.dataset.theme; |
| + | const next = current === 'dark' ? 'light' : 'dark'; |
| + | document.documentElement.dataset.theme = next; |
| + | localStorage.setItem('theme', next); |
| + | }); |
| + | |
| + | // Cross-tab sync: if theme changes in another tab (e.g. Wiki.js), update here |
| + | window.addEventListener('storage', (e) => { |
| + | if (e.key === 'theme' && e.newValue) { |
| + | document.documentElement.dataset.theme = e.newValue; |
| + | } |
| + | }); |
| + | </script> |
| + | |
| + | </body> |
| + | </html> |