/** * Secure Link — портал пользователя (index, cabinet) */ .portal-page { --portal-bg: #070b14; --portal-card: rgba(17, 24, 39, 0.94); --portal-border: rgba(56, 189, 248, 0.22); --portal-accent: #38bdf8; --portal-accent-2: #a78bfa; --portal-text: #f1f5f9; --portal-muted: #94a3b8; --portal-ok: #34d399; --portal-warn: #fbbf24; --portal-err: #f87171; margin: 0; min-height: 100vh; font-family: "Inter", system-ui, sans-serif; color: var(--portal-text); background: var(--portal-bg); position: relative; } .portal-bg { position: fixed; inset: 0; z-index: 0; pointer-events: none; background: radial-gradient(ellipse 70% 45% at 20% -5%, rgba(56, 189, 248, 0.14), transparent 55%), radial-gradient(ellipse 50% 40% at 100% 100%, rgba(139, 92, 246, 0.12), transparent 50%), linear-gradient(165deg, #070b14 0%, #0c1222 50%, #070b14 100%); } .portal-bg::after { content: ""; position: absolute; inset: 0; opacity: 0.3; background-image: linear-gradient(rgba(56, 189, 248, 0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(56, 189, 248, 0.04) 1px, transparent 1px); background-size: 40px 40px; mask-image: radial-gradient(ellipse 80% 60% at 50% 30%, black 15%, transparent 70%); } .portal-wrap { position: relative; z-index: 1; max-width: 420px; margin: 0 auto; padding: 2rem 1.25rem 3rem; } .portal-wrap--wide { max-width: 920px; } .portal-hero-icon { width: 64px; height: 64px; margin: 0 auto 1rem; border-radius: 1rem; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; color: var(--portal-accent); background: rgba(56, 189, 248, 0.12); border: 1px solid var(--portal-border); box-shadow: 0 0 32px rgba(56, 189, 248, 0.2); } .portal-brand { font-family: "Orbitron", sans-serif; font-size: 0.75rem; letter-spacing: 0.2em; text-transform: uppercase; color: var(--portal-accent); margin: 0 0 0.35rem; } .portal-title { font-family: "Orbitron", sans-serif; font-weight: 700; margin: 0 0 0.5rem; color: #fff; } .portal-lead { color: var(--portal-muted); font-size: 0.92rem; line-height: 1.5; margin: 0; } .portal-auth-card { background: var(--portal-card); border: 1px solid var(--portal-border); border-radius: 1rem; padding: 0; overflow: hidden; box-shadow: 0 20px 50px rgba(0, 0, 0, 0.45); backdrop-filter: blur(10px); } .portal-tabs { display: flex; border-bottom: 1px solid rgba(42, 51, 82, 0.8); } .portal-tab { flex: 1; text-align: center; padding: 0.85rem 1rem; font-weight: 600; font-size: 0.88rem; color: var(--portal-muted); text-decoration: none; transition: color 0.15s, background 0.15s; } .portal-tab:hover { color: var(--portal-text); background: rgba(56, 189, 248, 0.06); } .portal-tab.is-active { color: var(--portal-accent); background: rgba(56, 189, 248, 0.1); box-shadow: inset 0 -2px 0 var(--portal-accent); } .portal-form { padding: 1.35rem 1.25rem 1.5rem; } .portal-label { display: block; font-size: 0.78rem; font-weight: 600; color: #cbd5e1; margin: 0 0 0.35rem; } .portal-optional { font-weight: 400; color: var(--portal-muted); } .portal-input { width: 100%; box-sizing: border-box; padding: 0.55rem 0.75rem; margin-bottom: 0.85rem; font-size: 0.9rem; color: #f8fafc; background: #0f172a; border: 1px solid #334155; border-radius: 0.45rem; } .portal-input:focus { outline: none; border-color: var(--portal-accent); box-shadow: 0 0 0 3px rgba(56, 189, 248, 0.2); } .portal-btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem; padding: 0.6rem 1.1rem; font-size: 0.88rem; font-weight: 600; border-radius: 0.5rem; border: none; cursor: pointer; text-decoration: none; font-family: inherit; transition: filter 0.15s, transform 0.1s; } .portal-btn--primary { color: #fff; background: linear-gradient(135deg, #0ea5e9, #0284c7); box-shadow: 0 4px 20px rgba(14, 165, 233, 0.35); } .portal-btn--accent { color: #fff; background: linear-gradient(135deg, #8b5cf6, #6366f1); box-shadow: 0 4px 18px rgba(139, 92, 246, 0.35); } .portal-btn--outline { color: var(--portal-accent); background: transparent; border: 1px solid rgba(56, 189, 248, 0.4); } .portal-btn--ghost { color: var(--portal-muted); background: rgba(30, 41, 59, 0.6); border: 1px solid #334155; } .portal-btn:hover { filter: brightness(1.08); } .portal-form-note { margin: 0.75rem 0 0; font-size: 0.75rem; color: var(--portal-muted); line-height: 1.4; } .portal-alert { display: flex; align-items: flex-start; gap: 0.5rem; padding: 0.65rem 0.85rem; border-radius: 0.5rem; font-size: 0.85rem; margin-bottom: 1rem; } .portal-alert--err { background: rgba(248, 113, 113, 0.1); border: 1px solid rgba(248, 113, 113, 0.35); color: #fecaca; } .portal-alert--ok { background: rgba(52, 211, 153, 0.1); border: 1px solid rgba(52, 211, 153, 0.35); color: #a7f3d0; } .portal-alert--warn { background: rgba(251, 191, 36, 0.08); border: 1px solid rgba(251, 191, 36, 0.3); color: #fde68a; } .portal-footer { text-align: center; margin-top: 1.5rem; font-size: 0.82rem; } .portal-footer a { color: var(--portal-muted); text-decoration: none; } .portal-footer a:hover { color: var(--portal-accent); } /* Cabinet */ .portal-cabinet-head { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 1rem; margin-bottom: 1.5rem; } .portal-user-line { font-size: 0.85rem; color: var(--portal-muted); margin: 0.25rem 0 0; } .portal-head-actions { display: flex; gap: 0.5rem; flex-wrap: wrap; } .portal-panel { background: var(--portal-card); border: 1px solid rgba(42, 51, 82, 0.9); border-radius: 0.85rem; padding: 1.15rem 1.2rem; margin-bottom: 1rem; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.25); } .portal-panel--renew { border-color: rgba(167, 139, 250, 0.35); } .portal-panel--warn { display: flex; align-items: center; gap: 0.65rem; border-color: rgba(251, 191, 36, 0.35); color: #fde68a; } .portal-panel--empty { text-align: center; color: var(--portal-muted); } .portal-panel__title { font-size: 1rem; font-weight: 600; margin: 0 0 0.65rem; display: flex; align-items: center; gap: 0.45rem; } .portal-panel__title i { color: var(--portal-accent); } .portal-muted { color: var(--portal-muted); } .portal-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } @media (max-width: 767.98px) { .portal-grid-2 { grid-template-columns: 1fr; } } .portal-links-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 0.65rem; } .portal-link-card { display: flex; flex-direction: column; gap: 0.25rem; padding: 0.75rem 0.85rem; border-radius: 0.55rem; border: 1px solid #334155; background: rgba(15, 23, 42, 0.6); text-decoration: none; color: inherit; transition: border-color 0.15s, box-shadow 0.15s; } .portal-link-card:hover { border-color: rgba(56, 189, 248, 0.45); } .portal-link-card.is-active { border-color: var(--portal-accent); box-shadow: 0 0 20px rgba(56, 189, 248, 0.15); } .portal-link-card__id { font-weight: 700; color: #7dd3fc; font-size: 0.9rem; } .portal-link-card__meta, .portal-link-card__uses { font-size: 0.75rem; color: var(--portal-muted); } .portal-badge { align-self: flex-start; font-size: 0.65rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; padding: 0.15rem 0.45rem; border-radius: 999px; } .portal-badge--ok { background: rgba(52, 211, 153, 0.15); color: #6ee7b7; border: 1px solid rgba(52, 211, 153, 0.35); } .portal-badge--warn { background: rgba(251, 191, 36, 0.12); color: #fcd34d; border: 1px solid rgba(251, 191, 36, 0.35); } .portal-badge--muted { background: rgba(100, 116, 139, 0.2); color: #94a3b8; border: 1px solid rgba(100, 116, 139, 0.4); } .portal-migrate-card { border: 1px solid rgba(42, 51, 82, 0.8); border-radius: 0.55rem; padding: 0.65rem 0.85rem; margin-bottom: 0.5rem; background: rgba(15, 23, 42, 0.5); } .portal-migrate-card summary { cursor: pointer; font-weight: 500; font-size: 0.88rem; } .portal-page--cabinet .server-item { display: block; width: 100%; text-align: left; padding: 0.55rem 0.75rem; margin-bottom: 0.35rem; border: 1px solid #334155; border-radius: 0.45rem; background: #0f172a; color: #e2e8f0; cursor: pointer; font-family: inherit; font-size: 0.88rem; } .portal-page--cabinet .server-item.is-selected { border-color: var(--portal-accent); background: rgba(56, 189, 248, 0.12); } .portal-renew-form .portal-input { margin-bottom: 0; } .portal-sub-card .portal-stat-num { font-family: "Orbitron", sans-serif; font-size: 1.75rem; font-weight: 700; color: #7dd3fc; } .portal-feature-list { margin: 0; padding: 0; list-style: none; font-size: 0.85rem; color: var(--portal-muted); } .portal-feature-list li { margin-bottom: 0.35rem; } .w-100 { width: 100%; }