/** * Guest share page — Bootstrap 5 + Font Awesome 6 */ :root, [data-bs-theme="dark"] { --bs-body-bg: #05060f; --bs-body-color: #e0e6ff; --bs-border-color: #1a1f3d; --bs-primary: #00d4e8; --bs-primary-rgb: 0, 212, 232; --bs-success: #00ff9d; --bs-danger: #ff3860; --bs-warning: #ffe23d; --bs-secondary-color: #8892b8; } :root { --bg: #05060f; --bg2: #0b0d1a; --card: #0d1025; --card-edge: #1a1f3d; --card-edge2: #252b55; --text: #e0e6ff; --muted: #8892b8; --text3: #555d80; --neon-cyan: #00f0ff; --neon-cyan-dim: rgba(0, 240, 255, 0.08); --neon-cyan-glow: rgba(0, 240, 255, 0.35); --neon-pink: #ff2d7b; --neon-pink-glow: rgba(255, 45, 123, 0.35); --neon-purple: #b24dff; --neon-purple-dim: rgba(178, 77, 255, 0.12); --neon-yellow: #ffe23d; --neon-yellow-dim: rgba(255, 226, 61, 0.1); --accent: var(--neon-cyan); --accent-dim: var(--neon-cyan-dim); --ok: #00ff9d; --ok-bg: rgba(0, 255, 157, 0.08); --err: #ff3860; --err-bg: rgba(255, 56, 96, 0.1); --radius: 6px; --shadow: 0 8px 40px rgba(0, 0, 0, 0.55), 0 0 1px rgba(0, 240, 255, 0.15); --font-display: 'Orbitron', sans-serif; --font-mono: 'JetBrains Mono', ui-monospace, monospace; --font-body: 'Inter', system-ui, sans-serif; } * { box-sizing: border-box; } ::selection { background: rgba(0, 240, 255, 0.25); color: #fff; } ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: var(--bg2); } ::-webkit-scrollbar-thumb { background: var(--card-edge2); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: var(--neon-cyan); } body.share-app { font-family: var(--font-body); margin: 0; min-height: 100vh; color: var(--text); background: var(--bg); padding: 1.25rem 1rem 3rem; line-height: 1.5; } body.share-app::before { content: ''; position: fixed; inset: 0; z-index: -1; pointer-events: none; background: radial-gradient(ellipse 80% 50% at 50% -20%, rgba(0, 240, 255, 0.12), transparent 55%), radial-gradient(ellipse 60% 40% at 100% 50%, rgba(178, 77, 255, 0.08), transparent 50%), radial-gradient(ellipse 50% 35% at 0% 80%, rgba(255, 45, 123, 0.06), transparent 45%), linear-gradient(180deg, transparent 0%, rgba(0, 240, 255, 0.015) 50%, transparent 100%), repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(0, 240, 255, 0.018) 2px, rgba(0, 240, 255, 0.018) 4px); } .wrap { max-width: 500px; margin: 0 auto; position: relative; } .wrap svg:not(.qr-box svg) { filter: drop-shadow(0 0 4px var(--neon-cyan-glow)); } .hero { text-align: center; margin-bottom: 1.5rem; padding-top: 0.25rem; } .hero-icon { width: 64px; height: 64px; margin: 0 auto 0.85rem; border-radius: var(--radius); background: var(--neon-cyan-dim); border: 1px solid rgba(0, 240, 255, 0.35); display: flex; align-items: center; justify-content: center; box-shadow: 0 0 24px rgba(0, 240, 255, 0.15), inset 0 0 20px rgba(0, 240, 255, 0.05); animation: hero-pulse 3s ease-in-out infinite; } @keyframes hero-pulse { 0%, 100% { box-shadow: 0 0 24px rgba(0, 240, 255, 0.15), inset 0 0 20px rgba(0, 240, 255, 0.05); } 50% { box-shadow: 0 0 32px rgba(0, 240, 255, 0.28), inset 0 0 28px rgba(0, 240, 255, 0.08); } } .hero-icon svg { width: 30px; height: 30px; color: var(--neon-cyan); filter: drop-shadow(0 0 8px var(--neon-cyan-glow)); } .hero-brand { font-family: var(--font-mono); font-size: 0.65rem; letter-spacing: 0.28em; text-transform: uppercase; color: var(--neon-pink); margin-bottom: 0.35rem; text-shadow: 0 0 10px var(--neon-pink-glow); } h1 { font-family: var(--font-display); font-size: 1.15rem; font-weight: 700; margin: 0 0 0.35rem 0; letter-spacing: 0.12em; text-transform: uppercase; color: var(--neon-cyan); text-shadow: 0 0 16px var(--neon-cyan-glow); } .lead { color: var(--muted); font-size: 0.9rem; margin: 0; max-width: 34ch; margin-left: auto; margin-right: auto; line-height: 1.55; } .configs-anchor-wrap { text-align: center; margin: 0 0 1rem 0; } .configs-anchor { display: inline-flex; align-items: center; justify-content: center; gap: 0.35rem; padding: 0.55rem 1rem; border-radius: var(--radius); font-family: var(--font-mono); font-size: 0.78rem; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--neon-cyan); text-decoration: none; border: 1px solid rgba(0, 240, 255, 0.35); background: var(--neon-cyan-dim); transition: border-color 0.2s, box-shadow 0.2s, color 0.2s; } .configs-anchor:hover { border-color: var(--neon-cyan); color: #fff; box-shadow: 0 0 16px rgba(0, 240, 255, 0.2); text-shadow: 0 0 8px var(--neon-cyan-glow); } .dl-bundle { margin-top: 1.25rem; padding-top: 1.25rem; border-top: 1px solid var(--card-edge); } .dl-bundle__name { font-family: var(--font-display); font-size: 0.9rem; font-weight: 700; color: var(--neon-cyan); margin: 0 0 0.4rem 0; line-height: 1.35; letter-spacing: 0.06em; text-transform: uppercase; text-shadow: 0 0 10px var(--neon-cyan-glow); } .dl-bundle__meta { font-size: 0.78rem; color: var(--muted); margin: 0 0 1rem 0; line-height: 1.45; } .dl-bundle[hidden] { display: none !important; } .dl-bundle--primary { margin-top: 0; padding-top: 0; border-top: none; } .configs-more { margin-top: 0.25rem; } .configs-more__toggle { width: 100%; display: flex; align-items: center; justify-content: center; gap: 0.55rem; padding: 0.8rem 1rem; border: 1px solid rgba(0, 240, 255, 0.22); border-radius: var(--radius); background: rgba(0, 240, 255, 0.05); color: var(--neon-cyan); font-family: var(--font-display); font-size: 0.78rem; font-weight: 700; letter-spacing: 0.07em; text-transform: uppercase; cursor: pointer; transition: border-color 0.2s, background 0.2s, box-shadow 0.2s; } .configs-more__toggle:hover { border-color: var(--neon-cyan); background: rgba(0, 240, 255, 0.1); box-shadow: 0 0 14px rgba(0, 240, 255, 0.15); } .configs-more__toggle.is-open { border-color: rgba(255, 45, 149, 0.45); color: #ffb8dc; background: rgba(255, 45, 149, 0.06); } .configs-more__chevron { transition: transform 0.2s ease; font-size: 0.72rem; } .configs-more__toggle.is-open .configs-more__chevron { transform: rotate(180deg); } .configs-more__hint { margin: 0.55rem 0 0; font-size: 0.76rem; text-align: center; } .configs-more__body { margin-top: 0.85rem; } .configs-more__body[hidden] { display: none !important; } .dl-pager { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 0.4rem; margin-top: 1.5rem; padding-top: 1.25rem; border-top: 1px solid var(--card-edge); } .dl-pager__pages { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 0.35rem; } .dl-pager__btn { display: inline-flex; align-items: center; gap: 0.35rem; min-width: 2.25rem; padding: 0.4rem 0.7rem; border: 1px solid var(--card-edge); border-radius: 0.6rem; background: rgba(255, 255, 255, 0.03); color: var(--muted); font-size: 0.85rem; font-weight: 600; line-height: 1; cursor: pointer; transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease; } .dl-pager__page { justify-content: center; } .dl-pager__btn:hover:not(:disabled) { color: #fff; border-color: var(--neon-cyan); background: rgba(255, 255, 255, 0.06); } .dl-pager__page.is-active { color: #061018; background: var(--neon-cyan); border-color: var(--neon-cyan); box-shadow: 0 0 12px var(--neon-cyan-glow); } .dl-pager__btn:disabled { opacity: 0.4; cursor: default; } .stats { display: grid; grid-template-columns: 1fr 1fr; gap: 0.65rem; margin-bottom: 1rem; } .stat { background: var(--card); border: 1px solid var(--card-edge); border-radius: var(--radius); padding: 0.65rem 0.75rem; display: flex; align-items: flex-start; gap: 0.5rem; font-size: 0.8rem; position: relative; overflow: hidden; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.35); } .stat::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, var(--neon-cyan), transparent); opacity: 0.35; } .stat svg { flex-shrink: 0; width: 18px; height: 18px; color: var(--neon-cyan); margin-top: 2px; } .stat strong { display: block; color: var(--text); font-size: 1rem; font-weight: 600; font-family: var(--font-mono); } .stat span.muted { color: var(--text3); font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.08em; font-family: var(--font-mono); } .card { background: var(--card); border: 1px solid var(--card-edge); border-radius: var(--radius); padding: 1.25rem; margin-bottom: 1rem; box-shadow: var(--shadow); position: relative; overflow: hidden; } .card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent 5%, var(--neon-cyan) 50%, var(--neon-pink) 95%); opacity: 0.35; } .card--download { padding-bottom: 1.5rem; } .alert { display: flex; gap: 0.65rem; align-items: flex-start; padding: 0.85rem 1rem; border-radius: var(--radius); margin-bottom: 1rem; font-size: 0.88rem; } .alert svg { flex-shrink: 0; width: 20px; height: 20px; margin-top: 2px; } .alert--err { background: var(--err-bg); border: 1px solid rgba(255, 56, 96, 0.35); color: #ffb3c1; } .alert--err svg { color: var(--err); filter: drop-shadow(0 0 6px rgba(255, 56, 96, 0.5)); } .alert--ok { background: var(--ok-bg); border: 1px solid rgba(0, 255, 157, 0.3); color: #a7f3d0; } .alert--ok svg { color: var(--ok); filter: drop-shadow(0 0 6px rgba(0, 255, 157, 0.4)); } .alert--warn { background: rgba(255, 170, 0, 0.08); border: 1px solid rgba(255, 170, 0, 0.35); color: #ffe4a8; } .alert--warn i { color: #ffb84d; filter: drop-shadow(0 0 6px rgba(255, 170, 0, 0.35)); } .maintenance-banner { margin-top: 0.25rem; } .field { margin-bottom: 1.15rem; } .field:last-of-type { margin-bottom: 0; } .field-label { display: flex; align-items: center; gap: 0.45rem; font-family: var(--font-mono); font-weight: 600; font-size: 0.72rem; margin-bottom: 0.5rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.1em; } .field-label svg { width: 16px; height: 16px; color: var(--neon-cyan); flex-shrink: 0; } select.share-select { width: 100%; padding: 0.65rem 0.75rem; border-radius: var(--radius); border: 1px solid var(--card-edge); background: var(--bg2); color: var(--text); font-family: var(--font-body); font-size: 0.92rem; cursor: pointer; appearance: none; transition: border-color 0.2s, box-shadow 0.2s; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%2300f0ff'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 0.65rem center; background-size: 1rem; padding-right: 2.25rem; } select.share-select:focus { outline: none; border-color: rgba(0, 240, 255, 0.5); box-shadow: 0 0 0 2px rgba(0, 240, 255, 0.12); } select.share-select:disabled { opacity: 0.5; cursor: not-allowed; } .server-search-wrap { display: none; margin-bottom: 0.55rem; } .server-search-wrap.is-visible { display: block; } .server-search-field { position: relative; } .server-search-field svg { position: absolute; left: 0.7rem; top: 50%; transform: translateY(-50%); width: 16px; height: 16px; color: var(--neon-cyan); pointer-events: none; opacity: 0.85; } .server-search { width: 100%; padding: 0.62rem 2rem 0.62rem 2.35rem; border-radius: var(--radius); border: 1px solid var(--card-edge); background: var(--bg2); color: var(--text); font-family: var(--font-body); font-size: 0.92rem; transition: border-color 0.2s, box-shadow 0.2s; } .server-search::placeholder { color: var(--text3); } .server-search:focus { outline: none; border-color: rgba(0, 240, 255, 0.5); box-shadow: 0 0 0 2px rgba(0, 240, 255, 0.12); } .server-search-clear { position: absolute; right: 0.45rem; top: 50%; transform: translateY(-50%); width: 26px; height: 26px; padding: 0; border: none; border-radius: var(--radius); background: transparent; color: var(--muted); cursor: pointer; display: none; align-items: center; justify-content: center; } .server-search-clear:hover { color: var(--neon-cyan); background: var(--neon-cyan-dim); } .server-search-clear.is-visible { display: flex; } .server-search-clear svg { width: 14px; height: 14px; position: static; transform: none; } .server-search-empty { display: none; margin: 0.35rem 0 0.5rem; padding: 0.65rem 0.75rem; font-size: 0.82rem; color: var(--muted); text-align: center; font-family: var(--font-mono); border: 1px dashed var(--card-edge); border-radius: var(--radius); } .server-search-empty.is-visible { display: block; } .server-list { display: flex; flex-direction: column; gap: 0.5rem; max-height: 320px; overflow-y: auto; padding-right: 4px; scroll-behavior: smooth; } .server-list::-webkit-scrollbar { width: 6px; } .server-list::-webkit-scrollbar-track { background: transparent; } .server-list::-webkit-scrollbar-thumb { background: var(--card-edge2); border-radius: 3px; } .server-list::-webkit-scrollbar-thumb:hover { background: var(--neon-cyan); } .server-item { position: relative; display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 0.85rem; border-radius: var(--radius); border: 1px solid var(--card-edge); background: var(--bg2); cursor: pointer; transition: border-color 0.2s, background 0.2s, box-shadow 0.2s; } .server-item:hover { border-color: rgba(0, 240, 255, 0.35); box-shadow: 0 0 12px rgba(0, 240, 255, 0.06); } .server-item.is-selected { border-color: var(--neon-cyan); background: var(--neon-cyan-dim); box-shadow: 0 0 0 1px rgba(0, 240, 255, 0.4), 0 0 20px rgba(0, 240, 255, 0.1); } .server-item input[type="radio"] { position: absolute; opacity: 0; pointer-events: none; } .server-flag { font-size: 1.65rem; line-height: 1; flex-shrink: 0; width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; border-radius: 8px; background: rgba(148, 163, 184, 0.08); } .server-flag--empty { font-size: 1.1rem; color: var(--muted); } .server-flag img { width: 28px; height: 28px; object-fit: cover; border-radius: 6px; display: block; box-shadow: 0 0 0 1px rgba(0, 240, 255, 0.15); } .server-flag--emoji .server-flag__twemoji { object-fit: contain; border-radius: 4px; box-shadow: none; } .server-flag__raw { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .server-info { flex: 1; min-width: 0; } .server-name { font-weight: 600; font-size: 0.92rem; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .server-speed { display: inline-flex; align-items: center; gap: 0.35rem; margin-top: 0.18rem; font-size: 0.74rem; font-weight: 600; color: var(--neon-yellow); font-family: var(--font-mono); letter-spacing: 0.02em; line-height: 1.3; } .server-speed i { font-size: 0.68rem; color: #fbbf24; filter: drop-shadow(0 0 4px rgba(251, 191, 36, 0.35)); } .server-speed__text { color: #fde68a; } .server-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem; margin-top: 0.2rem; } .server-badge { display: inline-flex; align-items: center; gap: 0.2rem; padding: 0.15rem 0.45rem; border-radius: 6px; font-size: 0.68rem; font-weight: 600; letter-spacing: 0.02em; text-transform: uppercase; line-height: 1.4; } .server-badge--wg { background: rgba(0, 255, 157, 0.08); color: var(--ok); border: 1px solid rgba(0, 255, 157, 0.3); font-family: var(--font-mono); } .server-badge--awg { background: var(--neon-purple-dim); color: var(--neon-purple); border: 1px solid rgba(178, 77, 255, 0.35); font-family: var(--font-mono); } .server-badge--vless { background: rgba(56, 189, 248, 0.1); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.35); font-family: var(--font-mono); } .server-badge--off { background: rgba(148,163,184,0.08); color: var(--muted); border: 1px solid rgba(148,163,184,0.15); text-decoration: line-through; opacity: 0.5; } .server-notice { font-size: 0.72rem; color: var(--neon-yellow); margin-top: 0.15rem; line-height: 1.3; font-family: var(--font-mono); } .server-check { flex-shrink: 0; width: 22px; height: 22px; border-radius: 50%; border: 2px solid var(--card-edge); display: flex; align-items: center; justify-content: center; transition: border-color 0.15s, background 0.15s; } .server-item.is-selected .server-check { border-color: var(--neon-cyan); background: var(--neon-cyan); box-shadow: 0 0 10px var(--neon-cyan-glow); } .server-check svg { width: 14px; height: 14px; color: #fff; opacity: 0; } .server-item.is-selected .server-check svg { opacity: 1; } .server-item.is-disabled { opacity: 0.45; cursor: not-allowed; pointer-events: none; border-style: dashed; } .server-off-label { display: inline-block; font-size: 0.68rem; font-weight: 600; color: #f87171; background: rgba(220,38,38,0.12); padding: 0.08rem 0.35rem; border-radius: 4px; margin-left: 0.35rem; vertical-align: middle; text-transform: uppercase; letter-spacing: 0.02em; } .load-line { display: flex; align-items: center; gap: 0.5rem; color: var(--muted); font-size: 0.88rem; margin-top: 0.5rem; } .spinner { width: 18px; height: 18px; border: 2px solid rgba(0, 240, 255, 0.15); border-top-color: var(--neon-cyan); border-radius: 50%; animation: spin 0.7s linear infinite; box-shadow: 0 0 8px rgba(0, 240, 255, 0.2); } @keyframes spin { to { transform: rotate(360deg); } } .proto-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(9.5rem, 1fr)); gap: 0.6rem; } .proto-card { position: relative; display: block; margin: 0; padding: 0.75rem 0.65rem; border-radius: var(--radius); border: 1px solid var(--card-edge); background: var(--bg2); cursor: pointer; transition: border-color 0.2s, background 0.2s, box-shadow 0.2s; } .proto-card:hover { border-color: rgba(0, 240, 255, 0.35); } .proto-card input { position: absolute; opacity: 0; pointer-events: none; } .proto-card input:checked + .proto-inner { color: var(--text); } .proto-card:has(input:checked) { border-color: var(--neon-cyan); background: var(--neon-cyan-dim); box-shadow: 0 0 16px rgba(0, 240, 255, 0.08); } #proto-card-awg:has(input:checked) { border-color: var(--neon-purple); background: var(--neon-purple-dim); box-shadow: 0 0 16px rgba(178, 77, 255, 0.12); } #proto-card-vless:has(input:checked) { border-color: #38bdf8; background: rgba(56, 189, 248, 0.08); box-shadow: 0 0 16px rgba(56, 189, 248, 0.12); } .proto-inner { display: flex; flex-direction: column; gap: 0.15rem; } .proto-title { font-weight: 600; font-size: 0.88rem; letter-spacing: 0.02em; display: flex; align-items: center; gap: 0.35rem; } .proto-ico { width: 16px; height: 16px; color: var(--neon-cyan); flex-shrink: 0; } .proto-ico--awg { color: var(--neon-purple); } .proto-ico--vless { color: #38bdf8; } .proto-hint { font-size: 0.7rem; color: var(--text3); line-height: 1.35; font-family: var(--font-mono); } .proto-vless-notice { margin-top: 0.65rem; padding: 0.7rem 0.85rem; background: rgba(56, 189, 248, 0.08); border: 1px solid rgba(56, 189, 248, 0.4); border-radius: var(--radius); font-size: 0.82rem; line-height: 1.5; color: #bae6fd; box-shadow: inset 0 0 20px rgba(56, 189, 248, 0.05); } .proto-vless-notice strong { color: #e0f2fe; font-family: var(--font-display); font-size: 0.75rem; letter-spacing: 0.05em; } .proto-vless-notice p { margin: 0.45rem 0 0; } .proto-vless-notice p:first-of-type { margin-top: 0.35rem; } .proto-awg-notice { margin-top: 0.65rem; padding: 0.7rem 0.85rem; background: var(--neon-purple-dim); border: 1px solid rgba(178, 77, 255, 0.4); border-radius: var(--radius); font-size: 0.82rem; line-height: 1.5; color: #d4b8ff; box-shadow: inset 0 0 20px rgba(178, 77, 255, 0.05); } .proto-awg-notice strong { color: #e9d5ff; font-family: var(--font-display); font-size: 0.75rem; letter-spacing: 0.05em; } .proto-awg-notice p { margin: 0.45rem 0 0; } .proto-awg-notice p:first-of-type { margin-top: 0.35rem; } .btn-primary { width: 100%; margin-top: 1.15rem; padding: 0.9rem 1rem; border: 1px solid rgba(0, 240, 255, 0.5); border-radius: var(--radius); background: linear-gradient(180deg, rgba(0, 240, 255, 0.25) 0%, rgba(0, 200, 221, 0.15) 100%); color: #fff; font-family: var(--font-display); font-weight: 700; font-size: 0.82rem; letter-spacing: 0.1em; text-transform: uppercase; cursor: pointer; box-shadow: 0 0 24px rgba(0, 240, 255, 0.2), inset 0 0 20px rgba(0, 240, 255, 0.06); display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; transition: box-shadow 0.2s, border-color 0.2s, transform 0.12s; text-shadow: 0 0 12px var(--neon-cyan-glow); } .btn-primary:hover:not(:disabled) { border-color: var(--neon-cyan); box-shadow: 0 0 32px rgba(0, 240, 255, 0.35), inset 0 0 24px rgba(0, 240, 255, 0.1); } .btn-primary:active:not(:disabled) { transform: scale(0.98); } .btn-primary:disabled { opacity: 0.4; cursor: not-allowed; box-shadow: none; border-color: var(--card-edge); } .btn-primary svg { width: 18px; height: 18px; filter: drop-shadow(0 0 4px var(--neon-cyan-glow)); } .hint { color: var(--muted); font-size: 0.78rem; margin-top: 0.65rem; line-height: 1.45; } .meta { color: var(--muted); font-size: 0.88rem; line-height: 1.55; } a.dl { display: inline-flex; align-items: center; gap: 0.35rem; color: var(--accent); font-weight: 600; text-decoration: none; padding: 0.35rem 0; } a.dl:hover { text-decoration: underline; } a.dl svg { width: 16px; height: 16px; } .download-title { display: flex; align-items: center; gap: 0.5rem; font-family: var(--font-display); font-size: 0.85rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; margin: 0 0 1rem 0; } .download-title svg { width: 22px; height: 22px; color: var(--ok); } .dl-block { margin-bottom: 1.25rem; } .dl-block:last-child { margin-bottom: 0; } .dl-row { display: flex; flex-wrap: wrap; gap: 1rem; margin-top: 0.65rem; align-items: flex-start; } .dl-side { flex: 1; min-width: 0; } .qr-box { background: #fff; padding: 10px; border-radius: var(--radius); border: 2px solid var(--neon-cyan); box-shadow: 0 0 24px rgba(0, 240, 255, 0.25), 0 4px 20px rgba(0, 0, 0, 0.4); max-width: 370px; } .qr-box, .qr-box * { filter: none !important; } .qr-box img { max-width: 100%; height: auto; } .qr-box canvas { max-width: 100%; height: auto !important; } #qr-c, #qr-v { display: inline-block; } pre { flex: 1; min-width: 0; background: rgba(2, 6, 23, 0.65); color: #cbd5e1; padding: 0.75rem; border-radius: 10px; font-size: 0.72rem; overflow: auto; white-space: pre-wrap; word-break: break-word; max-height: 200px; margin: 0; border: 1px solid var(--card-edge); } .badge-file { font-size: 0.75rem; color: var(--muted); margin-bottom: 0.25rem; } .guest-metrics { display: grid; gap: 0.65rem; margin-bottom: 1.25rem; } .guest-metrics--2 { grid-template-columns: 1fr 1fr; } @media (max-width: 420px) { .guest-metrics--2 { grid-template-columns: 1fr; } } .metric-tile { background: var(--bg2); border: 1px solid var(--card-edge); border-radius: var(--radius); padding: 0.85rem 1rem; display: flex; gap: 0.65rem; align-items: flex-start; position: relative; overflow: hidden; } .metric-tile::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, var(--neon-cyan), transparent); opacity: 0.3; } .metric-tile svg { flex-shrink: 0; width: 22px; height: 22px; margin-top: 2px; color: var(--neon-cyan); } .metric-tile .metric-val { display: block; font-size: 1.05rem; font-weight: 600; color: var(--text); } .metric-tile .metric-sub { font-size: 0.78rem; color: var(--muted); margin-top: 0.2rem; line-height: 1.35; } .progress-track { height: 8px; border-radius: 999px; background: rgba(148, 163, 184, 0.2); overflow: hidden; margin-top: 0.55rem; } .progress-fill { height: 100%; border-radius: 999px; background: linear-gradient(90deg, var(--neon-cyan), var(--neon-purple)); box-shadow: 0 0 10px var(--neon-cyan-glow); transition: width 0.35s ease; } .metric-tile__body { flex: 1; min-width: 0; } .dl-bundle__traffic { margin: 0.35rem 0 0.65rem; font-size: 0.78rem; color: var(--muted); } .dl-bundle__traffic .traffic-key-label { color: #b8f4ff; } details.tech-details { margin-top: 0.5rem; font-size: 0.8rem; } details.tech-details summary { cursor: pointer; color: var(--muted); user-select: none; list-style: none; } details.tech-details summary::-webkit-details-marker { display: none; } details.tech-details pre { margin-top: 0.45rem; max-height: 130px; } .empty-state { text-align: center; padding: 1.5rem 0.5rem; } .empty-state svg { width: 48px; height: 48px; color: var(--muted); opacity: 0.6; margin-bottom: 0.75rem; } .hint-wait { border-left: 2px solid var(--neon-cyan); padding: 0.5rem 0 0.5rem 0.75rem; margin: 0.75rem 0 0; font-size: 0.8rem; color: var(--muted); line-height: 1.45; font-family: var(--font-mono); box-shadow: -4px 0 12px rgba(0, 240, 255, 0.08); } .dl-actions { display: flex; flex-direction: column; gap: 0.65rem; margin: 0.85rem 0 1rem; } .btn-dl { display: flex; align-items: center; justify-content: center; gap: 0.5rem; width: 100%; padding: 0.95rem 1rem; border-radius: 12px; font-weight: 700; font-size: 1.05rem; text-decoration: none; border: none; cursor: pointer; transition: transform 0.12s ease, filter 0.12s ease; } .btn-dl:active { transform: scale(0.98); } .btn-dl--primary { border: 1px solid rgba(0, 255, 157, 0.45); background: linear-gradient(180deg, rgba(0, 255, 157, 0.22) 0%, rgba(0, 200, 120, 0.12) 100%); color: #fff; font-family: var(--font-display); font-size: 0.85rem; letter-spacing: 0.06em; text-transform: uppercase; box-shadow: 0 0 24px rgba(0, 255, 157, 0.15); } .btn-dl--primary:hover { box-shadow: 0 0 32px rgba(0, 255, 157, 0.28); border-color: var(--ok); } .btn-dl--secondary { border: 1px solid var(--card-edge2); background: var(--bg2); color: var(--muted); font-family: var(--font-mono); font-size: 0.8rem; letter-spacing: 0.04em; } .btn-dl--secondary:hover { border-color: var(--neon-cyan); color: var(--neon-cyan); } .btn-dl--zip { border: 1px solid rgba(178, 77, 255, 0.45); background: linear-gradient(180deg, rgba(178, 77, 255, 0.22) 0%, rgba(120, 40, 200, 0.12) 100%); color: #fff; font-family: var(--font-display); letter-spacing: 0.06em; text-transform: uppercase; box-shadow: 0 0 24px rgba(178, 77, 255, 0.15); } .btn-dl--zip:hover { box-shadow: 0 0 32px rgba(178, 77, 255, 0.28); } .btn-dl svg { width: 22px; height: 22px; flex-shrink: 0; } .conf-editor-wrap { margin-top: 0.75rem; } .conf-toolbar { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; margin-bottom: 0.45rem; } .btn-copy { padding: 0.45rem 0.85rem; border-radius: var(--radius); border: 1px solid rgba(0, 240, 255, 0.35); background: var(--neon-cyan-dim); color: var(--neon-cyan); font-family: var(--font-mono); font-weight: 600; font-size: 0.78rem; letter-spacing: 0.04em; text-transform: uppercase; cursor: pointer; transition: box-shadow 0.2s, border-color 0.2s; } .btn-copy:hover { box-shadow: 0 0 12px rgba(0, 240, 255, 0.15); border-color: var(--neon-cyan); } .btn-copy.is-done { color: var(--ok); border-color: rgba(0, 255, 157, 0.45); } textarea.conf-raw { width: 100%; min-height: 200px; max-height: 360px; padding: 0.85rem 1rem; border-radius: var(--radius); border: 1px solid var(--card-edge); background: var(--bg); color: var(--neon-cyan); font-family: var(--font-mono); font-size: 0.8rem; line-height: 1.5; resize: vertical; tab-size: 4; } .guide-card { margin-top: 1.25rem; padding: 1rem 1rem 1rem 1.15rem; border-radius: var(--radius); border: 1px solid var(--card-edge); background: var(--bg2); } .guide-card summary { cursor: pointer; font-family: var(--font-display); font-weight: 700; font-size: 0.75rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--neon-cyan); list-style: none; } .guide-card summary::-webkit-details-marker { display: none; } .guide-steps { margin: 0.85rem 0 0 0; padding-left: 1.15rem; color: var(--muted); font-size: 0.86rem; line-height: 1.55; } .guide-steps li { margin-bottom: 0.5rem; } .guide-steps strong { color: #cbd5e1; } .share-busy { position: fixed; inset: 0; z-index: 9999; display: flex; align-items: center; justify-content: center; padding: 1rem; } .share-busy[hidden] { display: none !important; } .share-busy__backdrop { position: absolute; inset: 0; background: rgba(5, 6, 15, 0.92); backdrop-filter: blur(8px); } .share-busy__panel { position: relative; max-width: 360px; padding: 1.75rem 1.5rem; border-radius: var(--radius); background: var(--card); border: 1px solid rgba(0, 240, 255, 0.35); box-shadow: 0 0 40px rgba(0, 240, 255, 0.12), var(--shadow); text-align: center; } .share-busy__panel::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, var(--neon-cyan), var(--neon-pink)); opacity: 0.5; } .share-busy__ring { width: 52px; height: 52px; margin: 0 auto 1rem; border-radius: 50%; border: 3px solid rgba(0, 240, 255, 0.15); border-top-color: var(--neon-cyan); animation: busy-spin 0.85s linear infinite; box-shadow: 0 0 16px rgba(0, 240, 255, 0.2); } @keyframes busy-spin { to { transform: rotate(360deg); } } .share-busy__dots { display: flex; justify-content: center; gap: 6px; margin: 1rem 0 0.5rem; } .share-busy__dots span { width: 8px; height: 8px; border-radius: 50%; background: var(--neon-cyan); box-shadow: 0 0 8px var(--neon-cyan-glow); animation: busy-bounce 1.2s ease-in-out infinite; } .share-busy__dots span:nth-child(2) { animation-delay: 0.15s; } .share-busy__dots span:nth-child(3) { animation-delay: 0.3s; } @keyframes busy-bounce { 0%, 80%, 100% { transform: translateY(0); opacity: 0.5; } 40% { transform: translateY(-8px); opacity: 1; } } .share-busy__title { margin: 0; font-family: var(--font-display); font-size: 0.9rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--neon-cyan); text-shadow: 0 0 12px var(--neon-cyan-glow); } .share-busy__step { margin: 0.5rem 0 0; font-size: 0.85rem; font-family: var(--font-mono); color: var(--neon-cyan); min-height: 1.35em; } .share-busy__hint { margin: 0.85rem 0 0; font-size: 0.8rem; color: var(--muted); line-height: 1.45; } .migrate-card { margin: 1rem 0 1.25rem; border: 1px solid rgba(255, 226, 61, 0.35); border-radius: var(--radius); background: linear-gradient(135deg, var(--neon-yellow-dim) 0%, var(--bg2) 100%); overflow: hidden; transition: border-color .25s, box-shadow .25s; } .migrate-card:hover { border-color: rgba(255, 226, 61, 0.6); box-shadow: 0 0 24px rgba(255, 226, 61, 0.1); } .migrate-toggle { cursor: pointer; display: flex; align-items: center; gap: 0.6rem; padding: 0.9rem 1rem; font-family: var(--font-display); font-weight: 700; font-size: 0.78rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--neon-yellow); list-style: none; user-select: none; transition: background .2s, color .2s; text-shadow: 0 0 10px rgba(255, 226, 61, 0.35); } .migrate-toggle::-webkit-details-marker { display: none; } .migrate-toggle svg { width: 20px; height: 20px; flex-shrink: 0; color: var(--neon-yellow); filter: drop-shadow(0 0 6px rgba(255, 226, 61, 0.5)); } .migrate-toggle:hover { background: var(--neon-yellow-dim); color: #fff; } .migrate-toggle::after { content: '\25B6'; margin-left: auto; font-size: .65rem; color: rgba(255, 226, 61, 0.6); transition: transform .2s; } .migrate-card[open] .migrate-toggle::after { transform: rotate(90deg); } .migrate-card[open] .migrate-toggle { border-bottom: 1px solid rgba(255, 226, 61, 0.25); } .migrate-form { padding: 1rem; display: flex; flex-direction: column; gap: 1rem; } .migrate-step { padding: 0.75rem 0.8rem; border: 1px solid rgba(51, 65, 85, 0.55); border-radius: var(--radius); background: rgba(8, 12, 28, 0.4); } .migrate-step__num { display: inline-flex; align-items: center; justify-content: center; min-width: 1.35rem; height: 1.35rem; padding: 0 0.25rem; border-radius: 0.3rem; font-family: var(--font-mono); font-size: 0.68rem; font-weight: 700; color: var(--neon-yellow); background: rgba(255, 226, 61, 0.12); border: 1px solid rgba(255, 226, 61, 0.35); } .migrate-step--proto.is-locked .migrate-proto-body { opacity: 0.38; pointer-events: none; filter: grayscale(0.35); } .migrate-step--proto.is-locked .migrate-step__lock-hint { display: block; } .migrate-step__lock-hint { display: none; margin: 0 0 0.55rem; font-size: 0.76rem; color: var(--neon-yellow); font-family: var(--font-mono); } .migrate-pick-hint { margin: 0 0 0.45rem; font-size: 0.72rem; color: var(--text3); font-family: var(--font-mono); } .server-list--migrate { max-height: 11rem; gap: 0.35rem; } .server-item--btn { width: 100%; margin: 0; padding: 0.65rem 0.75rem; font: inherit; color: inherit; text-align: left; appearance: none; -webkit-appearance: none; } .migrate-picked { display: flex; flex-wrap: wrap; align-items: center; gap: 0.55rem 0.75rem; margin-bottom: 0.35rem; } .migrate-picked__card { flex: 1 1 12rem; display: flex; align-items: center; gap: 0.65rem; padding: 0.55rem 0.65rem; border-radius: var(--radius); border: 1px solid rgba(0, 240, 255, 0.35); background: rgba(0, 240, 255, 0.06); box-shadow: 0 0 12px rgba(0, 240, 255, 0.08); } .migrate-picked__info { flex: 1; min-width: 0; } .migrate-picked__name { display: block; font-weight: 600; font-size: 0.88rem; color: #e2e8f0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .migrate-picked__badges { display: flex; flex-wrap: wrap; gap: 0.3rem; margin-top: 0.2rem; } .migrate-picked__change { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.4rem 0.7rem; border-radius: var(--radius); border: 1px solid rgba(255, 226, 61, 0.35); background: rgba(255, 226, 61, 0.08); color: var(--neon-yellow); font-family: var(--font-mono); font-size: 0.72rem; font-weight: 600; cursor: pointer; transition: background 0.15s, border-color 0.15s; } .migrate-picked__change:hover { border-color: rgba(255, 226, 61, 0.55); background: rgba(255, 226, 61, 0.14); color: #fff; } .migrate-step--server.is-picked .migrate-pick-panel, .migrate-step--server.is-picked .migrate-pick-hint, .migrate-step--server.is-picked .migrate-servers-load { display: none !important; } .migrate-warning { display: flex; align-items: flex-start; gap: 0.45rem; margin: 0 0 0.65rem; line-height: 1.45; } .migrate-warning i { flex-shrink: 0; margin-top: 0.1rem; color: var(--neon-yellow); } .migrate-empty { margin: 0; padding: 0.85rem 0.5rem; text-align: center; font-size: 0.82rem; color: var(--muted); } .migrate-step--submit { padding-top: 0.65rem; border: none; background: transparent; padding-left: 0; padding-right: 0; } .migrate-step--submit .migrate-submit { margin-top: 0; } #proto-warn { display: none; margin-top: 0.5rem; padding: 0.55rem 0.75rem; background: var(--neon-yellow-dim); border: 1px solid rgba(255, 226, 61, 0.35); border-radius: var(--radius); font-size: 0.82rem; font-family: var(--font-mono); color: var(--neon-yellow); } .badge-file--awg { display: inline-block; padding: 0.35rem 0.6rem; background: var(--neon-purple-dim) !important; color: var(--neon-purple) !important; border: 1px solid rgba(178, 77, 255, 0.4) !important; border-radius: var(--radius); font-family: var(--font-mono); font-size: 0.72rem; letter-spacing: 0.06em; text-transform: uppercase; } .hint--warn { color: var(--neon-yellow) !important; font-family: var(--font-mono); font-size: 0.78rem !important; } .lang-switch { display: flex; justify-content: flex-end; align-items: center; gap: 0.35rem; margin-bottom: 1rem; font-family: var(--font-mono); font-size: 0.72rem; letter-spacing: 0.06em; text-transform: uppercase; } .lang-switch__label { color: var(--text3); margin-right: 0.25rem; } .lang-switch a { padding: 0.35rem 0.65rem; border-radius: var(--radius); border: 1px solid var(--card-edge); color: var(--muted); text-decoration: none; transition: border-color 0.2s, color 0.2s, box-shadow 0.2s; } .lang-switch a:hover { border-color: rgba(0, 240, 255, 0.4); color: var(--neon-cyan); } .lang-switch a.is-active { border-color: var(--neon-cyan); color: var(--neon-cyan); background: var(--neon-cyan-dim); box-shadow: 0 0 12px rgba(0, 240, 255, 0.12); } .status-banner { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 0.5rem 0.75rem; margin: 0 0 1.1rem; padding: 0.55rem 0.85rem; border-radius: var(--radius); border: 1px solid rgba(56, 189, 248, 0.28); background: rgba(56, 189, 248, 0.06); font-size: 0.84rem; } .status-banner a { display: inline-flex; align-items: center; gap: 0.35rem; color: #7dd3fc; font-weight: 600; text-decoration: none; } .status-banner a:hover { color: var(--neon-cyan); text-decoration: underline; } .status-banner svg { width: 16px; height: 16px; flex-shrink: 0; } .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; } /* Bootstrap 5 + Font Awesome integration */ .share-app .share-icon { width: 1.1em; text-align: center; flex-shrink: 0; } .share-app .hero-icon i { font-size: 1.75rem; color: var(--neon-cyan); filter: drop-shadow(0 0 8px var(--neon-cyan-glow)); } .share-app .field-label i, .share-app .stat > i, .share-app .alert i.share-icon-lg { color: var(--neon-cyan); font-size: 1.1rem; } .share-app .alert i.share-icon-lg { margin-top: 0.1rem; } .share-app .card.share-card { background: var(--card); border: 1px solid var(--card-edge); border-radius: var(--radius); box-shadow: var(--shadow); } .share-app .alert.alert--err { background: var(--err-bg); border-color: rgba(255, 56, 96, 0.45); color: #fecdd3; } .share-app .alert.alert--ok { background: var(--ok-bg); border-color: rgba(0, 255, 157, 0.35); color: #a7f3d0; } .share-app #share-submit.btn-primary, .share-app .btn-primary.share-btn-submit { display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; width: 100%; font-family: var(--font-display); letter-spacing: 0.08em; text-transform: uppercase; border: 1px solid rgba(0, 240, 255, 0.5); background: linear-gradient(135deg, rgba(0, 240, 255, 0.2), rgba(178, 77, 255, 0.15)); color: var(--neon-cyan); box-shadow: 0 0 20px rgba(0, 240, 255, 0.15); } .share-app #share-submit.btn-primary:hover:not(:disabled) { border-color: var(--neon-cyan); color: #fff; box-shadow: 0 0 28px rgba(0, 240, 255, 0.3); } .share-app .btn-dl { display: inline-flex; align-items: center; gap: 0.4rem; } .share-app .proto-ico.fa-solid { font-size: 1.15rem; } .share-app .proto-ico--awg { color: var(--neon-yellow); } .share-app .proto-ico--vless { color: #38bdf8; } .share-app .server-search-field > i { position: absolute; left: 0.75rem; top: 50%; transform: translateY(-50%); color: var(--muted); pointer-events: none; } .share-app .lang-switch .btn, .share-app .lang-switch__btn { font-size: 0.78rem; padding: 0.32rem 0.6rem; } .share-app .status-banner .fa-solid { color: #7dd3fc; } .share-app .empty-state > i { font-size: 2.5rem; color: var(--muted); margin-bottom: 0.75rem; display: block; } .share-app .share-busy__panel .fa-spinner { font-size: 2rem; color: var(--neon-cyan); } .share-app .server-flag i { font-size: 1.25rem; color: var(--muted); } .share-app .server-check i { font-size: 0.85rem; } .share-app .configs-anchor i { font-size: 0.75rem; } .share-app textarea.conf-raw.form-control, .share-app .conf-raw { font-family: var(--font-mono); } .share-renewal { border: 1px solid rgba(56, 189, 248, 0.28); background: linear-gradient(135deg, rgba(56, 189, 248, 0.08) 0%, rgba(15, 23, 42, 0.55) 100%); } .share-renewal--compact { margin: 0 0 1.25rem; padding: 1rem 0 0; border: none; border-top: 1px solid rgba(148, 163, 184, 0.2); border-radius: 0; background: transparent; } .share-renewal--compact .h6 { font-size: 0.92rem; margin-bottom: 0.35rem; } .share-renewal-form__row { flex-wrap: wrap; } @media (min-width: 576px) { .share-renewal-form__row { flex-wrap: nowrap; } } .share-renewal .h6 { color: #e2e8f0; font-weight: 600; } .share-renewal-form .form-control { letter-spacing: 0.08em; } .share-renewal-form .btn-primary { white-space: nowrap; } /* ── Cyber shell & panels ── */ .cyber-bg { position: fixed; inset: 0; z-index: -2; pointer-events: none; background: radial-gradient(ellipse 70% 45% at 50% -15%, rgba(0, 240, 255, 0.14), transparent 58%), radial-gradient(ellipse 45% 35% at 100% 40%, rgba(255, 45, 123, 0.07), transparent 52%), radial-gradient(ellipse 40% 30% at 0% 85%, rgba(178, 77, 255, 0.08), transparent 48%); } .cyber-shell { position: relative; padding: 1rem 1.1rem 1.5rem; border: 1px solid rgba(0, 240, 255, 0.14); border-radius: 8px; background: linear-gradient(165deg, rgba(13, 16, 37, 0.92) 0%, rgba(8, 10, 24, 0.96) 100%); box-shadow: 0 20px 60px rgba(0, 0, 0, 0.55), 0 0 1px rgba(0, 240, 255, 0.25); } .cyber-corner { position: absolute; width: 14px; height: 14px; border-color: var(--neon-cyan); border-style: solid; opacity: 0.55; pointer-events: none; } .cyber-corner--tl { top: 6px; left: 6px; border-width: 2px 0 0 2px; } .cyber-corner--tr { top: 6px; right: 6px; border-width: 2px 2px 0 0; } .cyber-corner--bl { bottom: 6px; left: 6px; border-width: 0 0 2px 2px; } .cyber-corner--br { bottom: 6px; right: 6px; border-width: 0 2px 2px 0; } .cyber-hero { text-align: center; margin-bottom: 1.35rem; } .share-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 0.65rem; margin-bottom: 1rem; } .stat__value--sm { font-size: 0.85rem !important; line-height: 1.25; } .share-panel { padding: 0; margin-bottom: 1rem; overflow: hidden; border-color: rgba(0, 240, 255, 0.18); background: linear-gradient(160deg, rgba(13, 16, 37, 0.98) 0%, rgba(17, 22, 51, 0.9) 100%); } .share-panel__head { display: flex; align-items: center; gap: 0.5rem; padding: 0.55rem 0.85rem; font-family: var(--font-mono); font-size: 0.72rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--neon-cyan); background: rgba(0, 240, 255, 0.05); border-bottom: 1px solid rgba(0, 240, 255, 0.12); } .share-panel__head i { color: var(--neon-cyan); filter: drop-shadow(0 0 6px var(--neon-cyan-glow)); } .share-panel__head--pink { color: var(--neon-pink); background: rgba(255, 45, 123, 0.05); border-bottom-color: rgba(255, 45, 123, 0.15); } .share-panel__head--pink i { color: var(--neon-pink); filter: drop-shadow(0 0 6px var(--neon-pink-glow)); } .share-panel__body { padding: 1rem 1rem 1.1rem; } .share-panel__intro { margin: 0 0 1rem; font-size: 0.84rem; } .share-panel.card--download { margin-top: 0.5rem; } .dl-bundle { padding: 0.85rem 0.9rem; margin-bottom: 0.75rem; border: 1px solid rgba(0, 240, 255, 0.1); border-radius: var(--radius); background: rgba(8, 12, 28, 0.55); } .dl-bundle:last-child { margin-bottom: 0; } .share-footer { margin-top: 1.5rem; text-align: center; } .share-footer__line { display: block; height: 1px; margin-bottom: 0.65rem; background: linear-gradient(90deg, transparent, rgba(0, 240, 255, 0.35), rgba(255, 45, 123, 0.35), transparent); } .share-footer__text { font-family: var(--font-mono); font-size: 0.65rem; letter-spacing: 0.22em; text-transform: uppercase; color: var(--text3); } .cyber-spinner { display: inline-block; width: 1rem; height: 1rem; border: 2px solid rgba(0, 240, 255, 0.15); border-top-color: var(--neon-cyan); border-radius: 50%; animation: spin 0.7s linear infinite; box-shadow: 0 0 8px rgba(0, 240, 255, 0.2); flex-shrink: 0; } /* Lang switch — без Bootstrap */ .lang-switch { justify-content: flex-end; margin-bottom: 1.1rem; } .lang-switch__label { display: inline-flex; align-items: center; gap: 0.35rem; margin-right: 0.15rem; color: var(--text3); } .lang-switch__label i { color: var(--neon-cyan); opacity: 0.85; } .lang-switch__btn { display: inline-flex; align-items: center; justify-content: center; min-width: 2.1rem; padding: 0.32rem 0.6rem; border-radius: var(--radius); border: 1px solid var(--card-edge); color: var(--muted); text-decoration: none; font-family: var(--font-mono); font-size: 0.72rem; font-weight: 600; letter-spacing: 0.08em; transition: border-color 0.2s, color 0.2s, box-shadow 0.2s, background 0.2s; } .lang-switch__btn:hover { border-color: rgba(0, 240, 255, 0.45); color: var(--neon-cyan); background: rgba(0, 240, 255, 0.06); } .lang-switch__btn.is-active { border-color: var(--neon-cyan); color: var(--neon-cyan); background: var(--neon-cyan-dim); box-shadow: 0 0 14px rgba(0, 240, 255, 0.15); } /* Bootstrap neutralize inside guest app */ .share-app .form-control, .share-app .form-select, .share-app textarea.conf-raw { background: var(--bg2) !important; border: 1px solid var(--card-edge) !important; color: var(--text) !important; border-radius: var(--radius); box-shadow: none; } .share-app .form-control:focus, .share-app .form-select:focus { border-color: rgba(0, 240, 255, 0.5) !important; box-shadow: 0 0 0 2px rgba(0, 240, 255, 0.12) !important; } .share-app .btn-outline-secondary, .share-app .btn-outline-info { border-color: rgba(0, 240, 255, 0.3); color: var(--neon-cyan); background: transparent; font-family: var(--font-mono); font-size: 0.75rem; letter-spacing: 0.04em; } .share-app .btn-outline-secondary:hover, .share-app .btn-outline-info:hover { border-color: var(--neon-cyan); color: #fff; background: rgba(0, 240, 255, 0.08); } .share-app .text-secondary { color: var(--muted) !important; } .share-app .text-info { color: var(--neon-cyan) !important; } .share-app .share-renewal .h6 { font-family: var(--font-display); font-size: 0.78rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--neon-cyan); } .share-app .share-renewal .form-label { font-family: var(--font-mono); font-size: 0.68rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text3); } .share-app .share-renewal-form .btn-primary { font-family: var(--font-display); letter-spacing: 0.06em; text-transform: uppercase; border: 1px solid rgba(0, 240, 255, 0.45); background: linear-gradient(135deg, rgba(0, 240, 255, 0.18), rgba(178, 77, 255, 0.12)); color: var(--neon-cyan); } .share-app .share-renewal-form .btn-primary:hover { color: #fff; border-color: var(--neon-cyan); box-shadow: 0 0 20px rgba(0, 240, 255, 0.2); } @media (max-width: 420px) { .cyber-shell { padding: 0.85rem 0.75rem 1.25rem; } .share-stats { grid-template-columns: 1fr; } } /* ── Downloads & FAQ footer ── */ .share-downloads, .share-faq-page { margin-top: 1.25rem; } .guest-back-link { margin: 0 0 1rem; } .guest-back-link a { display: inline-flex; align-items: center; gap: 0.4rem; font-family: var(--font-mono); font-size: 0.78rem; font-weight: 600; letter-spacing: 0.04em; color: #7dd3fc; text-decoration: none; } .guest-back-link a:hover { color: var(--neon-cyan); } .cyber-hero--compact { margin-bottom: 1rem; } .hero-icon--sm { width: 52px; height: 52px; margin-bottom: 0.65rem; } .hero-icon--sm i { font-size: 1.35rem !important; } .share-faq-page .share-panel__body { padding-top: 0.85rem; } .share-faq-teaser { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.65rem; margin: 1rem 0 0; padding-top: 0.85rem; border-top: 1px solid rgba(51, 65, 85, 0.55); } .share-faq-teaser__text { font-size: 0.8rem; color: var(--muted); } .share-faq-teaser__btn { margin: 0; font-size: 0.72rem; padding: 0.45rem 0.85rem; } .dl-apps { display: flex; flex-direction: column; gap: 0.75rem; } .dl-app-card { padding: 0.85rem 0.9rem; border-radius: var(--radius); border: 1px solid var(--card-edge); background: rgba(8, 12, 28, 0.55); } .dl-app-card--wg { border-color: rgba(0, 255, 157, 0.2); background: linear-gradient(135deg, rgba(0, 255, 157, 0.04) 0%, rgba(8, 12, 28, 0.55) 100%); } .dl-app-card--amnezia { border-color: rgba(178, 77, 255, 0.25); background: linear-gradient(135deg, rgba(178, 77, 255, 0.06) 0%, rgba(8, 12, 28, 0.55) 100%); } .dl-app-card--vless { border-color: rgba(56, 189, 248, 0.22); background: linear-gradient(135deg, rgba(56, 189, 248, 0.05) 0%, rgba(8, 12, 28, 0.55) 100%); } .dl-app-card__icon { width: 2rem; height: 2rem; display: flex; align-items: center; justify-content: center; margin-bottom: 0.45rem; border-radius: var(--radius); background: rgba(0, 240, 255, 0.08); border: 1px solid rgba(0, 240, 255, 0.15); color: var(--neon-cyan); font-size: 0.95rem; } .dl-app-card--wg .dl-app-card__icon { color: var(--ok); border-color: rgba(0, 255, 157, 0.25); background: rgba(0, 255, 157, 0.08); } .dl-app-card--amnezia .dl-app-card__icon { color: var(--neon-purple); border-color: rgba(178, 77, 255, 0.3); background: var(--neon-purple-dim); } .dl-app-card--vless .dl-app-card__icon { color: #7dd3fc; border-color: rgba(56, 189, 248, 0.3); background: rgba(56, 189, 248, 0.08); } .dl-app-card__title { margin: 0 0 0.35rem; font-family: var(--font-display); font-size: 0.82rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: #e2e8f0; } .dl-app-card__desc { margin: 0 0 0.65rem; font-size: 0.8rem; line-height: 1.45; color: var(--muted); } .dl-app-card__links { display: flex; flex-direction: column; gap: 0.4rem; } .dl-app-link { display: inline-flex; align-items: center; gap: 0.45rem; padding: 0.42rem 0.65rem; border-radius: var(--radius); border: 1px solid rgba(0, 240, 255, 0.22); background: rgba(0, 240, 255, 0.05); color: var(--neon-cyan); font-family: var(--font-mono); font-size: 0.74rem; font-weight: 600; letter-spacing: 0.03em; text-decoration: none; transition: border-color 0.15s, background 0.15s, box-shadow 0.15s; } .dl-app-link:hover { color: #fff; border-color: var(--neon-cyan); background: rgba(0, 240, 255, 0.1); box-shadow: 0 0 14px rgba(0, 240, 255, 0.12); } .dl-app-link--muted { border-color: rgba(100, 116, 139, 0.35); background: transparent; color: #94a3b8; } .dl-app-link--muted:hover { color: var(--neon-cyan); border-color: rgba(0, 240, 255, 0.35); } .dl-app-link i { width: 1rem; text-align: center; flex-shrink: 0; } .faq-list { display: flex; flex-direction: column; gap: 0.35rem; } .faq-item { border: 1px solid rgba(51, 65, 85, 0.65); border-radius: var(--radius); background: rgba(8, 12, 28, 0.45); overflow: hidden; transition: border-color 0.15s; } .faq-item[open] { border-color: rgba(0, 240, 255, 0.22); box-shadow: 0 0 12px rgba(0, 240, 255, 0.05); } .faq-item__q { display: flex; align-items: flex-start; gap: 0.5rem; padding: 0.65rem 0.75rem; font-family: var(--font-mono); font-size: 0.78rem; font-weight: 600; line-height: 1.4; color: #e2e8f0; cursor: pointer; list-style: none; user-select: none; } .faq-item__q::-webkit-details-marker { display: none; } .faq-item__chev { flex-shrink: 0; margin-top: 0.15rem; font-size: 0.65rem; color: var(--neon-pink); transition: transform 0.2s; } .faq-item[open] .faq-item__chev { transform: rotate(90deg); } .faq-item__a { padding: 0 0.75rem 0.75rem 1.9rem; font-size: 0.8rem; line-height: 1.55; color: var(--muted); } .faq-item__a a { color: var(--neon-cyan); text-decoration: underline; text-underline-offset: 2px; } .faq-item__a a:hover { color: #fff; } .faq-item__a strong { color: #cbd5e1; } /* ── Rules / AUP page ── */ .share-app--rules .wrap, .share-app--faq .wrap { max-width: 560px; } .guest-subnav { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: -0.35rem 0 1rem; } .guest-subnav a { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.35rem 0.65rem; border-radius: var(--radius); border: 1px solid rgba(100, 116, 139, 0.35); font-family: var(--font-mono); font-size: 0.72rem; font-weight: 600; color: #94a3b8; text-decoration: none; transition: color 0.15s, border-color 0.15s, background 0.15s; } .guest-subnav a:hover { color: var(--neon-cyan); border-color: rgba(0, 240, 255, 0.35); background: rgba(0, 240, 255, 0.06); } .share-rules-page .share-panel__body { padding-top: 0.85rem; } .rules-doc__notice { display: flex; align-items: flex-start; gap: 0.5rem; margin: 0 0 1rem; padding: 0.65rem 0.75rem; border-radius: var(--radius); border: 1px solid rgba(255, 56, 96, 0.35); background: rgba(255, 56, 96, 0.08); font-size: 0.82rem; line-height: 1.45; color: #fecdd3; } .rules-doc__notice i { flex-shrink: 0; margin-top: 0.1rem; color: #fb7185; } .rules-block { margin-bottom: 0.85rem; padding: 0.85rem 0.9rem; border-radius: var(--radius); border: 1px solid rgba(51, 65, 85, 0.65); background: rgba(8, 12, 28, 0.45); } .rules-block:last-of-type { margin-bottom: 0.5rem; } .rules-block--cyan { border-color: rgba(0, 240, 255, 0.18); } .rules-block--pink { border-color: rgba(255, 45, 123, 0.22); } .rules-block--yellow { border-color: rgba(255, 226, 61, 0.28); } .rules-block--purple { border-color: rgba(178, 77, 255, 0.22); } .rules-block__title { display: flex; align-items: center; gap: 0.45rem; margin: 0 0 0.55rem; font-family: var(--font-display); font-size: 0.78rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: #e2e8f0; } .rules-block--cyan .rules-block__title i { color: var(--neon-cyan); } .rules-block--pink .rules-block__title i { color: var(--neon-pink); } .rules-block--yellow .rules-block__title i { color: var(--neon-yellow); } .rules-block--purple .rules-block__title i { color: var(--neon-purple); } .rules-block__body { font-size: 0.8rem; line-height: 1.55; color: var(--muted); } .rules-block__body p { margin: 0 0 0.55rem; } .rules-block__body p:last-child { margin-bottom: 0; } .rules-list { margin: 0.35rem 0 0; padding-left: 1.1rem; } .rules-list li { margin-bottom: 0.45rem; padding-left: 0.15rem; } .rules-list li:last-child { margin-bottom: 0; } .rules-list strong { color: #e2e8f0; } .rules-block__body strong { color: #cbd5e1; } .rules-doc__updated { margin: 0.85rem 0 0; font-family: var(--font-mono); font-size: 0.68rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--text3); text-align: center; } .share-faq-teaser--rules { margin-top: 0.55rem; padding-top: 0.55rem; border-top: 1px dashed rgba(51, 65, 85, 0.55); } .share-faq-teaser__btn--rules { border-color: rgba(255, 45, 123, 0.35); color: var(--neon-pink); } .share-faq-teaser__btn--rules:hover { border-color: var(--neon-pink); color: #fff; box-shadow: 0 0 14px rgba(255, 45, 123, 0.15); }