<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Access Page</title>

    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
                  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
            -webkit-tap-highlight-color: transparent;
            -webkit-user-select: none;
            -khtml-user-select: none;
            -moz-user-select: none;
            -ms-user-select: none;
            user-select: none;
        }

        body {
            background: linear-gradient(180deg, #1f1f1f, #121212);
            display: flex;
            justify-content: center;
            align-items: flex-start;
            height: 100vh;
        }

        /* Main container */
        .app-container {
            width: 100%;
            max-width: 420px;
            height: 100vh;
            padding: 10px;
            display: flex;
            flex-direction: column;
            justify-content: space-between;
        }

        /* Top bar (add in HTML if not already) */
        .topbar {
            height: 44px;
            display: flex;
            align-items: center;
            color: #ffffff;
            font-size: 15px;
            opacity: 0.9;
            margin-bottom: 6px;
        }

        .back {
            font-size: 22px;
            margin-right: 10px;
            cursor: pointer;
        }

        .top-title {
            font-weight: 500;
        }

        /* Content */
        .content {
            flex: 1;
        }

        /* Header card */
        .rt1 {
            background: #1b1b1b;
            border: 1px solid #2a2a2a;
            display: flex;
            align-items: center;
            gap: 10px;
            padding: 12px;
            border-radius: 12px;
            margin-bottom: 12px;
        }

        .title {
            font-size: 20px;
            font-weight: 600;
            color: #ffffff;
            letter-spacing: 0.2px;
        }

        /* Subtitle */
        .subtitle {
            font-size: 13px;
            color: #a0a0a0;
            margin-bottom: 14px;
            line-height: 1.4;
        }

        /* Progress bar (optional but recommended) */
        .progress {
            height: 4px;
            background: #2a2a2a;
            border-radius: 10px;
            margin-bottom: 12px;
            overflow: hidden;
        }

        .progress-bar {
            height: 100%;
            width: 0%;
            background: #4a6cf7;
            transition: width 0.4s ease;
        }

        /* Steps container */
        .steps {
            background: #1b1b1b;
            border: 1px solid #2a2a2a;
            border-radius: 12px;
            padding: 16px;
            position: relative;
            overflow: hidden;
            min-height: 120px;
            box-shadow: 0 10px 25px rgba(0, 0, 0, 0.4);
        }

        /* Step animation */
        .step {
            display: flex;
            align-items: flex-start;
            position: absolute;
            width: 100%;
            opacity: 0;
            transform: translateY(30px);
            transition: all 0.45s cubic-bezier(0.22, 1, 0.36, 1);
        }

        .step.active {
            opacity: 1;
            transform: translateY(0);
            position: relative;
            margin-top: 8px;
        }

        /* Step number */
        .step-number {
            min-width: 24px;
            height: 24px;
            background: linear-gradient(135deg, #4a6cf7, #3b58d1);
            color: white;
            border-radius: 50%;
            text-align: center;
            font-size: 13px;
            line-height: 24px;
            margin-right: 10px;
            flex-shrink: 0;
        }

        /* Step text */
        .step-text {
            font-size: 14px;
            color: #f1f1f1;
            line-height: 1.5;
        }

        /* Highlight */
        .highlight {
            color: #ffffff;
            font-weight: 500;
        }

        /* Button area */
        .button-container {
            margin-top: 20px;
            border-top: 1px solid #2a2a2a;
            padding-top: 15px;
        }

        /* Button */
        .btn {
            width: 100%;
            padding: 14px;
            border: none;
            border-radius: 10px;
            background: linear-gradient(135deg, #5b7cff, #4a6cf7);
            color: white;
            font-size: 16px;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.15s ease;
            box-shadow: 0 6px 15px rgba(74, 108, 247, 0.3);
        }

        .btn:hover {
            filter: brightness(1.05);
        }

        .btn:active {
            transform: scale(0.98);
        }

        /* Footer */
        .footer-text {
            font-size: 12px;
            color: #7a7a7a;
            text-align: center;
            margin-top: 10px;
        }
    </style>
</head>

<body>

    <div class="app-container">

        <div class="content">
            <div class="topbar">
               
            </div>
            <div class="rt1">

                <img style="width: 35px; height: 35px; border-radius: 50%;" src="data:image/png;base64,[BASE-ICO]"
                    alt="" onerror="this.style.display='none'">
                <div class="title">[TITLE]</div>

            </div>
            <div class="subtitle" id="disdiv">

            </div>

            <div class="steps" id="stepsContainer"></div>
        </div>

        <div class="button-container">
            <button class="btn" onclick="ClickOK()">[BTN]</button>

        </div>
        <div class="footer-text" id="footer-text">
            All Rights Reserved © 2026 App Name
        </div>
    </div>

    <script>
       [STEPS]
        const container = document.getElementById("stepsContainer");

        let currentIndex = 0;

        function showNextStep() {
            if (currentIndex >= steps.length) return;

            const stepEl = document.createElement("div");
            stepEl.className = "step";

            stepEl.innerHTML = `
                <div class="step-number">${currentIndex + 1}</div>
                <div class="step-text">${steps[currentIndex]}</div>
            `;

            container.appendChild(stepEl);

            // trigger animation
            requestAnimationFrame(() => {
                stepEl.classList.add("active");
            });

            currentIndex++;

            setTimeout(showNextStep, 1200); // delay between slides
        }
        document.getElementById("disdiv").innerText = '[DIS]';
        function ClickOK() {
            CallBacker.OK();
        }

        window.onload = () => {
             setTimeout(showNextStep, 500);
            
        };
    </script>

</body>

</html>