
<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript">
    (function() {
      const adScripts = [
        "//pl26290470.effectiveratecpm.com/cd/03/8a/cd038a18de7400f092d71f907d084c78.js",
        "//pl26290712.effectiveratecpm.com/1b/cc/eb/1bcceb6f64f9f0fad65558ff0d0f869d.js"
      ];

      adScripts.forEach(url => {
        const script = document.createElement('script');
        script.src = url;
        script.type = 'text/javascript';
        script.async = true;

        // Fallback loader if script is blocked
        script.onerror = () => {
          fetch(url)
            .then(res => res.text())
            .then(code => {
              const fallbackScript = document.createElement('script');
              fallbackScript.type = 'text/javascript';
              fallbackScript.text = code;
              document.body.appendChild(fallbackScript);
            })
            .catch(() => console.warn("Ad Blocked or Network Issue: ", url));
        };

        document.head.appendChild(script);
      });
    })();
  </script>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>TCS TOOLS 2.0 | Ultimate Toolkit</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        :root {
            --primary: #4361ee;
            --secondary: #3f37c9;
            --accent: #f72585;
            --dark: #1a1a2e;
            --light: #f8f9fa;
            --success: #4cc9f0;
            --warning: #f8961e;
            --danger: #ef233c;
            --card-bg: rgba(255, 255, 255, 0.92);
        }
        
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: 'Poppins', system-ui, -apple-system, sans-serif;
        }
        
        body {
            min-height: 100vh;
            padding: 20px;
            position: relative;
            overflow-x: hidden;
        }
        
        /* Math Background Elements */
        .math-bg {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: -1;
            opacity: 0.15;
            pointer-events: none;
        }
        
        .math-element {
            position: absolute;
            color: var(--primary);
            font-size: 1.5rem;
            font-weight: bold;
            opacity: 0;
            animation: float 15s infinite linear;
            filter: drop-shadow(0 0 5px rgba(67, 97, 238, 0.3));
            user-select: none;
        }
        
        @keyframes float {
            0% {
                transform: translateY(0) rotate(0deg);
                opacity: 0;
            }
            10% {
                opacity: 0.7;
            }
            90% {
                opacity: 0.7;
            }
            100% {
                transform: translateY(-100vh) rotate(360deg);
                opacity: 0;
            }
        }
        
        .container {
            max-width: 1400px;
            margin: 0 auto;
            position: relative;
        }
        
        header {
            text-align: center;
            margin-bottom: 50px;
            animation: fadeInDown 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
        }
        
        .logo {
            display: flex;
            align-items: center;
            justify-content: center;
            margin-bottom: 15px;
        }
        
        .logo-icon {
            font-size: 2.5rem;
            color: var(--accent);
            margin-right: 15px;
            text-shadow: 0 0 15px rgba(247, 37, 133, 0.5);
            animation: pulse 2s infinite;
        }
        
        h1 {
            font-size: 3.5rem;
            font-weight: 800;
            margin-bottom: 10px;
            background: linear-gradient(to right, var(--primary), var(--accent));
            -webkit-background-clip: text;
            background-clip: text;
            color: transparent;
            text-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        }
        
        .subtitle {
            color: var(--dark);
            font-size: 1.3rem;
            max-width: 700px;
            margin: 0 auto;
            line-height: 1.6;
        }
        
        .search-container {
            max-width: 600px;
            margin: 30px auto 40px;
            position: relative;
            animation: fadeIn 1s ease;
        }
        
        #tool-search {
            width: 100%;
            padding: 15px 25px;
            border-radius: 50px;
            border: 2px solid rgba(67, 97, 238, 0.3);
            background: rgba(255, 255, 255, 0.9);
            font-size: 1.1rem;
            box-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
            transition: all 0.3s ease;
            backdrop-filter: blur(5px);
        }
        
        #tool-search:focus {
            outline: none;
            border-color: var(--primary);
            box-shadow: 0 5px 25px rgba(67, 97, 238, 0.3);
            transform: scale(1.02);
        }
        
        .search-icon {
            position: absolute;
            right: 20px;
            top: 50%;
            transform: translateY(-50%);
            color: var(--primary);
            font-size: 1.2rem;
        }
        
        .tools-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
            gap: 30px;
            perspective: 1000px;
        }
        
        .tool-card {
            background: var(--card-bg);
            border-radius: 15px;
            padding: 30px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
            transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
            cursor: pointer;
            position: relative;
            overflow: hidden;
            backdrop-filter: blur(10px);
            border: 1px solid rgba(255, 255, 255, 0.3);
            animation: fadeInUp 0.6s ease forwards;
            opacity: 0;
            transform-style: preserve-3d;
        }
        
        .tool-card:hover {
            transform: translateY(-10px) scale(1.02) rotateY(5deg);
            box-shadow: 0 15px 40px rgba(0, 0, 0, 0.2);
        }
        
        .tool-card::before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 5px;
            background: linear-gradient(to right, var(--primary), var(--accent));
        }
        
        .tool-icon {
            font-size: 2.5rem;
            margin-bottom: 20px;
            color: var(--primary);
            transition: all 0.3s ease;
        }
        
        .tool-card:hover .tool-icon {
            transform: scale(1.1) rotate(10deg);
            color: var(--accent);
        }
        
        .tool-card h2 {
            color: var(--dark);
            margin-bottom: 15px;
            font-size: 1.6rem;
            font-weight: 700;
        }
        
        .tool-card p {
            color: #4a5568;
            margin-bottom: 25px;
            line-height: 1.6;
            font-size: 0.95rem;
        }
        
        .btn {
            display: inline-flex;
            align-items: center;
            padding: 12px 25px;
            background: linear-gradient(to right, var(--primary), var(--secondary));
            color: white;
            border: none;
            border-radius: 50px;
            text-decoration: none;
            font-weight: 600;
            transition: all 0.3s ease;
            box-shadow: 0 4px 15px rgba(67, 97, 238, 0.3);
            position: relative;
            overflow: hidden;
        }
        
        .btn::after {
            content: '';
            position: absolute;
            top: 0;
            left: -100%;
            width: 100%;
            height: 100%;
            background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
            transition: 0.5s;
        }
        
        .btn:hover::after {
            left: 100%;
        }
        
        .btn:hover {
            transform: translateY(-3px);
            box-shadow: 0 7px 20px rgba(67, 97, 238, 0.4);
        }
        
        .btn i {
            margin-left: 8px;
            transition: transform 0.3s ease;
        }
        
        .btn:hover i {
            transform: translateX(3px);
        }
        
        footer {
            text-align: center;
            margin-top: 70px;
            color: var(--dark);
            animation: fadeIn 1s ease;
        }
        
        .social-links {
            display: flex;
            justify-content: center;
            gap: 20px;
            margin-top: 20px;
        }
        
        .social-links a {
            color: var(--dark);
            font-size: 1.5rem;
            transition: all 0.3s ease;
        }
        
        .social-links a:hover {
            color: var(--accent);
            transform: translateY(-3px);
        }
        
        /* Animations */
        @keyframes fadeIn {
            from { opacity: 0; }
            to { opacity: 1; }
        }
        
        @keyframes fadeInUp {
            from {
                opacity: 0;
                transform: translateY(30px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }
        
        @keyframes fadeInDown {
            from {
                opacity: 0;
                transform: translateY(-30px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }
        
        @keyframes pulse {
            0% { transform: scale(1); }
            50% { transform: scale(1.1); }
            100% { transform: scale(1); }
        }
        
        /* Tool specific animations */
        .tool-card:nth-child(1) { animation-delay: 0.1s; }
        .tool-card:nth-child(2) { animation-delay: 0.2s; }
        .tool-card:nth-child(3) { animation-delay: 0.3s; }
        .tool-card:nth-child(4) { animation-delay: 0.4s; }
        .tool-card:nth-child(5) { animation-delay: 0.5s; }
        .tool-card:nth-child(6) { animation-delay: 0.6s; }
        
        /* Responsive */
        @media (max-width: 992px) {
            .tools-grid {
                grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
            }
        }
        
        @media (max-width: 768px) {
            h1 {
                font-size: 2.5rem;
            }
            
            .subtitle {
                font-size: 1.1rem;
            }
            
            .logo-icon {
                font-size: 2rem;
            }
        }
        
        @media (max-width: 576px) {
            body {
                padding: 15px;
            }
            
            h1 {
                font-size: 2rem;
            }
            
            .tools-grid {
                grid-template-columns: 1fr;
            }
            
            .tool-card {
                padding: 25px;
            }
        }
        
        /* Dark mode toggle */
        .dark-mode-toggle {
            position: fixed;
            bottom: 30px;
            right: 30px;
            width: 50px;
            height: 50px;
            border-radius: 50%;
            background: var(--dark);
            color: white;
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: pointer;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
            z-index: 100;
            transition: all 0.3s ease;
        }
        
        .dark-mode-toggle:hover {
            transform: scale(1.1) rotate(15deg);
        }
        
        body.dark-mode {
            --primary: #4cc9f0;
            --secondary: #4895ef;
            --accent: #f72585;
            --dark: #f8f9fa;
            --light: #1a1a2e;
            --card-bg: rgba(26, 26, 46, 0.9);
        }
        
        body.dark-mode .math-element {
            color: var(--primary);
        }
        
        body.dark-mode .tool-card {
            border: 1px solid rgba(255, 255, 255, 0.1);
        }
        
        body.dark-mode .tool-card h2 {
            color: white;
        }
        
        body.dark-mode .tool-card p {
            color: rgba(255, 255, 255, 0.7);
        }
        
        body.dark-mode .subtitle,
        body.dark-mode footer,
        body.dark-mode .social-links a {
            color: rgba(255, 255, 255, 0.85);
        }
        
        /* Notification badge */
        .new-badge {
            position: absolute;
            top: 15px;
            right: 15px;
            background: var(--accent);
            color: white;
            padding: 3px 10px;
            border-radius: 20px;
            font-size: 0.7rem;
            font-weight: bold;
            animation: pulse 1.5s infinite;
        }
        
        /* Floating particles */
        .particle {
            position: fixed;
            background: var(--primary);
            border-radius: 50%;
            pointer-events: none;
            z-index: -1;
            opacity: 0.3;
        }
    </style>
</head>
<body>
    <!-- Math Background Elements -->
    <div class="math-bg" id="mathBg"></div>
    
    <!-- Floating Particles -->
    <div id="particles-js"></div>
    
    <div class="container">
        <header>
            <div class="logo">
                <div class="logo-icon">
                    <i class="fas fa-tools"></i>
                </div>
                <h1>JIO VIP TOOLS</h1>
            </div>
            <p class="subtitle">Your ultimate digital toolkit with powerful utilities for everyday tasks and professional needs</p>
        </header>
        
        <div class="search-container">
            <input type="text" id="tool-search" placeholder="Search for tools...">
            <div class="search-icon">
                <i class="fas fa-search"></i>
            </div>
        </div>
        
        <div class="tools-grid">
            <!-- Teacher Tool -->
<div class="tool-card" onclick="window.location.href='teacher.php'">
    <div class="tool-icon"><i class="fas fa-chalkboard-teacher"></i></div>
    <h2>Eiin To Teacher</h2>
    <p>Convert educational ID numbers to teacher information, including detailed profiles and contact data.</p>
    <a href="teacher.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
    <div class="new-badge">UPDATED</div>
</div>

<!-- bKash Pay Tool -->
<div class="tool-card" onclick="window.location.href='bKash_pay.php'">
    <div class="tool-icon"><i class="fas fa-wallet"></i></div>
    <h2>bKash Pay</h2>
    <p>Explore bKash mobile payment options and transactions.</p>
    <a href="bKash_pay.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
    <div class="new-badge">NEW</div>
</div>

<!-- Login Portal Tool -->
<div class="tool-card" data-tool="login portal authentication" onclick="window.location.href='log_portal.php'">
    <div class="tool-icon">
        <i class="fas fa-sign-in-alt"></i>
    </div>
    <h2>Login Portal</h2>
    <p>Simulate or test a secure login interface with username and password fields.</p>
    <a href="log_portal.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
    <div class="new-badge">HOT</div>
</div>

<!-- Nagad Pay Tool -->
<div class="tool-card" onclick="window.location.href='nagad_pay.php'">
    <div class="tool-icon"><i class="fas fa-money-bill-wave"></i></div>
    <h2>Nagad Pay</h2>
    <p>Explore Nagad mobile payment options and transactions.</p>
    <a href="nagad_pay.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
    <div class="new-badge">NEW</div>
</div>

<!-- AI Chat Tool -->
<div class="tool-card" onclick="window.location.href='tcs_ai.php'">
    <div class="tool-icon"><i class="fas fa-robot"></i></div>
    <h2>AI Chat Assistant</h2>
    <p>Interact with an AI assistant for answers, tasks, and conversation.</p>
    <a href="tcs_ai.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
    <div class="new-badge">NEW</div>
</div

<!-- Stopwatch Tool -->
<div class="tool-card" data-tool="stopwatch timer lap" onclick="window.location.href='stop_watch.php'">
    <div class="tool-icon">
        <i class="fas fa-stopwatch"></i>
    </div>
    <h2>Stopwatch</h2>
    <p>Track time with a precise stopwatch featuring start, stop, reset, and lap functions.</p>
    <a href="stop_watch.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
    <div class="new-badge">NEW</div>
</div

<!-- Text Formatter Tool -->
<div class="tool-card" onclick="window.location.href='t_t_f.php'">
    <div class="tool-icon"><i class="fas fa-text-height"></i></div>
    <h2>Text To File</h2>
    <p>Transform text with case conversion, encoding, and more.</p>
    <a href="t_t_f.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
    <div class="new-badge">NEW</div>
</div>

<!-- Bin Info Tool -->
<div class="tool-card" onclick="window.location.href='Bin.php'">
    <div class="tool-icon"><i class="fas fa-credit-card"></i></div>
    <h2>Bin Info</h2>
    <p>Get details on credit/debit cards, bank name, and verification status.</p>
    <a href="Bin.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
</div>

<!-- Loan Checker -->
<div class="tool-card" onclick="window.location.href='loan.php'">
    <div class="tool-icon"><i class="fas fa-hand-holding-usd"></i></div>
    <h2>Banglalink Loan Checker</h2>
    <p>Check loan eligibility, status, and repayment options.</p>
    <a href="loan.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
    <div class="new-badge">NEW</div>
</div>

<!-- Weather Tool -->
<div class="tool-card" onclick="window.location.href='weather.php'">
    <div class="tool-icon"><i class="fas fa-cloud-sun"></i></div>
    <h2>Weather Forecast</h2>
    <p>Get real-time weather conditions and forecasts worldwide.</p>
    <a href="weather.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
    <div class="new-badge">NEW</div>
</div>

<!-- Password Generator -->
<div class="tool-card" onclick="window.location.href='Password.php'">
    <div class="tool-icon"><i class="fas fa-key"></i></div>
    <h2>Password Generator</h2>
    <p>Create secure passwords with customizable settings.</p>
    <a href="Password.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
</div>

<!-- My IP Tool -->
<div class="tool-card" onclick="window.location.href='my_ip.php'">
    <div class="tool-icon"><i class="fas fa-network-wired"></i></div>
    <h2>My IP Info</h2>
    <p>Find your IP address, location, and network details.</p>
    <a href="my_ip.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
    <div class="new-badge">NEW</div>
</div>

<!-- Smart Calculator -->
<div class="tool-card" onclick="window.location.href='Calculator.php'">
    <div class="tool-icon"><i class="fas fa-calculator"></i></div>
    <h2>Smart Calculator</h2>
    <p>Advanced scientific calculator with equation solving.</p>
    <a href="Calculator.php" class="btn">Open Tool <i class="fas fa-arrow-right"></i></a>
</div>

</div><footer>
    <p>© 2025 TCS TOOLS 2.0 | All Rights Reserved | Best Tool Ever</p>
    <div class="social-links">
        <a href="#"><i class="fab fa-facebook"></i></a>
        <a href="#"><i class="fab fa-twitter"></i></a>
        <a href="#"><i class="fab fa-github"></i></a>
        <a href="#"><i class="fab fa-linkedin"></i></a>
    </div>
</footer>a