/* ============================================ OLD MONEY — Design System Deep navy + Gold + Ivory/Cream Elegant, refined, "private banking" aesthetic ============================================ */ @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400;1,500&family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap'); /* === CSS VARIABLES === */ :root { --om-bg: #0D1117; --om-bg-card: #151B24; --om-bg-elevated: #1A2230; --om-bg-hover: #1E2738; --om-gold: #C9A84C; --om-gold-light: #E8D48B; --om-gold-dark: #8B7536; --om-gold-pale: rgba(201, 168, 76, 0.08); --om-gold-border: rgba(201, 168, 76, 0.18); --om-gold-border-light: rgba(201, 168, 76, 0.10); --om-grad-gold: linear-gradient(135deg, #C9A84C, #E8D48B); --om-grad-gold-dark: linear-gradient(135deg, #A68A3E, #C9A84C); --om-cream: #F5F0E8; --om-cream-muted: #C8C0B0; --om-cream-dark: #A09888; --om-text: #E8E0D0; --om-text-secondary: #B0A898; --om-text-muted: #807868; --om-text-dim: #605848; --om-font-display: 'Playfair Display', 'Georgia', 'Times New Roman', serif; --om-font-body: 'Inter', -apple-system, 'Segoe UI', sans-serif; --om-font-mono: 'JetBrains Mono', 'Menlo', monospace; --om-radius-sm: 6px; --om-radius: 8px; --om-radius-md: 12px; --om-radius-lg: 16px; --om-radius-xl: 24px; --om-shadow: 0 4px 24px rgba(0, 0, 0, 0.4); --om-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.3); --om-shadow-gold: 0 4px 20px rgba(201, 168, 76, 0.08); --om-duration: 0.25s ease; } /* === RESET === */ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } html, body { height: 100%; min-height: 100dvh; font-family: var(--om-font-body); background: var(--om-bg); color: var(--om-text); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow-x: hidden; } body { overflow-y: auto; padding-bottom: calc(env(safe-area-inset-bottom, 0px)); } /* === SCROLLBAR === */ ::-webkit-scrollbar { width: 4px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--om-gold-border); border-radius: 2px; } ::-webkit-scrollbar-thumb:hover { background: var(--om-gold); } /* === BACKGROUND PATTERN === */ .om-bg { position: relative; min-height: 100dvh; } .om-bg::before { content: ''; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: radial-gradient(ellipse at 20% 10%, rgba(201, 168, 76, 0.03) 0%, transparent 50%), radial-gradient(ellipse at 80% 90%, rgba(201, 168, 76, 0.02) 0%, transparent 50%); pointer-events: none; z-index: 0; } .om-page { position: relative; z-index: 1; max-width: 1280px; margin: 0 auto; padding: 24px 28px; min-height: 100dvh; } /* Safe area для мобильных браузеров — нижняя панель не перекрывает контент */ .om-page { padding-bottom: calc(24px + env(safe-area-inset-bottom, 0px)); } /* === TYPOGRAPHY === */ .om-title { font-family: var(--om-font-display); font-weight: 700; font-size: 28px; color: var(--om-cream); letter-spacing: 0.02em; } .om-title-gold { background: var(--om-grad-gold); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .om-subtitle { font-size: 13px; color: var(--om-text-muted); text-transform: uppercase; letter-spacing: 2px; font-weight: 500; } .om-heading { font-family: var(--om-font-display); font-size: 16px; font-weight: 600; color: var(--om-cream); margin-bottom: 12px; } /* === CARDS === */ .om-card { background: var(--om-bg-card); border: 1px solid var(--om-gold-border); border-radius: var(--om-radius-md); padding: 24px; transition: all var(--om-duration); } .om-card:hover { border-color: var(--om-gold-border); box-shadow: var(--om-shadow-gold); } .om-card-static { background: var(--om-bg-card); border: 1px solid var(--om-gold-border); border-radius: var(--om-radius-md); padding: 24px; } .om-card-gold { background: linear-gradient(135deg, rgba(201,168,76,0.06), rgba(201,168,76,0.02)); border: 1px solid var(--om-gold-border); border-radius: var(--om-radius-md); padding: 24px; } /* === BUTTONS === */ .om-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 10px 20px; border-radius: var(--om-radius); font-family: var(--om-font-body); font-size: 13px; font-weight: 500; border: none; cursor: pointer; transition: all var(--om-duration); text-decoration: none; white-space: nowrap; } .om-btn-primary { background: var(--om-grad-gold); color: #0D1117; font-weight: 600; } .om-btn-primary:hover { opacity: 0.9; transform: translateY(-1px); box-shadow: 0 4px 16px rgba(201, 168, 76, 0.2); } .om-btn-secondary { background: transparent; color: var(--om-cream); border: 1px solid var(--om-gold-border); } .om-btn-secondary:hover { background: var(--om-gold-pale); border-color: var(--om-gold); } .om-btn-sm { padding: 6px 14px; font-size: 12px; } .om-btn-block { width: 100%; justify-content: center; } /* === HEADER BAR === */ .om-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 28px; padding: 20px 24px; background: var(--om-bg-card); border: 1px solid var(--om-gold-border); border-radius: var(--om-radius-md); } .om-header-actions { display: flex; gap: 8px; align-items: center; } .om-header-left { display: flex; align-items: center; gap: 16px; } /* === NAV === */ .om-nav { display: flex; gap: 4px; flex-wrap: wrap; } .om-nav-link { padding: 6px 14px; border-radius: var(--om-radius-sm); font-size: 12px; font-weight: 500; color: var(--om-text-secondary); text-decoration: none; transition: all var(--om-duration); border: 1px solid transparent; } .om-nav-link:hover { color: var(--om-cream); background: var(--om-gold-pale); border-color: var(--om-gold-border-light); } .om-nav-link.active { color: var(--om-gold); border-color: var(--om-gold-border); background: var(--om-gold-pale); } /* === SEPARATOR === */ .om-separator { height: 1px; background: var(--om-gold-border-light); margin: 20px 0; border: none; } /* === GRID SYSTEMS === */ .om-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; } .om-grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; } .om-grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; } /* === STAT CARDS === */ .om-stat { text-align: center; padding: 24px; background: var(--om-bg-card); border: 1px solid var(--om-gold-border-light); border-radius: var(--om-radius); } .om-stat-value { font-family: var(--om-font-display); font-size: 28px; font-weight: 700; background: var(--om-grad-gold); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; line-height: 1.2; } .om-stat-label { font-size: 10px; color: var(--om-text-muted); text-transform: uppercase; letter-spacing: 1.5px; margin-top: 4px; font-weight: 500; } /* === INPUTS === */ .om-input { width: 100%; padding: 12px 16px; background: rgba(13, 17, 23, 0.6); border: 1px solid var(--om-gold-border); border-radius: var(--om-radius); color: var(--om-cream); font-family: var(--om-font-body); font-size: 14px; outline: none; transition: border-color var(--om-duration); } .om-input:focus { border-color: var(--om-gold); } .om-input::placeholder { color: var(--om-text-dim); } /* === TABLES / LISTS === */ .om-item { display: flex; align-items: center; gap: 12px; padding: 12px 0; border-bottom: 1px solid var(--om-gold-border-light); } .om-item:last-child { border-bottom: none; } /* === AVATAR === */ .om-avatar { width: 40px; height: 40px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-family: var(--om-font-display); font-weight: 600; font-size: 15px; color: var(--om-cream); background: linear-gradient(135deg, var(--om-gold-dark), var(--om-gold)); flex-shrink: 0; } .om-avatar-sm { width: 32px; height: 32px; font-size: 12px; } /* === BADGE === */ .om-badge { display: inline-flex; align-items: center; padding: 2px 10px; border-radius: 20px; font-size: 10px; font-weight: 600; letter-spacing: 0.5px; text-transform: uppercase; } .om-badge-gold { background: rgba(201, 168, 76, 0.12); color: var(--om-gold-light); } .om-badge-green { background: rgba(74, 187, 94, 0.12); color: #6BBF7A; } .om-badge-blue { background: rgba(74, 128, 187, 0.12); color: #7AA3CF; } .om-badge-red { background: rgba(187, 74, 74, 0.12); color: #CF7A7A; } /* === TOAST === */ .om-toast-container { position: fixed; top: 20px; right: 20px; z-index: 9999; display: flex; flex-direction: column; gap: 8px; } .om-toast { padding: 14px 20px; background: var(--om-bg-card); border: 1px solid var(--om-gold-border); border-radius: var(--om-radius); color: var(--om-cream); font-size: 13px; box-shadow: var(--om-shadow); animation: omToastIn 0.3s ease; max-width: 320px; } @keyframes omToastIn { from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: translateX(0); } } /* === LOADING === */ .om-loading { position: fixed; inset: 0; z-index: 9998; display: flex; flex-direction: column; align-items: center; justify-content: center; background: var(--om-bg); transition: opacity 0.5s ease; } .om-loading.hidden { opacity: 0; pointer-events: none; } .om-loading-spinner { width: 32px; height: 32px; border: 2px solid var(--om-gold-border); border-top: 2px solid var(--om-gold); border-radius: 50%; animation: omSpin 1s linear infinite; margin-bottom: 16px; } .om-loading-text { font-family: var(--om-font-display); font-size: 14px; color: var(--om-text-muted); letter-spacing: 2px; text-transform: uppercase; } @keyframes omSpin { to { transform: rotate(360deg); } } /* === ENTRANCE ANIMATIONS === */ @keyframes omFadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } .om-fade-in { animation: omFadeIn 0.4s ease forwards; } /* === RESPONSIVE === */ @media (max-width: 1024px) { .om-grid-3 { grid-template-columns: repeat(2, 1fr); } .om-grid-4 { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { .om-page { padding: 16px; padding-bottom: calc(24px + env(safe-area-inset-bottom, 0px)); min-height: 100dvh; } .om-header { flex-direction: column; gap: 12px; text-align: center; } .om-header-left { flex-direction: column; gap: 8px; } .om-grid-2 { grid-template-columns: 1fr; } .om-grid-3 { grid-template-columns: 1fr; } .om-grid-4 { grid-template-columns: repeat(2, 1fr); } .om-nav { justify-content: center; } } /* === SPACING SYSTEM — единые отступы === */ :root { --om-space-xs: 4px; --om-space-sm: 8px; --om-space: 12px; --om-space-md: 16px; --om-space-lg: 24px; --om-space-xl: 32px; --om-space-2xl: 48px; } /* Section spacing — стандартный зазор между блоками */ .om-section { margin-bottom: var(--om-space-lg); } .om-section-sm { margin-bottom: var(--om-space-md); } .om-section-lg { margin-bottom: var(--om-space-xl); } /* ============================================ AUTO-SPACING — Автоматическая коррекция отступов Каждый прямой потомок .om-page получает margin-bottom Кроме последнего — чтобы не было лишнего отступа внизу ============================================ */ .om-page > * { margin-bottom: var(--om-space-lg); } .om-page > *:last-child { margin-bottom: 0; } /* Для om-header который уже имеет margin-bottom: 28px — не дублируем */ .om-header { margin-bottom: 28px !important; } /* Повышаем специфичность .om-section чтобы он гарантированно работал */ .om-page > .om-section, .om-page .om-section { margin-bottom: var(--om-space-lg) !important; } /* Но не для последнего элемента — там отступ не нужен */ .om-page > .om-section:last-child, .om-page .om-section:last-child { margin-bottom: 0 !important; } /* Margin utilities */ .om-mb-xs { margin-bottom: var(--om-space-xs); } .om-mb-sm { margin-bottom: var(--om-space-sm); } .om-mb { margin-bottom: var(--om-space); } .om-mb-md { margin-bottom: var(--om-space-md); } .om-mb-lg { margin-bottom: var(--om-space-lg); } .om-mb-xl { margin-bottom: var(--om-space-xl); } .om-mt-xs { margin-top: var(--om-space-xs); } .om-mt-sm { margin-top: var(--om-space-sm); } .om-mt { margin-top: var(--om-space); } .om-mt-md { margin-top: var(--om-space-md); } .om-mt-lg { margin-top: var(--om-space-lg); } .om-mt-xl { margin-top: var(--om-space-xl); } /* Gap utilities */ .om-gap-xs { gap: var(--om-space-xs); } .om-gap-sm { gap: var(--om-space-sm); } .om-gap { gap: var(--om-space); } .om-gap-md { gap: var(--om-space-md); } .om-gap-lg { gap: var(--om-space-lg); } /* Padding utilities */ .om-p { padding: var(--om-space); } .om-p-md { padding: var(--om-space-md); } .om-p-lg { padding: var(--om-space-lg); } .om-px-lg { padding-left: var(--om-space-lg); padding-right: var(--om-space-lg); } .om-py-md { padding-top: var(--om-space-md); padding-bottom: var(--om-space-md); } .om-py-lg { padding-top: var(--om-space-lg); padding-bottom: var(--om-space-lg); } /* === CARD PADDING NORMALIZATION === */ .om-card, .om-card-static, .om-card-gold, .sett-card, .profile-card, .product-card, .job-card { padding: var(--om-space-lg); } @media (max-width: 480px) { .om-page { padding: 12px; } .om-grid-4 { grid-template-columns: 1fr 1fr; } .om-stat-value { font-size: 22px; } .om-card, .om-card-static, .om-card-gold, .sett-card, .profile-card, .product-card, .job-card { padding: var(--om-space-md); } }