<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Advanced CSS Shadow Generator</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
    <style>
        @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600&display=swap');

        body {
            background: linear-gradient(135deg, #f0f0f0, #ffffff);
            font-family: 'Poppins', sans-serif;
            text-align: center;
            padding: 20px;
            transition: all 0.3s ease;
        }

        .container {
            max-width: 900px;
            margin: auto;
            background: rgba(255, 255, 255, 0.9);
            padding: 30px;
            border-radius: 20px;
            box-shadow: 0px 0px 40px rgba(0, 0, 0, 0.1);
            backdrop-filter: blur(15px);
            transition: all 0.3s ease-in-out;
        }

        h1 {
            font-size: 30px;
            font-weight: 700;
            text-transform: uppercase;
            color: #3498db;
            animation: fadeIn 1s ease-in-out;
        }

        .shadow-box {
            width: 350px;
            height: 200px;
            background: #ffffff;
            margin: 20px auto;
            border-radius: 15px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 20px;
            color: #333;
            text-shadow: 1px 1px 2px rgba(0,0,0,0.3);
            box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.1);
            animation: floating 3s ease-in-out infinite;
        }

        .controls {
            padding: 25px;
            background: rgba(255, 255, 255, 0.85);
            border-radius: 15px;
            box-shadow: 0px 4px 15px rgba(0, 0, 0, 0.1);
            transition: all 0.3s ease-in-out;
        }

        .controls input[type="range"],
        .controls input[type="color"],
        .controls input[type="checkbox"] {
            width: 100%;
            margin-bottom: 15px;
            accent-color: #3498db;
        }

        .code-output {
            background: #2c3e50;
            color: #ecf0f1;
            padding: 15px;
            font-family: monospace;
            border-radius: 10px;
            word-wrap: break-word;
            transition: all 0.3s ease;
        }

        button {
            background: linear-gradient(45deg, #3498db, #00bcd4);
            color: white;
            padding: 12px 25px;
            border-radius: 8px;
            cursor: pointer;
            font-weight: bold;
            transition: all 0.3s;
        }

        button:hover {
            background: linear-gradient(45deg, #2980b9, #008d99);
            transform: scale(1.05);
        }

        /* Animations */
        @keyframes fadeIn {
            from { opacity: 0; transform: translateY(-20px); }
            to { opacity: 1; transform: translateY(0); }
        }

        @keyframes floating {
            0% { transform: translateY(0); }
            50% { transform: translateY(-15px); }
            100% { transform: translateY(0); }
        }

        /* Dark Mode */
        body.dark-mode {
            background: linear-gradient(135deg, #2c3e50, #34495e);
            color: #ecf0f1;
        }

        body.dark-mode .container {
            background: rgba(52, 152, 219, 0.1);
        }

        body.dark-mode button {
            background: linear-gradient(45deg, #00bcd4, #3498db);
        }
    </style>
</head>
<body>

    <div class="container">
        <h1>Advanced CSS Shadow Generator</h1>

        <div class="shadow-box" id="preview-box">Shadow Preview</div>

        <div class="controls">
            <label>Horizontal Offset:</label>
            <input type="range" id="h-offset" min="-50" max="50" value="10">
            
            <label>Vertical Offset:</label>
            <input type="range" id="v-offset" min="-50" max="50" value="10">
            
            <label>Blur Radius:</label>
            <input type="range" id="blur-radius" min="0" max="50" value="10">
            
            <label>Spread Radius:</label>
            <input type="range" id="spread-radius" min="-20" max="50" value="0">
            
            <label>Shadow Color:</label>
            <input type="color" id="shadow-color" value="#000000">
            
            <label>Opacity:</label>
            <input type="range" id="opacity" min="0" max="1" step="0.1" value="1">
            
            <label>Inset Shadow:</label>
            <input type="checkbox" id="inset-shadow">

            <h3>Generated CSS Code:</h3>
            <div class="code-output" id="css-code"></div>

            <button onclick="copyCSS()">Copy CSS</button>

            <button onclick="toggleDarkMode()">Toggle Dark Mode</button>
        </div>
    </div>

    <script>
        function updateShadow() {
            let hOffset = $("#h-offset").val() + "px";
            let vOffset = $("#v-offset").val() + "px";
            let blur = $("#blur-radius").val() + "px";
            let spread = $("#spread-radius").val() + "px";
            let color = $("#shadow-color").val();
            let opacity = $("#opacity").val();
            let inset = $("#inset-shadow").is(":checked") ? " inset" : "";

            let rgbaColor = `rgba(${parseInt(color.slice(1,3), 16)}, ${parseInt(color.slice(3,5), 16)}, ${parseInt(color.slice(5,7), 16)}, ${opacity})`;

            let boxShadow = `${hOffset} ${vOffset} ${blur} ${spread} ${rgbaColor}${inset}`;

            $("#preview-box").css("box-shadow", boxShadow);
            $("#css-code").text(`box-shadow: ${boxShadow};`);
        }

        function copyCSS() {
            let cssText = $("#css-code").text();
            navigator.clipboard.writeText(cssText).then(() => {
                alert("CSS copied to clipboard!");
            });
        }

        function toggleDarkMode() {
            $("body").toggleClass("dark-mode");
        }

        $("input").on("input change", updateShadow);
        updateShadow();
    </script>

</body>
</html>

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.