Spaces:
Running
Running
| <html lang="fa" dir="rtl"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>TON Blockchain Platform - Mainnet</title> | |
| <!-- Security Headers --> | |
| <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://toncenter.com https://ton.org https://ton-access.com; style-src 'self' 'unsafe-inline' https:; img-src 'self' data: https:; connect-src 'self' https://toncenter.com https://ton.org https://ton-access.com wss:;"> | |
| <meta http-equiv="X-Content-Type-Options" content="nosniff"> | |
| <meta http-equiv="X-Frame-Options" content="DENY"> | |
| <meta http-equiv="X-XSS-Protection" content="1; mode=block"> | |
| <!-- SEO & Meta --> | |
| <meta name="description" content="پلتفرم جامع TON blockchain - کیف پول، تبادل، ماینینگ و مدیریت داراییهای دیجیتال"> | |
| <meta name="keywords" content="TON, blockchain, wallet, mining, swap, mainnet, cryptocurrency"> | |
| <meta name="author" content="TON Platform Team"> | |
| <!-- Open Graph --> | |
| <meta property="og:title" content="TON Blockchain Platform"> | |
| <meta property="og:description" content="پلتفرم عملیاتی TON blockchain در mainnet"> | |
| <meta property="og:type" content="website"> | |
| <meta property="og:url" content="https://ton-platform.com"> | |
| <!-- Favicon --> | |
| <link rel="icon" type="image/svg+xml" href="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🪙</text></svg>"> | |
| <link rel="apple-touch-icon" href="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🪙</text></svg>"> | |
| <!-- Fonts --> | |
| <link rel="preconnect" href="https://fonts.googleapis.com"> | |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | |
| <link href="https://fonts.googleapis.com/css2?family=Vazirmatn:wght@300;400;500;600;700&family=JetBrains+Mono:wght@300;400;500;600&display=swap" rel="stylesheet"> | |
| <!-- Styles --> | |
| <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/tailwind.min.css" rel="stylesheet"> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"> | |
| <style> | |
| :root { | |
| --ton-primary: #2979ff; | |
| --ton-secondary: #1e3a8a; | |
| --ton-success: #10b981; | |
| --ton-warning: #f59e0b; | |
| --ton-error: #ef4444; | |
| --ton-dark: #0f172a; | |
| --ton-glass: rgba(30, 41, 59, 0.7); | |
| --ton-glass-border: rgba(148, 163, 184, 0.1); | |
| --ton-card-bg: #1e293b; | |
| --ton-card-border: #334155; | |
| } | |
| body { | |
| font-family: 'Vazirmatn', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; | |
| background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); | |
| min-height: 100vh; | |
| color: #f1f5f9; | |
| } | |
| .font-mono { | |
| font-family: 'JetBrains Mono', monospace; | |
| } | |
| .glass { | |
| backdrop-filter: blur(16px); | |
| background: var(--ton-glass); | |
| border: 1px solid var(--ton-glass-border); | |
| border-radius: 16px; | |
| overflow: hidden; | |
| } | |
| .gradient-border { | |
| background: linear-gradient(135deg, var(--ton-primary), var(--ton-success)); | |
| padding: 2px; | |
| border-radius: 16px; | |
| } | |
| .gradient-border > * { | |
| background: var(--ton-dark); | |
| border-radius: 14px; | |
| } | |
| .status-online { | |
| display: inline-block; | |
| width: 8px; | |
| height: 8px; | |
| background-color: var(--ton-success); | |
| border-radius: 50%; | |
| animation: pulse 2s infinite; | |
| } | |
| @keyframes pulse { | |
| 0% { opacity: 0.4; } | |
| 50% { opacity: 1; } | |
| 100% { opacity: 0.4; } | |
| } | |
| .card-hover { | |
| transition: all 0.3s ease; | |
| } | |
| .card-hover:hover { | |
| transform: translateY(-5px); | |
| box-shadow: 0 20px 40px rgba(0, 0, 0, 0.25); | |
| } | |
| .custom-scrollbar::-webkit-scrollbar { | |
| width: 8px; | |
| height: 8px; | |
| } | |
| .custom-scrollbar::-webkit-scrollbar-track { | |
| background: #1e293b; | |
| border-radius: 4px; | |
| } | |
| .custom-scrollbar::-webkit-scrollbar-thumb { | |
| background: #475569; | |
| border-radius: 4px; | |
| } | |
| .custom-scrollbar::-webkit-scrollbar-thumb:hover { | |
| background: #64748b; | |
| } | |
| .network-indicator { | |
| position: fixed; | |
| bottom: 20px; | |
| right: 20px; | |
| z-index: 1000; | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| padding: 8px 16px; | |
| background: rgba(15, 23, 42, 0.8); | |
| border-radius: 30px; | |
| border: 1px solid rgba(148, 163, 184, 0.1); | |
| backdrop-filter: blur(10px); | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2); | |
| } | |
| .network-indicator .status-indicator { | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 50%; | |
| background-color: #ef4444; | |
| } | |
| .network-indicator.connected .status-indicator { | |
| background-color: #10b981; | |
| animation: pulse 2s infinite; | |
| } | |
| .network-indicator.connecting .status-indicator { | |
| background-color: #f59e0b; | |
| animation: pulse 1.5s infinite; | |
| } | |
| .mining-status { | |
| position: fixed; | |
| bottom: 20px; | |
| left: 20px; | |
| z-index: 1000; | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| padding: 8px 16px; | |
| background: rgba(15, 23, 42, 0.8); | |
| border-radius: 30px; | |
| border: 1px solid rgba(148, 163, 184, 0.1); | |
| backdrop-filter: blur(10px); | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2); | |
| } | |
| .mining-status .status-indicator { | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 50%; | |
| background-color: #ef4444; | |
| } | |
| .mining-status.active .status-indicator { | |
| background-color: #10b981; | |
| animation: pulse 1.5s infinite; | |
| } | |
| .mining-status.paused .status-indicator { | |
| background-color: #f59e0b; | |
| } | |
| .mining-status.stopped .status-indicator { | |
| background-color: #ef4444; | |
| } | |
| .mining-status .status-text { | |
| color: #f1f5f9; | |
| } | |
| .mining-status.active .status-text { | |
| color: #10b981; | |
| } | |
| .mining-status.paused .status-text { | |
| color: #f59e0b; | |
| } | |
| .mining-status.stopped .status-text { | |
| color: #ef4444; | |
| } | |
| .transaction-indicator { | |
| position: fixed; | |
| top: 20px; | |
| right: 20px; | |
| z-index: 1000; | |
| display: none; | |
| align-items: center; | |
| gap: 8px; | |
| padding: 12px 20px; | |
| background: rgba(15, 23, 42, 0.9); | |
| border-radius: 12px; | |
| border: 1px solid rgba(148, 163, 184, 0.2); | |
| backdrop-filter: blur(10px); | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); | |
| animation: slideIn 0.3s ease-out; | |
| } | |
| .transaction-indicator.hide { | |
| animation: slideOut 0.3s ease-out; | |
| } | |
| @keyframes slideIn { | |
| from { | |
| transform: translateX(100px); | |
| opacity: 0; | |
| } | |
| to { | |
| transform: translateX(0); | |
| opacity: 1; | |
| } | |
| } | |
| @keyframes slideOut { | |
| from { | |
| transform: translateX(0); | |
| opacity: 1; | |
| } | |
| to { | |
| transform: translateX(100px); | |
| opacity: 0; | |
| } | |
| } | |
| .transaction-indicator i { | |
| font-size: 1.5rem; | |
| } | |
| .transaction-indicator.success i { | |
| color: var(--ton-success); | |
| } | |
| .transaction-indicator.error i { | |
| color: var(--ton-error); | |
| } | |
| .transaction-indicator.warning i { | |
| color: var(--ton-warning); | |
| } | |
| .transaction-indicator .content { | |
| flex: 1; | |
| } | |
| .transaction-indicator .title { | |
| font-weight: 500; | |
| margin-bottom: 4px; | |
| } | |
| .transaction-indicator .message { | |
| font-size: 0.9rem; | |
| opacity: 0.9; | |
| } | |
| .transaction-indicator .close { | |
| background: none; | |
| border: none; | |
| font-size: 1.2rem; | |
| color: #94a3b8; | |
| cursor: pointer; | |
| width: 24px; | |
| height: 24px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| border-radius: 50%; | |
| transition: all 0.2s; | |
| } | |
| .transaction-indicator .close:hover { | |
| background: #1e293b; | |
| color: #f1f5f9; | |
| } | |
| .transaction-indicator .progress { | |
| position: absolute; | |
| bottom: 0; | |
| left: 0; | |
| height: 3px; | |
| background: var(--ton-primary); | |
| width: 100%; | |
| transform-origin: left; | |
| transition: transform 0.2s; | |
| } | |
| .wallet-connect-modal .modal-content { | |
| max-height: 90vh; | |
| overflow-y: auto; | |
| } | |
| .mining-modal .modal-content { | |
| max-height: 90vh; | |
| overflow-y: auto; | |
| } | |
| .transaction-modal .modal-content { | |
| max-height: 80vh; | |
| overflow-y: auto; | |
| } | |
| .notification { | |
| position: fixed; | |
| top: 20px; | |
| left: 20px; | |
| z-index: 1000; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| max-width: 320px; | |
| } | |
| .notification-item { | |
| padding: 12px 16px; | |
| border-radius: 8px; | |
| background: rgba(15, 23, 42, 0.9); | |
| backdrop-filter: blur(10px); | |
| border: 1px solid rgba(148, 163, 184, 0.1); | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2); | |
| animation: slideInLeft 0.3s ease-out; | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| } | |
| .notification-item.success { | |
| border-left: 4px solid var(--ton-success); | |
| } | |
| .notification-item.error { | |
| border-left: 4px solid var(--ton-error); | |
| } | |
| .notification-item.warning { | |
| border-left: 4px solid var(--ton-warning); | |
| } | |
| @keyframes slideInLeft { | |
| from { | |
| transform: translateX(-100px); | |
| opacity: 0; | |
| } | |
| to { | |
| transform: translateX(0); | |
| opacity: 1; | |
| } | |
| } | |
| .token-list { | |
| max-height: 300px; | |
| overflow-y: auto; | |
| } | |
| .token-list::-webkit-scrollbar { | |
| width: 6px; | |
| } | |
| .token-list::-webkit-scrollbar-track { | |
| background: #1e293b; | |
| } | |
| .token-list::-webkit-scrollbar-thumb { | |
| background: #475569; | |
| border-radius: 3px; | |
| } | |
| .token-list::-webkit-scrollbar-thumb:hover { | |
| background: #64748b; | |
| } | |
| .transaction-details { | |
| max-height: 300px; | |
| overflow-y: auto; | |
| } | |
| .transaction-details::-webkit-scrollbar { | |
| width: 6px; | |
| } | |
| .transaction-details::-webkit-scrollbar-track { | |
| background: #1e293b; | |
| } | |
| .transaction-details::-webkit-scrollbar-thumb { | |
| background: #475569; | |
| border-radius: 3px; | |
| } | |
| .transaction-details::-webkit-scrollbar-thumb:hover { | |
| background: #64748b; | |
| } | |
| .qr-code { | |
| width: 160px; | |
| height: 160px; | |
| background: white; | |
| padding: 10px; | |
| border-radius: 8px; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| margin: 0 auto; | |
| } | |
| .qr-code img { | |
| width: 100%; | |
| height: 100%; | |
| } | |
| .network-switcher { | |
| position: relative; | |
| display: inline-block; | |
| width: 50px; | |
| height: 24px; | |
| } | |
| .network-switcher input { | |
| opacity: 0; | |
| width: 0; | |
| height: 0; | |
| } | |
| .slider { | |
| position: absolute; | |
| cursor: pointer; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| background-color: #ccc; | |
| transition: .4s; | |
| border-radius: 24px; | |
| } | |
| .slider:before { | |
| position: absolute; | |
| content: ""; | |
| height: 16px; | |
| width: 16px; | |
| left: 4px; | |
| bottom: 4px; | |
| background-color: white; | |
| transition: .4s; | |
| border-radius: 50%; | |
| } | |
| input:checked + .slider { | |
| background-color: var(--ton-success); | |
| } | |
| input:checked + .slider:before { | |
| transform: translateX(26px); | |
| } | |
| .token-selector { | |
| position: relative; | |
| width: 100%; | |
| } | |
| .selected-token { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| cursor: pointer; | |
| padding: 8px 12px; | |
| border: 1px solid #334155; | |
| border-radius: 8px; | |
| background: #1e293b; | |
| } | |
| .token-options { | |
| position: absolute; | |
| top: 100%; | |
| left: 0; | |
| right: 0; | |
| z-index: 10; | |
| background: #1e293b; | |
| border: 1px solid #334155; | |
| border-radius: 8px; | |
| margin-top: 4px; | |
| max-height: 200px; | |
| overflow-y: auto; | |
| display: none; | |
| box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); | |
| } | |
| .token-options.show { | |
| display: block; | |
| } | |
| .token-option { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| padding: 8px 12px; | |
| cursor: pointer; | |
| transition: background 0.2s; | |
| } | |
| .token-option:hover { | |
| background: #334155; | |
| } | |
| .token-option.selected { | |
| background: #334155; | |
| font-weight: 500; | |
| } | |
| .mining-worker { | |
| padding: 12px; | |
| border-radius: 8px; | |
| background: #1e293b; | |
| border: 1px solid #334155; | |
| margin-bottom: 8px; | |
| transition: all 0.2s; | |
| } | |
| .mining-worker:hover { | |
| border-color: var(--ton-primary); | |
| transform: translateY(-2px); | |
| } | |
| .mining-worker.active { | |
| border-color: var(--ton-success); | |
| background: rgba(16, 185, 129, 0.05); | |
| } | |
| .mining-worker.paused { | |
| border-color: var(--ton-warning); | |
| background: rgba(245, 158, 11, 0.05); | |
| } | |
| .mining-worker.stopped { | |
| border-color: var(--ton-error); | |
| background: rgba(239, 68, 68, 0.05); | |
| } | |
| .mining-worker-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 8px; | |
| } | |
| .mining-worker-details { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 8px; | |
| } | |
| .mining-worker-stat { | |
| font-size: 12px; | |
| color: #94a3b8; | |
| } | |
| .mining-worker-value { | |
| font-weight: 500; | |
| color: #f1f5f9; | |
| } | |
| .mining-control { | |
| display: flex; | |
| gap: 8px; | |
| margin-top: 8px; | |
| } | |
| .mining-control button { | |
| flex: 1; | |
| padding: 6px 12px; | |
| border-radius: 6px; | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| } | |
| .mining-control .start { | |
| background: var(--ton-success); | |
| color: white; | |
| } | |
| .mining-control .pause { | |
| background: var(--ton-warning); | |
| color: white; | |
| } | |
| .mining-control .stop { | |
| background: var(--ton-error); | |
| color: white; | |
| } | |
| .mining-control .resume { | |
| background: var(--ton-primary); | |
| color: white; | |
| } | |
| .mining-log { | |
| background: #0f172a; | |
| color: #a5b4fc; | |
| font-family: 'JetBrains Mono', monospace; | |
| padding: 12px; | |
| border-radius: 8px; | |
| height: 300px; | |
| overflow-y: auto; | |
| line-height: 1.4; | |
| border: 1px solid #334155; | |
| } | |
| .mining-log .log-info { | |
| color: #a5b4fc; | |
| } | |
| .mining-log .log-success { | |
| color: #6ee7b7; | |
| } | |
| .mining-log .log-warning { | |
| color: #fcd34d; | |
| } | |
| .mining-log .log-error { | |
| color: #fca5a5; | |
| } | |
| .mining-log .log-timestamp { | |
| color: #94a3b8; | |
| margin-right: 8px; | |
| } | |
| .mining-log .log-source { | |
| color: #c084fc; | |
| margin-right: 4px; | |
| } | |
| .mining-log .log-message { | |
| margin-left: 4px; | |
| } | |
| .swap-rate { | |
| display: flex; | |
| justify-content: space-between; | |
| padding: 8px 12px; | |
| background: #1e293b; | |
| border-radius: 8px; | |
| margin-top: 12px; | |
| font-size: 14px; | |
| } | |
| .swap-rate-label { | |
| color: #94a3b8; | |
| } | |
| .swap-rate-value { | |
| font-weight: 500; | |
| } | |
| .swap-slippage { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| margin-top: 12px; | |
| padding: 8px 12px; | |
| background: #1e293b; | |
| border-radius: 8px; | |
| font-size: 14px; | |
| } | |
| .swap-slippage-label { | |
| color: #94a3b8; | |
| } | |
| .swap-slippage-value { | |
| font-weight: 500; | |
| } | |
| .slippage-control { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| margin-top: 8px; | |
| } | |
| .slippage-control input { | |
| flex: 1; | |
| } | |
| .slippage-control span { | |
| width: 40px; | |
| text-align: center; | |
| font-weight: 500; | |
| } | |
| .transaction-speed { | |
| display: flex; | |
| gap: 8px; | |
| margin-top: 12px; | |
| } | |
| .transaction-speed button { | |
| flex: 1; | |
| padding: 8px 12px; | |
| border-radius: 8px; | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| border: 1px solid #334155; | |
| } | |
| .transaction-speed button.active { | |
| background: var(--ton-primary); | |
| color: white; | |
| border-color: var(--ton-primary); | |
| } | |
| .transaction-speed button.low { | |
| background: #1e293b; | |
| color: #94a3b8; | |
| } | |
| .transaction-speed button.medium { | |
| background: #1e293b; | |
| color: #94a3b8; | |
| } | |
| .transaction-speed button.high { | |
| background: #1e293b; | |
| color: #94a3b8; | |
| } | |
| .transaction-speed button.low:hover { | |
| background: #334155; | |
| } | |
| .transaction-speed button.medium:hover { | |
| background: #334155; | |
| } | |
| .transaction-speed button.high:hover { | |
| background: #334155; | |
| } | |
| .wallet-balance { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| padding: 12px; | |
| background: #1e293b; | |
| border-radius: 8px; | |
| margin-bottom: 16px; | |
| } | |
| .wallet-balance-label { | |
| color: #94a3b8; | |
| } | |
| .wallet-balance-value { | |
| font-size: 1.2rem; | |
| font-weight: 600; | |
| } | |
| .wallet-address { | |
| word-break: break-all; | |
| font-family: 'JetBrains Mono', monospace; | |
| font-size: 0.85rem; | |
| color: #94a3b8; | |
| margin-top: 8px; | |
| text-align: center; | |
| } | |
| .wallet-actions { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 12px; | |
| margin-top: 16px; | |
| } | |
| .wallet-action { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| padding: 16px; | |
| background: #1e293b; | |
| border-radius: 8px; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| } | |
| .wallet-action:hover { | |
| background: #334155; | |
| transform: translateY(-2px); | |
| } | |
| .wallet-action i { | |
| font-size: 1.5rem; | |
| margin-bottom: 8px; | |
| } | |
| .wallet-action span { | |
| font-size: 0.9rem; | |
| font-weight: 500; | |
| } | |
| .wallet-qr { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 12px; | |
| padding: 16px; | |
| background: #1e293b; | |
| border-radius: 8px; | |
| margin-top: 16px; | |
| } | |
| .wallet-qr h4 { | |
| font-size: 1rem; | |
| margin-bottom: 8px; | |
| } | |
| .stats-card { | |
| background: #1e293b; | |
| border: 1px solid #334155; | |
| border-radius: 12px; | |
| padding: 16px; | |
| transition: all 0.2s; | |
| } | |
| .stats-card:hover { | |
| border-color: var(--ton-primary); | |
| transform: translateY(-2px); | |
| } | |
| .stats-card-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 12px; | |
| } | |
| .stats-card-title { | |
| font-size: 1rem; | |
| font-weight: 500; | |
| color: #94a3b8; | |
| } | |
| .stats-card-value { | |
| font-size: 1.5rem; | |
| font-weight: 600; | |
| margin-bottom: 4px; | |
| } | |
| .stats-card-change { | |
| display: flex; | |
| align-items: center; | |
| gap: 4px; | |
| font-size: 0.85rem; | |
| } | |
| .stats-card-change.positive { | |
| color: var(--ton-success); | |
| } | |
| .stats-card-change.negative { | |
| color: var(--ton-error); | |
| } | |
| .stats-chart { | |
| height: 120px; | |
| margin-top: 12px; | |
| } | |
| .token-distribution { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 12px; | |
| margin-top: 16px; | |
| } | |
| .token-distribution-item { | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| .token-distribution-label { | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| margin-bottom: 4px; | |
| font-size: 0.85rem; | |
| } | |
| .token-distribution-color { | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 50%; | |
| } | |
| .token-distribution-bar { | |
| height: 6px; | |
| border-radius: 3px; | |
| background: #334155; | |
| overflow: hidden; | |
| } | |
| .token-distribution-fill { | |
| height: 100%; | |
| border-radius: 3px; | |
| background: linear-gradient(to right, var(--ton-primary), var(--ton-secondary)); | |
| transition: width 0.5s ease; | |
| } | |
| .holders-table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| } | |
| .holders-table th { | |
| text-align: right; | |
| padding: 10px; | |
| font-weight: 500; | |
| color: #94a3b8; | |
| border-bottom: 1px solid #334155; | |
| } | |
| .holders-table td { | |
| padding: 12px 10px; | |
| border-bottom: 1px solid #1e293b; | |
| font-size: 0.9rem; | |
| } | |
| .holders-table tr:last-child td { | |
| border-bottom: none; | |
| } | |
| .holders-table tr:hover { | |
| background: #1e293b; | |
| } | |
| .holders-table .address { | |
| font-family: 'JetBrains Mono', monospace; | |
| font-size: 0.8rem; | |
| color: #94a3b8; | |
| max-width: 200px; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| white-space: nowrap; | |
| } | |
| .holders-table .balance { | |
| font-weight: 500; | |
| } | |
| .holders-table .percentage { | |
| color: #94a3b8; | |
| } | |
| .modal { | |
| display: none; | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| background: rgba(0, 0, 0, 0.7); | |
| z-index: 2000; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .modal.show { | |
| display: flex; | |
| } | |
| .modal-content { | |
| background: #0f172a; | |
| border-radius: 16px; | |
| width: 90%; | |
| max-width: 500px; | |
| max-height: 90vh; | |
| overflow-y: auto; | |
| box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); | |
| border: 1px solid #334155; | |
| } | |
| .modal-header { | |
| padding: 16px 24px; | |
| border-bottom: 1px solid #334155; | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| } | |
| .modal-title { | |
| font-size: 1.25rem; | |
| font-weight: 600; | |
| } | |
| .modal-close { | |
| background: none; | |
| border: none; | |
| font-size: 1.5rem; | |
| color: #94a3b8; | |
| cursor: pointer; | |
| width: 32px; | |
| height: 32px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| border-radius: 50%; | |
| transition: all 0.2s; | |
| } | |
| .modal-close:hover { | |
| background: #1e293b; | |
| color: #f1f5f9; | |
| } | |
| .modal-body { | |
| padding: 24px; | |
| } | |
| .modal-footer { | |
| padding: 16px 24px; | |
| border-top: 1px solid #334155; | |
| display: flex; | |
| justify-content: flex-end; | |
| gap: 12px; | |
| } | |
| .btn { | |
| padding: 8px 16px; | |
| border-radius: 8px; | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| border: none; | |
| font-size: 1rem; | |
| } | |
| .btn-primary { | |
| background: var(--ton-primary); | |
| color: white; | |
| } | |
| .btn-primary:hover { | |
| background: #1d4ed8; | |
| } | |
| .btn-secondary { | |
| background: #1e293b; | |
| color: #f1f5f9; | |
| border: 1px solid #334155; | |
| } | |
| .btn-secondary:hover { | |
| background: #334155; | |
| } | |
| .btn-success { | |
| background: var(--ton-success); | |
| color: white; | |
| } | |
| .btn-success:hover { | |
| background: #0da266; | |
| } | |
| .btn-warning { | |
| background: var(--ton-warning); | |
| color: white; | |
| } | |
| .btn-warning:hover { | |
| background: #d97706; | |
| } | |
| .btn-danger { | |
| background: var(--ton-error); | |
| color: white; | |
| } | |
| .btn-danger:hover { | |
| background: #dc2626; | |
| } | |
| .btn-block { | |
| display: block; | |
| width: 100%; | |
| } | |
| .input { | |
| width: 100%; | |
| padding: 10px 14px; | |
| border-radius: 8px; | |
| background: #1e293b; | |
| border: 1px solid #334155; | |
| color: #f1f5f9; | |
| font-size: 1rem; | |
| transition: all 0.2s; | |
| } | |
| .input:focus { | |
| outline: none; | |
| border-color: var(--ton-primary); | |
| box-shadow: 0 0 0 3px rgba(41, 121, 255, 0.2); | |
| } | |
| .select { | |
| width: 100%; | |
| padding: 10px 14px; | |
| border-radius: 8px; | |
| background: #1e293b; | |
| border: 1px solid #334155; | |
| color: #f1f5f9; | |
| font-size: 1rem; | |
| appearance: none; | |
| background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); | |
| background-repeat: no-repeat; | |
| background-position: right 12px center; | |
| background-size: 16px; | |
| } | |
| .select:focus { | |
| outline: none; | |
| border-color: var(--ton-primary); | |
| box-shadow: 0 0 0 3px rgba(41, 121, 255, 0.2); | |
| } | |
| .toast { | |
| position: fixed; | |
| top: 20px; | |
| right: 20px; | |
| z-index: 1000; | |
| padding: 12px 20px; | |
| border-radius: 8px; | |
| background: rgba(15, 23, 42, 0.9); | |
| backdrop-filter: blur(10px); | |
| border: 1px solid rgba(148, 163, 184, 0.1); | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2); | |
| animation: slideIn 0.3s ease-out; | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| max-width: 320px; | |
| } | |
| .toast.hide { | |
| animation: slideOut 0.3s ease-out; | |
| } | |
| .toast.success { | |
| border-left: 4px solid var(--ton-success); | |
| } | |
| .toast.error { | |
| border-left: 4px solid var(--ton-error); | |
| } | |
| .toast.warning { | |
| border-left: 4px solid var(--ton-warning); | |
| } | |
| .toast i { | |
| font-size: 1.2rem; | |
| } | |
| .toast-content { | |
| flex: 1; | |
| } | |
| .toast-title { | |
| font-weight: 500; | |
| margin-bottom: 4px; | |
| } | |
| .toast-message { | |
| font-size: 0.9rem; | |
| opacity: 0.9; | |
| } | |
| .toast-close { | |
| background: none; | |
| border: none; | |
| font-size: 1.2rem; | |
| color: #94a3b8; | |
| cursor: pointer; | |
| width: 24px; | |
| height: 24px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| border-radius: 50%; | |
| transition: all 0.2s; | |
| } | |
| .toast-close:hover { | |
| background: #1e293b; | |
| color: #f1f5f9; | |
| } | |
| .toast-progress { | |
| position: absolute; | |
| bottom: 0; | |
| left: 0; | |
| height: 3px; | |
| background: var(--ton-primary); | |
| width: 100%; | |
| transform-origin: left; | |
| transition: transform 0.2s; | |
| } | |
| .loading-overlay { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| background: rgba(15, 23, 42, 0.8); | |
| z-index: 1000; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 16px; | |
| } | |
| .loading-spinner { | |
| width: 48px; | |
| height: 48px; | |
| border: 4px solid rgba(255, 255, 255, 0.2); | |
| border-top: 4px solid var(--ton-primary); | |
| border-radius: 50%; | |
| animation: spin 1s linear infinite; | |
| } | |
| @keyframes spin { | |
| 0% { transform: rotate(0deg); } | |
| 100% { transform: rotate(360deg); } | |
| } | |
| </style> | |
| </head> | |
| <body class="antialiased"> | |
| <!-- Loading Screen --> | |
| <div id="loading-screen" class="fixed inset-0 bg-slate-900 flex items-center justify-center z-50"> | |
| <div class="text-center"> | |
| <div class="animate-spin rounded-full h-16 w-16 border-b-2 border-blue-500 mx-auto mb-4"></div> | |
| <h2 class="text-xl font-semibold text-white">بارگذاری پلتفرم TON...</h2> | |
| <p class="text-gray-400 mt-2">اتصال به mainnet</p> | |
| </div> | |
| </div> | |
| <!-- Main App --> | |
| <div id="root" class="hidden"> | |
| <nav class="gradient-border text-white shadow-lg sticky top-0 z-50"> | |
| <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> | |
| <div class="flex justify-between h-16 items-center"> | |
| <div class="flex items-center space-x-reverse space-x-8"> | |
| <a href="#" class="text-xl font-bold flex items-center"> | |
| <i class="fas fa-coins mr-2"></i> | |
| TON Platform | |
| </a> | |
| <div class="hidden md:flex space-x-reverse space-x-4"> | |
| <a href="#wallet" class="hover:text-gray-200 px-3 py-2 rounded-md">کیف پول</a> | |
| <a href="#swap" class="hover:text-gray-200 px-3 py-2 rounded-md">تبادل</a> | |
| <a href="#mining" class="hover:text-gray-200 px-3 py-2 rounded-md">ماینینگ</a> | |
| <a href="#stats" class="hover:text-gray-200 px-3 py-2 rounded-md">آمار</a> | |
| </div> | |
| </div> | |
| <div class="flex items-center space-x-4 space-x-reverse"> | |
| <div class="flex items-center"> | |
| <span class="status-online mr-2"></span> | |
| <span class="text-sm">Mainnet</span> | |
| </div> | |
| <div class="hidden sm:flex items-center"> | |
| <span class="text-xs text-gray-400">ساخته شده با</span> | |
| <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" class="mx-1 text-blue-400 hover:text-blue-300 underline">anycoder</a> | |
| </div> | |
| <button id="connectWalletBtn" class="bg-white text-blue-600 font-bold py-1 px-4 rounded-lg hover:bg-gray-100 transition"> | |
| اتصال کیف پول | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </nav> | |
| <main class="max-w-7xl mx-auto py-6 sm:px-6 lg:px-8"> | |
| <div id="home" class="px-4 py-6 sm:px-0"> | |
| <div class="text-center mb-12"> | |
| <h1 class="text-4xl md:text-5xl font-bold text-white mb-4"> | |
| پلتفرم جامع TON Blockchain | |
| </h1> | |
| <p class="text-xl text-gray-300 mb-8 max-w-3xl mx-auto"> | |
| کیف پول، تبادل، ماینینگ و مدیریت داراییهای دیجیتال در شبکه اصلی TON | |
| </p> | |
| <div class="flex justify-center space-x-4 space-x-reverse"> | |
| <button class="bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded-lg transition" onclick="document.getElementById('wallet').scrollIntoView({behavior:'smooth'})"> | |
| شروع کار | |
| </button> | |
| <button class="bg-transparent border-2 border-blue-500 text-blue-400 hover:text-white font-bold py-3 px-6 rounded-lg transition" onclick="document.getElementById('stats').scrollIntoView({behavior:'smooth'})"> | |
| راهنما | |
| </button> | |
| </div> | |
| </div> | |
| <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mt-8"> | |
| <a href="#wallet" class="block"> | |
| <div class="bg-slate-800 p-6 rounded-xl shadow-lg card-hover border border-slate-700 hover:border-blue-500 transition"> | |
| <div class="text-4xl mb-4">💼</div> | |
| <h3 class="text-lg font-semibold text-white mb-2">کیف پول هوشمند</h3> | |
| <p class="text-gray-400">مدیریت امن داراییهای TON</p> | |
| </div> | |
| </a> | |
| <a href="#swap" class="block"> | |
| <div class="bg-slate-800 p-6 rounded-xl shadow-lg card-hover border border-slate-700 hover:border-purple-500 transition"> | |
| <div class="text-4xl mb-4">🔄</div> | |
| <h3 class="text-lg font-semibold text-white mb-2">تبادل سریع</h3> | |
| <p class="text-gray-400">تبادل توکنها با کمترین کارمزد</p> | |
| </div> | |
| </a> | |
| <a href="#mining" class="block"> | |
| <div class="bg-slate-800 p-6 rounded-xl shadow-lg card-hover border border-slate-700 hover:border-green-500 transition"> | |
| <div class="text-4xl mb-4">⛏️</div> | |
| <h3 class="text-lg font-semibold text-white mb-2">ماینینگ</h3> | |
| <p class="text-gray-400">استخراج توکنهای جدید</p> | |
| </div> | |
| </a> | |
| <a href="#stats" class="block"> | |
| <div class="bg-slate-800 p-6 rounded-xl shadow-lg card-hover border border-slate-700 hover:border-yellow-500 transition"> | |
| <div class="text-4xl mb-4">📊</div> | |
| <h3 class="text-lg font-semibold text-white mb-2">آمار لحظهای</h3> | |
| <p class="text-gray-400">تحلیل و آمار بازار</p> | |
| </div> | |
| </a> | |
| </div> | |
| <div class |