Aplicaciones Web Orientadas a Servicios ITIID-05

Práctica Guiada: Mine-API - 1


index.html

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Minecraft World Explorer</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <link href="https://fonts.googleapis.com/css2?family=VT323&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="styles.css">
</head>
<body class="p-4 md:p-8">

    <!-- Header -->
    <header class="max-w-6xl mx-auto text-center mb-8">
        <h1 class="text-6xl text-green-400 mb-2 tracking-widest uppercase" style="text-shadow: 4px 4px 0 #000;">
            Minecraft API Explorer
        </h1>
        
        <!-- Navigation Tabs -->
        <nav class="flex flex-wrap justify-center gap-2 mt-6">
            <button onclick="changeCategory('personajes')" id="btn-personajes" class="mc-nav-btn active">Personajes</button>
            <button onclick="changeCategory('mobs')" id="btn-mobs" class="mc-nav-btn">Todos los Mobs</button>
            <button onclick="changeCategory('mobs/hostiles')" id="btn-mobs-hostiles" class="mc-nav-btn">Hostiles</button>
            <button onclick="changeCategory('mobs/pacificos')" id="btn-mobs-pacificos" class="mc-nav-btn">Pacíficos</button>
            <button onclick="changeCategory('biomas')" id="btn-biomas" class="mc-nav-btn">Biomas</button>
        </nav>

        <!-- Search Bar -->
        <div class="mt-8 flex justify-center">
            <input type="text" id="searchInput" placeholder="Buscar en esta categoría..." 
                class="w-full max-w-md bg-black border-4 border-gray-600 p-3 text-2xl text-green-400 focus:outline-none focus:border-green-500">
        </div>
    </header>

    <main class="max-w-7xl mx-auto grid grid-cols-1 lg:grid-cols-3 gap-8">
        
        <!-- Content List -->
        <div class="lg:col-span-2">
            <div id="loading" class="text-3xl text-yellow-400 text-center">Conectando con el servidor de Minecraft...</div>
            <div id="contentGrid" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4">
                <!-- Los datos se cargan aquí -->
            </div>
        </div>

        <!-- Sidebar -->
        <aside id="sidebar" class="hidden">
            <div class="sticky top-8">
                <div class="mc-card p-6 mb-6">
                    <button onclick="closeSidebar()" class="float-right text-red-500 text-2xl">X</button>
                    <h2 id="detailName" class="text-4xl text-green-400 mb-2">Nombre</h2>
                    <img id="detailImg" src="" alt="" class="w-full max-h-48 object-contain mb-4 bg-black/20 p-2">
                    <p id="detailDesc" class="text-xl text-gray-300 leading-tight mb-4">Cargando información...</p>
                    <div id="detailStats" class="text-lg text-yellow-400"></div>
                </div>

                <div class="mc-card p-4">
                    <h3 class="text-2xl mb-4 text-red-400 uppercase">Guías en YouTube</h3>
                    <div id="videoResults" class="space-y-4">
                        <!-- Videos se cargan aquí -->
                    </div>
                </div>
            </div>
        </aside>

    </main>

    <script src="script.js"></script>
</body>
</html>

styles.css

:root {
    --mc-dark: #1e1e1e;
    --mc-gray: #313131;
    --mc-green: #55ff55;
    --mc-border: #000000;
    --mc-dirt: #866043;
    --mc-grass: #5da943;
}

body {
    background-color: var(--mc-dark);
    color: #ffffff;
    font-family: 'VT323', monospace;
    image-rendering: pixelated;
    min-height: 100vh;
}

.mc-card {
    background-color: var(--mc-gray);
    border: 4px solid var(--mc-border);
    box-shadow: inset -4px -4px 0px #1a1a1a, inset 4px 4px 0px #4a4a4a;
    transition: all 0.2s;
}

.mc-card:hover {
    transform: translateY(-5px);
    border-color: var(--mc-green);
}

.mc-nav-btn {
    background-color: #bebebe;
    border: 3px solid #000;
    box-shadow: inset -3px -3px 0px #707070, inset 3px 3px 0px #fff;
    color: #3f3f3f;
    padding: 8px 16px;
    text-transform: uppercase;
    font-size: 1.25rem;
    cursor: pointer;
}

.mc-nav-btn:hover { background-color: #d0d0d0; }
.mc-nav-btn.active {
    background-color: var(--mc-green);
    color: #000;
    box-shadow: inset 3px 3px 0px #2e8b2e, inset -3px -3px 0px #90ee90;
}

.video-container {
    position: relative;
    padding-bottom: 56.25%;
    height: 0;
    overflow: hidden;
    border: 4px solid #000;
    background: #000;
}

.video-container iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

.badge {
    display: inline-block;
    padding: 2px 8px;
    font-size: 0.9rem;
    border: 2px solid #000;
    margin-top: 5px;
}

::-webkit-scrollbar { width: 10px; }
::-webkit-scrollbar-track { background: #1a1a1a; }
::-webkit-scrollbar-thumb { background: #555; border: 2px solid #000; }