Help
RSS
API
Feed
Maltego
Contact
Domain > www.wgfactory.co.kr
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2026-03-01
193.122.97.107
(
ClassC
)
Port 80
HTTP/1.1 200 OKDate: Sun, 01 Mar 2026 14:27:29 GMTServer: ApacheConnection: closeTransfer-Encoding: chunkedContent-Type: text/html; charsetUTF-8 !DOCTYPE html>html langko>head> meta charsetutf-8> meta contentwidthdevice-width, initial-scale1.0 nameviewport> title>와글와글팩토리 - 한국 최고의 로블록스 교육/title> meta content한국 최초 ROBLOX Featured Educator 서종원 공장장의 로블록스 크리에이터 교육, AI 메이커 교육, 온라인 강의 namedescription> meta content로블록스, ROBLOX, 교육, 메타버스, 게임개발, 코딩교육, 서종원, 와글와글팩토리 namekeywords> meta namenaver-site-verification contentc4a90635cfe52d0b85498151571285b9b9521887 /> !-- Favicons --> link relicon typeimage/png sizes32x32 hreffavicon/favicon-32x32.png> link relapple-touch-icon sizes57x57 hreffavicon/apple-icon-57x57.png> !-- Google Fonts --> link hrefhttps://fonts.googleapis.com/css2?familyNoto+Sans+KR:wght@300;400;500;700;900&familyOrbitron:wght@400;500;600;700;800;900&familyPress+Start+2P&displayswap relstylesheet> !-- Bootstrap Icons --> link hrefassets/vendor/bootstrap-icons/bootstrap-icons.css relstylesheet> !-- Three.js --> script srchttps://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js>/script> !-- GSAP for smooth animations --> script srchttps://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js>/script> script srchttps://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/ScrollTrigger.min.js>/script> style> :root { --primary: #f50359; --secondary: #1c228c; --accent-orange: #ff4000; --accent-purple: #7d0e8b; --accent-cyan: #00e5ff; --accent-gold: #ffd700; --dark: #0a0a1a; --darker: #050510; --gradient-main: linear-gradient(135deg, #f50359 0%, #7d0e8b 50%, #1c228c 100%); --gradient-fire: linear-gradient(135deg, #ff4000 0%, #f50359 100%); --gradient-ocean: linear-gradient(135deg, #00e5ff 0%, #1c228c 100%); --gradient-magic: linear-gradient(135deg, #7d0e8b 0%, #f50359 50%, #ff4000 100%); --gradient-gold: linear-gradient(135deg, #ffd700 0%, #ff8c00 100%); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: Noto Sans KR, sans-serif; background: var(--darker); color: #fff; overflow-x: hidden; cursor: url(data:image/svg+xml,svg xmlnshttp://www.w3.org/2000/svg width32 height32 viewBox0 0 32 32>circle cx16 cy16 r12 fill%23f50359 opacity0.8/>circle cx16 cy16 r6 fill%23fff/>/svg>) 16 16, auto; } /* Scrollbar */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: var(--darker); } ::-webkit-scrollbar-thumb { background: var(--gradient-main); border-radius: 4px; } /* LOADING SCREEN */ #loading-screen { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: var(--darker); z-index: 10000; display: flex; flex-direction: column; align-items: center; justify-content: center; transition: opacity 0.8s ease, visibility 0.8s ease; } #loading-screen.hidden { opacity: 0; visibility: hidden; } .loading-logo { width: 120px; height: 120px; border-radius: 20px; object-fit: cover; animation: loadingPulse 1.5s ease-in-out infinite; border: 3px solid var(--primary); box-shadow: 0 0 40px rgba(245, 3, 89, 0.5); } .loading-title { font-family: Orbitron, sans-serif; font-size: 2rem; font-weight: 800; background: var(--gradient-main); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; margin-top: 30px; text-transform: uppercase; letter-spacing: 3px; } .loading-bar-container { width: 300px; height: 6px; background: rgba(255,255,255,0.1); border-radius: 3px; margin-top: 30px; overflow: hidden; } .loading-bar { height: 100%; width: 0%; background: var(--gradient-main); border-radius: 3px; transition: width 0.3s ease; } .loading-text { font-family: Orbitron, sans-serif; font-size: 0.75rem; color: rgba(255,255,255,0.5); margin-top: 15px; letter-spacing: 2px; } .loading-character { width: 80px; height: 80px; margin-top: 20px; position: relative; } .loading-character .char-body { width: 40px; height: 50px; background: var(--primary); border-radius: 8px; position: absolute; left: 20px; top: 10px; animation: charBounce 0.6s ease-in-out infinite; } .loading-character .char-head { width: 35px; height: 35px; background: #ffcc99; border-radius: 8px; position: absolute; left: 22px; top: -15px; animation: charBounce 0.6s ease-in-out infinite; } .loading-character .char-eye { width: 6px; height: 8px; background: #333; border-radius: 3px; position: absolute; top: 10px; animation: blink 3s infinite; } .loading-character .char-eye.left { left: 8px; } .loading-character .char-eye.right { right: 8px; } .loading-character .char-smile { width: 12px; height: 6px; border-bottom: 3px solid #333; border-radius: 0 0 6px 6px; position: absolute; bottom: 8px; left: 11px; } @keyframes loadingPulse { 0%, 100% { transform: scale(1); box-shadow: 0 0 40px rgba(245, 3, 89, 0.5); } 50% { transform: scale(1.05); box-shadow: 0 0 60px rgba(245, 3, 89, 0.8); } } @keyframes charBounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } @keyframes blink { 0%, 95%, 100% { transform: scaleY(1); } 97% { transform: scaleY(0.1); } } /* HUD NAVIGATION */ #game-hud { position: fixed; top: 0; left: 0; width: 100%; z-index: 1000; padding: 15px 25px; display: flex; align-items: center; justify-content: space-between; background: linear-gradient(180deg, rgba(10,10,26,0.95) 0%, rgba(10,10,26,0) 100%); pointer-events: none; } #game-hud > * { pointer-events: auto; } .hud-logo { display: flex; align-items: center; gap: 12px; text-decoration: none; } .hud-logo img { width: 45px; height: 45px; border-radius: 10px; border: 2px solid var(--primary); transition: all 0.3s ease; } .hud-logo:hover img { box-shadow: 0 0 20px rgba(245, 3, 89, 0.6); transform: scale(1.05); } .hud-logo-text { font-family: Orbitron, sans-serif; font-size: 1rem; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 1px; } .hud-nav { display: flex; gap: 5px; background: rgba(255,255,255,0.05); backdrop-filter: blur(20px); border-radius: 50px; padding: 5px; border: 1px solid rgba(255,255,255,0.1); } .hud-nav a { color: rgba(255,255,255,0.7); text-decoration: none; font-size: 0.85rem; font-weight: 500; padding: 10px 18px; border-radius: 50px; transition: all 0.3s ease; position: relative; } .hud-nav a:hover, .hud-nav a.active { color: #fff; background: var(--gradient-main); } .hud-score { display: flex; align-items: center; gap: 15px; } .hud-badge { display: flex; align-items: center; gap: 8px; background: rgba(255,255,255,0.05); backdrop-filter: blur(20px); padding: 8px 18px; border-radius: 50px; border: 1px solid rgba(255,215,0,0.3); font-family: Orbitron, sans-serif; font-size: 0.85rem; font-weight: 600; } .hud-badge .star { color: var(--accent-gold); font-size: 1.1rem; } /* Mobile menu */ .mobile-menu-btn { display: none; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); color: #fff; font-size: 1.5rem; padding: 8px 12px; border-radius: 12px; cursor: pointer; } @media (max-width: 992px) { .hud-nav { display: none; } .mobile-menu-btn { display: block; } .hud-nav.mobile-open { display: flex; flex-direction: column; position: fixed; top: 75px; right: 20px; background: rgba(10,10,26,0.95); backdrop-filter: blur(20px); border-radius: 20px; padding: 10px; border: 1px solid rgba(255,255,255,0.1); } } /* HERO / WORLD SECTION */ #hero-world { position: relative; width: 100%; height: 100vh; overflow: hidden; background: var(--darker); } #three-canvas { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .hero-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(ellipse at center, transparent 30%, rgba(5,5,16,0.6) 100%); z-index: 1; } .hero-content { position: absolute; bottom: 0; left: 0; width: 100%; padding: 60px 40px; z-index: 2; background: linear-gradient(0deg, rgba(5,5,16,0.95) 0%, rgba(5,5,16,0.5) 50%, transparent 100%); } .hero-main-title { font-family: Orbitron, sans-serif; font-size: 4rem; font-weight: 900; text-transform: uppercase; letter-spacing: 4px; line-height: 1.1; margin-bottom: 15px; } .hero-main-title .line1 { display: block; background: var(--gradient-main); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .hero-main-title .line2 { display: block; color: #fff; font-size: 2.5rem; } .hero-subtitle-text { font-size: 1.1rem; color: rgba(255,255,255,0.7); max-width: 500px; line-height: 1.6; margin-bottom: 25px; } .hero-actions { display: flex; gap: 15px; flex-wrap: wrap; } .btn-game { display: inline-flex; align-items: center; gap: 10px; padding: 14px 32px; border-radius: 50px; font-weight: 700; font-size: 0.95rem; text-decoration: none; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); text-transform: uppercase; letter-spacing: 1px; position: relative; overflow: hidden; } .btn-game.primary { background: var(--gradient-fire); color: #fff; border: none; } .btn-game.primary:hover { transform: translateY(-3px); box-shadow: 0 15px 40px rgba(245, 3, 89, 0.5); } .btn-game.secondary { background: transparent; color: #fff; border: 2px solid rgba(255,255,255,0.3); } .btn-game.secondary:hover { border-color: var(--accent-cyan); box-shadow: 0 0 30px rgba(0, 229, 255, 0.3); transform: translateY(-3px); } .hero-hint { position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%); z-index: 3; display: flex; flex-direction: column; align-items: center; gap: 8px; opacity: 0.5; animation: hintBounce 2s ease-in-out infinite; } .hero-hint span { font-size: 0.75rem; font-family: Orbitron, sans-serif; letter-spacing: 2px; text-transform: uppercase; } @keyframes hintBounce { 0%, 100% { transform: translateX(-50%) translateY(0); } 50% { transform: translateX(-50%) translateY(-10px); } } @media (max-width: 768px) { .hero-main-title { font-size: 2.2rem; } .hero-main-title .line2 { font-size: 1.5rem; } .hero-content { padding: 40px 20px; } } /* SECTION COMMON */ .game-section { position: relative; padding: 100px 0; overflow: hidden; } .section-container { max-width: 1200px; margin: 0 auto; padding: 0 25px; position: relative; z-index: 2; } .section-header { text-align: center; margin-bottom: 60px; } .section-tag { display: inline-block; font-family: Orbitron, sans-serif; font-size: 0.75rem; font-weight: 600; letter-spacing: 3px; text-transform: uppercase; padding: 8px 20px; border-radius: 50px; margin-bottom: 20px; } .tag-fire { background: var(--gradient-fire); color: #fff; } .tag-ocean { background: var(--gradient-ocean); color: #fff; } .tag-magic { background: var(--gradient-magic); color: #fff; } .tag-gold { background: var(--gradient-gold); color: #1a1a2e; } .section-title { font-family: Orbitron, sans-serif; font-size: 2.8rem; font-weight: 800; text-transform: uppercase; letter-spacing: 2px; margin-bottom: 15px; } .section-desc { font-size: 1.05rem; color: rgba(255,255,255,0.6); max-width: 600px; margin: 0 auto; line-height: 1.7; } /* Section backgrounds */ .bg-pattern { position: absolute; top: 0; left: 0; right: 0; bottom: 0; opacity: 0.03; background-image: radial-gradient(circle at 25% 25%, var(--primary) 2px, transparent 2px), radial-gradient(circle at 75% 75%, var(--accent-cyan) 1px, transparent 1px); background-size: 60px 60px; z-index: 0; } .glow-orb { position: absolute; border-radius: 50%; filter: blur(80px); opacity: 0.15; z-index: 0; } /* EDUCATOR / BOSS SECTION */ #educator-boss { background: var(--dark); } .boss-card { display: grid; grid-template-columns: 1fr 1.2fr; gap: 50px; align-items: center; background: rgba(255,255,255,0.03); border-radius: 30px; padding: 50px; border: 1px solid rgba(255,255,255,0.06); position: relative; overflow: hidden; } .boss-card::before { content: ; position: absolute; top: -2px; left: -2px; right: -2px; bottom: -2px; background: var(--gradient-main); border-radius: 31px; z-index: -1; opacity: 0; transition: opacity 0.5s ease; } .boss-card:hover::before { opacity: 0.3; } .boss-photo-area { text-align: center; } .boss-photo-frame { position: relative; display: inline-block; } .boss-photo { width: 280px; height: 280px; object-fit: cover; border-radius: 25px; border: 4px solid rgba(245, 3, 89, 0.5); box-shadow: 0 20px 60px rgba(245, 3, 89, 0.3); transition: all 0.5s ease; } .boss-photo:hover { transform: scale(1.03) rotate(2deg); border-color: var(--accent-gold); box-shadow: 0 20px 80px rgba(255, 215, 0, 0.3); } .boss-photo-ring { position: absolute; top: -15px; left: -15px; right: -15px; bottom: -15px; border: 2px solid rgba(245, 3, 89, 0.2); border-radius: 35px; animation: ringRotate 10s linear infinite; } .boss-photo-ring::before { content: ; position: absolute; top: -5px; left: 50%; width: 10px; height: 10px; background: var(--primary); border-radius: 50%; box-shadow: 0 0 20px var(--primary); } @keyframes ringRotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .boss-level-badge { position: absolute; top: -10px; right: -10px; background: var(--gradient-gold); color: #1a1a2e; font-family: Orbitron, sans-serif; font-weight: 800; font-size: 0.7rem; padding: 8px 14px; border-radius: 12px; box-shadow: 0 5px 20px rgba(255, 215, 0, 0.5); z-index: 2; } .boss-info h2 { font-family: Orbitron, sans-serif; font-size: 2.2rem; font-weight: 800; margin-bottom: 8px; text-transform: uppercase; } .boss-role { font-size: 1rem; background: var(--gradient-fire); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; font-weight: 700; margin-bottom: 20px; } .boss-desc { color: rgba(255,255,255,0.7); font-size: 1rem; line-height: 1.8; margin-bottom: 25px; } .boss-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 15px; margin-bottom: 25px; } .boss-stat { text-align: center; padding: 15px 10px; background: rgba(255,255,255,0.03); border-radius: 15px; border: 1px solid rgba(255,255,255,0.05); transition: all 0.3s ease; } .boss-stat:hover { transform: translateY(-5px); border-color: var(--primary); box-shadow: 0 10px 30px rgba(245, 3, 89, 0.2); } .boss-stat-num { font-family: Orbitron, sans-serif; font-size: 1.8rem; font-weight: 800; background: var(--gradient-main); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .boss-stat-label { font-size: 0.75rem; color: rgba(255,255,255,0.5); margin-top: 5px; } .boss-actions { display: flex; gap: 12px; flex-wrap: wrap; } .boss-partners { margin-top: 30px; padding: 20px; background: rgba(255,255,255,0.02); border-radius: 15px; border: 1px solid rgba(255,255,255,0.05); } .boss-partners h4 { font-family: Orbitron, sans-serif; font-size: 0.8rem; letter-spacing: 2px; color: rgba(255,255,255,0.4); margin-bottom: 12px; text-transform: uppercase; } .partner-tags { display: flex; flex-wrap: wrap; gap: 8px; } .partner-tag { padding: 6px 14px; background: rgba(255,255,255,0.05); border-radius: 20px; font-size: 0.8rem; color: rgba(255,255,255,0.6); border: 1px solid rgba(255,255,255,0.08); transition: all 0.3s ease; } .partner-tag:hover { background: var(--gradient-main); color: #fff; border-color: transparent; } @media (max-width: 992px) { .boss-card { grid-template-columns: 1fr; padding: 30px; text-align: center; } .boss-stats { grid-template-columns: repeat(2, 1fr); } .boss-actions { justify-content: center; } .boss-info h2 { font-size: 1.6rem; } } /* MISSIONS (COURSES) */ #missions { background: var(--darker); } .missions-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 25px; } .mission-card { position: relative; background: rgba(255,255,255,0.03); border-radius: 25px; overflow: hidden; border: 1px solid rgba(255,255,255,0.06); transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); text-decoration: none; color: #fff; display: block; } .mission-card:hover { transform: translateY(-10px); border-color: var(--primary); box-shadow: 0 25px 60px rgba(245, 3, 89, 0.25); } .mission-thumb { position: relative; height: 200px; overflow: hidden; } .mission-thumb img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s ease; } .mission-card:hover .mission-thumb img { transform: scale(1.1); } .mission-thumb-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(0deg, rgba(5,5,16,0.8) 0%, transparent 50%); display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity 0.3s ease; } .mission-card:hover .mission-thumb-overlay { opacity: 1; } .play-icon { width: 60px; height: 60px; background: var(--gradient-fire); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; box-shadow: 0 10px 30px rgba(245, 3, 89, 0.5); transform: scale(0.8); transition: transform 0.3s ease; } .mission-card:hover .play-icon { transform: scale(1); } .mission-platform { position: absolute; top: 15px; left: 15px; padding: 6px 14px; border-radius: 20px; font-size: 0.75rem; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; z-index: 2; } .platform-new { background: var(--gradient-fire); color: #fff; animation: newPulse 2s ease-in-out infinite; } .platform-class101 { background: #ff6b6b; color: #fff; } .platform-inflearn { background: #00c471; color: #fff; } @keyframes newPulse { 0%, 100% { box-shadow: 0 0 10px rgba(245,3,89,0.5); } 50% { box-shadow: 0 0 25px rgba(245,3,89,0.8); } } .mission-body { padding: 25px; } .mission-title { font-size: 1.15rem; font-weight: 700; margin-bottom: 8px; line-height: 1.4; } .mission-desc { font-size: 0.9rem; color: rgba(255,255,255,0.5); line-height: 1.5; margin-bottom: 15px; } .mission-cta { display: inline-flex; align-items: center; gap: 8px; font-size: 0.85rem; font-weight: 600; color: var(--primary); transition: gap 0.3s ease; } .mission-card:hover .mission-cta { gap: 14px; } @media (max-width: 992px) { .missions-grid { grid-template-columns: 1fr; max-width: 500px; margin: 0 auto; } } /* POWER-UPS (BOOKS) */ #powerups { background: var(--dark); position: relative; } .powerups-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 30px; } .powerup-card { text-decoration: none; color: #fff; display: block; position: relative; text-align: center; padding: 40px 25px; background: rgba(255,255,255,0.03); border-radius: 25px; border: 1px solid rgba(255,255,255,0.06); transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); overflow: hidden; } .powerup-card::before { content: ; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.05), transparent); transition: left 0.6s ease; } .powerup-card:hover::before { left: 100%; } .powerup-card:hover { transform: translateY(-12px) scale(1.02); border-color: var(--accent-purple); box-shadow: 0 25px 60px rgba(125, 14, 139, 0.3); } .powerup-rarity { position: absolute; top: 15px; right: 15px; font-family: Orbitron, sans-serif; font-size: 0.65rem; font-weight: 700; padding: 5px 12px; border-radius: 20px; letter-spacing: 1px; } .rarity-epic { background: var(--gradient-magic); color: #fff; } .rarity-rare { background: var(--gradient-ocean); color: #fff; } .rarity-legendary { background: var(--gradient-gold); color: #1a1a2e; } .powerup-image { position: relative; display: inline-block; margin-bottom: 20px; } .powerup-image img { max-height: 260px; border-radius: 12px; box-shadow: 0 15px 40px rgba(0,0,0,0.5); transition: transform 0.4s ease; } .powerup-card:hover .powerup-image img { transform: rotateY(8deg) scale(1.05); } .powerup-glow { position: absolute; bottom: -10px; left: 50%; transform: translateX(-50%); width: 80%; height: 40px; background: var(--primary); filter: blur(30px); opacity: 0; transition: opacity 0.4s ease; } .powerup-card:hover .powerup-glow { opacity: 0.4; } .powerup-name { font-size: 1.1rem; font-weight: 700; margin-bottom: 8px; } .powerup-target { font-size: 0.85rem; color: rgba(255,255,255,0.5); margin-bottom: 18px; } .powerup-btn { display: inline-flex; align-items: center; gap: 8px; padding: 10px 24px; background: var(--gradient-magic); color: #fff; border-radius: 50px; font-weight: 600; font-size: 0.85rem; transition: all 0.3s ease; } .powerup-card:hover .powerup-btn { transform: scale(1.05); box-shadow: 0 10px 30px rgba(125, 14, 139, 0.5); } @media (max-width: 992px) { .powerups-grid { grid-template-columns: 1fr; max-width: 400px; margin: 0 auto; } } /* SKILLS (SERVICES) */ #skills { background: var(--darker); } .skills-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } .skill-card { padding: 30px; background: rgba(255,255,255,0.03); border-radius: 20px; border: 1px solid rgba(255,255,255,0.06); transition: all 0.4s ease; position: relative; overflow: hidden; } .skill-card::after { content: ; position: absolute; top: 0; left: 0; width: 4px; height: 0; background: var(--gradient-main); transition: height 0.4s ease; } .skill-card:hover::after { height: 100%; } .skill-card:hover { transform: translateX(5px); border-color: rgba(245, 3, 89, 0.3); background: rgba(255,255,255,0.05); } .skill-icon { width: 50px; height: 50px; border-radius: 15px; display: flex; align-items: center; justify-content: center; font-size: 1.3rem; margin-bottom: 15px; } .skill-icon.fire { background: rgba(245, 3, 89, 0.15); color: var(--primary); } .skill-icon.ocean { background: rgba(0, 229, 255, 0.15); color: var(--accent-cyan); } .skill-icon.magic { background: rgba(125, 14, 139, 0.15); color: var(--accent-purple); } .skill-icon.gold { background: rgba(255, 215, 0, 0.15); color: var(--accent-gold); } .skill-card h3 { font-size: 1.05rem; font-weight: 700; margin-bottom: 10px; } .skill-card p { font-size: 0.88rem; color: rgba(255,255,255,0.5); line-height: 1.6; } @media (max-width: 768px) { .skills-grid { grid-template-columns: 1fr; } } /* ACHIEVEMENTS (PORTFOLIO) */ #achievements { background: var(--dark); } .achieve-filters { display: flex; justify-content: center; gap: 10px; margin-bottom: 40px; flex-wrap: wrap; } .achieve-filter { padding: 10px 24px; border-radius: 50px; border: 1px solid rgba(255,255,255,0.1); background: transparent; color: rgba(255,255,255,0.6); font-size: 0.85rem; font-weight: 600; cursor: pointer; transition: all 0.3s ease; } .achieve-filter:hover, .achieve-filter.active { background: var(--gradient-main); color: #fff; border-color: transparent; } .achieve-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; } .achieve-item { position: relative; border-radius: 20px; overflow: hidden; aspect-ratio: 1; cursor: pointer; transition: all 0.4s ease; } .achieve-item:hover { transform: scale(1.05); z-index: 2; } .achieve-item img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s ease; } .achieve-item:hover img { transform: scale(1.15); } .achieve-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(0deg, rgba(5,5,16,0.95) 0%, rgba(5,5,16,0.3) 50%, transparent 100%); display: flex; flex-direction: column; justify-content: flex-end; padding: 20px; opacity: 0; transition: opacity 0.3s ease; } .achieve-item:hover .achieve-overlay { opacity: 1; } .achieve-overlay h4 { font-size: 0.95rem; font-weight: 700; margin-bottom: 4px; } .achieve-overlay p { font-size: 0.8rem; color: rgba(255,255,255,0.6); } .achieve-overlay .achieve-link { display: inline-flex; align-items: center; gap: 6px; margin-top: 10px; color: var(--primary); font-size: 0.8rem; font-weight: 600; text-decoration: none; } @media (max-width: 992px) { .achieve-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 576px) { .achieve-grid { grid-template-columns: 1fr; } } /* ABOUT ZONE */ #about-zone { background: var(--darker); } .about-layout { display: grid; grid-template-columns: 1fr 1fr; gap: 50px; align-items: center; } .about-image { border-radius: 25px; overflow: hidden; position: relative; } .about-image img { width: 100%; border-radius: 25px; transition: transform 0.5s ease; } .about-image:hover img { transform: scale(1.03); } .about-text h3 { font-family: Orbitron, sans-serif; font-size: 1.6rem; font-weight: 700; margin-bottom: 15px; text-transform: uppercase; } .about-text p { color: rgba(255,255,255,0.7); line-height: 1.8; margin-bottom: 20px; } .about-checklist { list-style: none; padding: 0; } .about-checklist li { display: flex; align-items: center; gap: 12px; padding: 10px 0; color: rgba(255,255,255,0.8); font-size: 0.95rem; } .about-checklist li i { color: var(--accent-cyan); font-size: 1.2rem; } @media (max-width: 768px) { .about-layout { grid-template-columns: 1fr; } } /* CONTACT / JOIN */ #join-team { background: var(--dark); position: relative; } .contact-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 25px; max-width: 900px; margin: 0 auto; } .contact-card { text-align: center; padding: 40px 25px; background: rgba(255,255,255,0.03); border-radius: 20px; border: 1px solid rgba(255,255,255,0.06); transition: all 0.4s ease; text-decoration: none; color: #fff; display: block; } .contact-card:hover { transform: translateY(-8px); border-color: var(--primary); box-shadow: 0 20px 50px rgba(245, 3, 89, 0.2); color: #fff; } .contact-icon { width: 70px; height: 70px; border-radius: 20px; display: flex; align-items: center; justify-content: center; font-size: 1.8rem; margin: 0 auto 20px; transition: transform 0.3s ease; } .contact-card:hover .contact-icon { transform: scale(1.1) rotate(5deg); } .contact-icon.ci-location { background: rgba(0, 229, 255, 0.15); color: var(--accent-cyan); } .contact-icon.ci-email { background: rgba(245, 3, 89, 0.15); color: var(--primary); } .contact-icon.ci-phone { background: rgba(255, 215, 0, 0.15); color: var(--accent-gold); } .contact-card h3 { font-family: Orbitron, sans-serif; font-size: 0.85rem; font-weight: 600; letter-spacing: 1px; margin-bottom: 8px; text-transform: uppercase; } .contact-card p { font-size: 0.95rem; color: rgba(255,255,255,0.6); } @media (max-width: 768px) { .contact-cards { grid-template-columns: 1fr; max-width: 400px; } } /* FOOTER */ #game-footer { background: var(--darker); border-top: 1px solid rgba(255,255,255,0.05); padding: 40px 0; text-align: center; } .footer-content { max-width: 1200px; margin: 0 auto; padding: 0 25px; } .footer-logo { font-family: Orbitron, sans-serif; font-size: 1rem; font-weight: 700; letter-spacing: 2px; background: var(--gradient-main); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; margin-bottom: 10px; } .footer-copy { font-size: 0.8rem; color: rgba(255,255,255,0.3); } /* FLOATING ACTION */ .floating-actions { position: fixed; bottom: 30px; right: 30px; z-index: 999; display: flex; flex-direction: column; gap: 12px; } .float-btn { width: 55px; height: 55px; border-radius: 16px; display: flex; align-items: center; justify-content: center; font-size: 1.3rem; color: #fff; text-decoration: none; transition: all 0.3s ease; box-shadow: 0 8px 25px rgba(0,0,0,0.3); } .float-btn:hover { transform: translateY(-3px) scale(1.08); color: #fff; } .float-btn.fb-phone { background: var(--gradient-ocean); } .float-btn.fb-email { background: var(--gradient-fire); } .float-btn.fb-top { background: rgba(255,255,255,0.1); backdrop-filter: blur(10px); border: 1px solid rgba(255,255,255,0.1); } @media (max-width: 768px) { .floating-actions { bottom: 20px; right: 15px; } .float-btn { width: 48px; height: 48px; font-size: 1.1rem; border-radius: 14px; } .section-title { font-size: 1.8rem; } } /* SCROLL REVEAL */ .reveal { opacity: 0; transform: translateY(40px); transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1); } .reveal.active { opacity: 1; transform: translateY(0); } .reveal-delay-1 { transition-delay: 0.1s; } .reveal-delay-2 { transition-delay: 0.2s; } .reveal-delay-3 { transition-delay: 0.3s; } /* ACHIEVEMENT POPUP */ .achievement-popup { position: fixed; top: 90px; right: 25px; background: rgba(10,10,26,0.95); backdrop-filter: blur(20px); border: 1px solid rgba(255,215,0,0.3); border-radius: 15px; padding: 15px 25px; display: flex; align-items: center; gap: 15px; z-index: 9999; transform: translateX(120%); transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: 0 15px 40px rgba(0,0,0,0.5); } .achievement-popup.show { transform: translateX(0); } .achievement-popup .ap-icon { font-size: 2rem; } .achievement-popup .ap-text h4 { font-family: Orbitron, sans-serif; font-size: 0.7rem; color: var(--accent-gold); letter-spacing: 2px; text-transform: uppercase; } .achievement-popup .ap-text p { font-size: 0.9rem; color: #fff; margin-top: 2px; } /style>/head>body> !-- LOADING SCREEN --> div idloading-screen> img srcassets/img/wgNewlogo.jpg altWGFactory classloading-logo> div classloading-title>WGFactory/div> div classloading-character> div classchar-head> div classchar-eye left>/div> div classchar-eye right>/div> div classchar-smile>/div> /div> div classchar-body>/div> /div> div classloading-bar-container> div classloading-bar idloading-bar>/div> /div> div classloading-text>ENTERING THE WORLD.../div> /div> !-- HUD NAVIGATION --> div idgame-hud> a href#hero-world classhud-logo> img srcassets/img/wgNewlogo.jpg altWGFactory> span classhud-logo-text>WGFactory/span> /a> nav classhud-nav idhud-nav> a href#hero-world classactive>Home/a> a href#educator-boss>공장장/a> a href#missions>강의/a> a href#powerups>도서/a> a href#skills>Services/a> a href#achievements>Portfolio/a> a href#join-team>Contact/a> /nav> div classhud-score> div classhud-badge> span classstar>★/span> span idhud-score-num>0/span> /div> button classmobile-menu-btn idmobile-menu-btn> i classbi bi-list>/i> /button> /div> /div> !-- HERO / 3D WORLD --> section idhero-world> canvas idthree-canvas>/canvas> div classhero-overlay>/div> div classhero-content> h1 classhero-main-title> span classline1>와글와글팩토리/span> span classline2>Koreas #1 Roblox Educator/span> /h1> p classhero-subtitle-text> 2015년부터 국내 최초 ROBLOX Featured Educator로 활동.br> 메타버스 시대를 이끄는 크리에이터 교육의 선두주자. /p> div classhero-actions> a href#educator-boss classbtn-game primary> i classbi bi-person-fill>/i> 공장장 소개 /a> a href#missions classbtn-game secondary> i classbi bi-play-circle-fill>/i> 강의 보기 /a> /div> /div> div classhero-hint> i classbi bi-chevron-double-down stylefont-size:1.5rem;>/i> span>Scroll to Explore/span> /div> /section> !-- EDUCATOR / BOSS --> section ideducator-boss classgame-section> div classbg-pattern>/div> div classglow-orb stylewidth:400px;height:400px;background:var(--primary);top:-100px;right:-100px;>/div> div classglow-orb stylewidth:300px;height:300px;background:var(--accent-purple);bottom:-50px;left:-50px;>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-fire>FEATURED EDUCATOR/span> h2 classsection-title>Meet The Boss/h2> p classsection-desc>한국 로블록스 교육의 전설, 서종원 공장장을 소개합니다/p> /div> div classboss-card reveal> div classboss-photo-area> div classboss-photo-frame> div classboss-photo-ring>/div> img srcassets/img/Jongwon.png alt서종원 공장장 classboss-photo> span classboss-level-badge>LV.MAX/span> /div> /div> div classboss-info> h2>서종원 공장장/h2> div classboss-role>Koreas First ROBLOX Featured Educator/div> p classboss-desc> 2015년부터 strong stylecolor:var(--primary);>국내 최초 ROBLOX Featured Educator/strong>로 인증받아 활동하고 있습니다. 서울대, 매일경제, 구로문화재단, 울산이노베이션 등 strong stylecolor:var(--accent-gold);>수백 곳의 기관/strong>에서 로블록스 크리에이터 교육을 진행했으며, 학생들이 자신만의 메타버스 공간을 기획하고 제작할 수 있도록 strong stylecolor:var(--accent-cyan);>추진력 있는 기획가/strong>로 성장시키는 것이 목표입니다. /p> div classboss-stats> div classboss-stat> div classboss-stat-num>2015/div> div classboss-stat-label>활동 시작/div> /div> div classboss-stat> div classboss-stat-num>100+/div> div classboss-stat-label>교육 기관/div> /div> div classboss-stat> div classboss-stat-num>3+/div> div classboss-stat-label>출판 서적/div> /div> div classboss-stat> div classboss-stat-num>1K+/div> div classboss-stat-label>수강생/div> /div> /div> div classboss-actions> a hreftel:010-6616-4545 classbtn-game primary> i classbi bi-telephone-fill>/i> 전화 상담 /a> a hrefmailto:3dkids4u@gmail.com classbtn-game secondary> i classbi bi-envelope-fill>/i> 이메일 문의 /a> /div> div classboss-partners> h4>주요 협력 기관/h4> div classpartner-tags> span classpartner-tag>서울대학교/span> span classpartner-tag>매일경제/span> span classpartner-tag>구로문화재단/span> span classpartner-tag>울산이노베이션/span> span classpartner-tag>서울시교육청/span> span classpartner-tag>한국원자력환경공단/span> span classpartner-tag>Class101/span> span classpartner-tag>인프런/span> /div> /div> /div> /div> /div> /section> !-- MISSIONS (COURSES) --> section idmissions classgame-section> div classbg-pattern>/div> div classglow-orb stylewidth:350px;height:350px;background:var(--accent-cyan);top:10%;left:-80px;>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-ocean>ONLINE MISSIONS/span> h2 classsection-title>온라인 강의/h2> p classsection-desc>언제 어디서나 시작할 수 있는 로블록스 크리에이터 퀘스트/p> /div> div classmissions-grid> a hrefhttps://inf.run/PoECd target_blank classmission-card reveal reveal-delay-1> div classmission-thumb> img srcassets/img/portfolio/RpbloxOnline_3.png alt인프런 로블록스 강좌> span classmission-platform platform-new>NEW!/span> div classmission-thumb-overlay> div classplay-icon>i classbi bi-play-fill>/i>/div> /div> /div> div classmission-body> h3 classmission-title>로블록스 게임 개발 완전정복/h3> p classmission-desc>초보자도 쉽게 따라할 수 있는 로블록스 게임 개발 입문 강좌/p> span classmission-cta> 강의 시작하기 i classbi bi-arrow-right>/i> /span> /div> /a> a hrefhttps://class101.net/ko/products/629821b6466a4a00153bf9cd target_blank classmission-card reveal reveal-delay-2> div classmission-thumb> img srcassets/img/portfolio/RobloxOnline_1.png alt클래스101 로블록스 코딩 입문> span classmission-platform platform-class101>Class101/span> div classmission-thumb-overlay> div classplay-icon>i classbi bi-play-fill>/i>/div> /div> /div> div classmission-body> h3 classmission-title>로블록스 코딩 입문 바이블/h3> p classmission-desc>로블록스의 기초부터 코딩까지 체계적으로 배우는 입문 강좌/p> span classmission-cta> 강의 시작하기 i classbi bi-arrow-right>/i> /span> /div> /a> a hrefhttps://class101.net/ko/products/611cffff5f788b000ddc193c target_blank classmission-card reveal reveal-delay-3> div classmission-thumb> img srcassets/img/portfolio/RobloxOnline_2.png alt클래스101 천공의 섬> span classmission-platform platform-class101>Class101/span> div classmission-thumb-overlay> div classplay-icon>i classbi bi-play-fill>/i>/div> /div> /div> div classmission-body> h3 classmission-title>천공의 섬 메타버스 만들기/h3> p classmission-desc>나만의 메타버스 세계를 만들면서 로블록스 코딩을 배워요/p> span classmission-cta> 강의 시작하기 i classbi bi-arrow-right>/i> /span> /div> /a> /div> /div> /section> !-- POWER-UPS (BOOKS) --> section idpowerups classgame-section> div classbg-pattern>/div> div classglow-orb stylewidth:400px;height:400px;background:var(--accent-purple);bottom:-100px;right:-100px;>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-magic>POWER-UPS/span> h2 classsection-title>출판 도서/h2> p classsection-desc>레벨업을 위한 필수 아이템! 체계적인 로블록스 학습 서적/p> /div> div classpowerups-grid> a hrefhttps://www.yes24.com/Product/Goods/101924438 target_blank classpowerup-card reveal reveal-delay-1> span classpowerup-rarity rarity-epic>EPIC/span> div classpowerup-image> img srcassets/img/portfolio/book1.jpg alt로블록스 게임제작 무작정 따라하기> div classpowerup-glow>/div> /div> h3 classpowerup-name>로블록스 게임제작br>무작정 따라하기/h3> p classpowerup-target>대상: 초등학교 고학년 이상/p> span classpowerup-btn> i classbi bi-cart-fill>/i> 바로 구매하기 /span> /a> a hrefhttps://www.yes24.com/Product/Goods/108907780 target_blank classpowerup-card reveal reveal-delay-2> span classpowerup-rarity rarity-rare>RARE/span> div classpowerup-image> img srcassets/img/portfolio/book2.png alt점프앤런타워 게임만들기> div classpowerup-glow>/div> /div> h3 classpowerup-name>점프앤런타워br>게임만들기/h3> p classpowerup-target>대상: 초등학생 이상/p> span classpowerup-btn> i classbi bi-cart-fill>/i> 바로 구매하기 /span> /a> a hrefhttps://product.kyobobook.co.kr/detail/S000212903240 target_blank classpowerup-card reveal reveal-delay-3> span classpowerup-rarity rarity-legendary>LEGENDARY/span> div classpowerup-image> img srcassets/img/portfolio/book3.png alt로블록스 최신 교재> div classpowerup-glow>/div> /div> h3 classpowerup-name>NEW! 로블록스br>최신 교재/h3> p classpowerup-target>대상: 초등학생 이상/p> span classpowerup-btn> i classbi bi-cart-fill>/i> 바로 구매하기 /span> /a> /div> /div> /section> !-- ABOUT ZONE --> section idabout-zone classgame-section> div classbg-pattern>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-gold>ABOUT/span> h2 classsection-title>About Us/h2> /div> div classabout-layout reveal> div classabout-image> img srcassets/img/card-4.png alt와글와글팩토리> /div> div classabout-text> h3>각 개인의 관심 주제에서 시작합니다/h3> p>저희의 교육 목표는 추진력 있는 멋진 기획가 양성입니다./p> ul classabout-checklist> li>i classbi bi-check-circle-fill>/i> 참여자 개인의 관심 주제 찾기/li> li>i classbi bi-check-circle-fill>/i> 주제에 맞는 기술 탐구/li> li>i classbi bi-check-circle-fill>/i> 공간 기획 및 제작 진행/li> /ul> p> 하나의 3D 콘텐츠 공간을 만들기 위해서는 수학, 과학, 프로그래밍, 디자인(2D,3D), 음악, 스토리 등 많은 분야의 지식이 연결되어 탄생하게 됩니다. /p> /div> /div> /div> /section> !-- SKILLS (SERVICES) --> section idskills classgame-section> div classbg-pattern>/div> div classglow-orb stylewidth:300px;height:300px;background:var(--accent-gold);top:20%;right:-80px;>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-gold>SKILL TREE/span> h2 classsection-title>Services/h2> p classsection-desc>와글와글팩토리가 제공하는 다양한 서비스/p> /div> div classskills-grid> div classskill-card reveal reveal-delay-1> div classskill-icon fire>i classbi bi-controller>/i>/div> h3>로블록스 크리에이터 교육/h3> p>2015년부터 국내 최초 ROBLOX Featured Educator로 활동! 서울대, 매일경제, 구로문화재단 등 다양한 워크샵 진행/p> /div> div classskill-card reveal reveal-delay-2> div classskill-icon ocean>i classbi bi-cpu>/i>/div> h3>A.I. 메이커 교육/h3> p>인공지능을 활용한 메이커 교육 - ChatGPT, Stable Diffusion, IoT 플랫폼, 오픈하드웨어 연동 등/p> /div> div classskill-card reveal reveal-delay-3> div classskill-icon magic>i classbi bi-play-circle>/i>/div> h3>온라인 강의/h3> p>클래스101, 인프런 온라인 강의 플랫폼에 로블록스 교육 콘텐츠 운영/p> /div> div classskill-card reveal reveal-delay-1> div classskill-icon gold>i classbi bi-book>/i>/div> h3>책 출판/h3> p>로블록스 교육 책 출판 - 로블록스 게임 무작정 따라하기, 점프앤런타워 게임만들기 외/p> /div> div classskill-card reveal reveal-delay-2> div classskill-icon fire>i classbi bi-box>/i>/div> h3>로블록스 체험 제작/h3> p>로블록스 체험, 게임 제작 서비스/p> /div> div classskill-card reveal reveal-delay-3> div classskill-icon ocean>i classbi bi-building>/i>/div> h3>공공기관 체험 공간 제작/h3> p>한국 원자력 환경 공단 체험 공간, 서울시 교육부 관련 체험 공간 제작 등/p> /div> /div> /div> /section> !-- ACHIEVEMENTS (PORTFOLIO) --> section idachievements classgame-section> div classbg-pattern>/div> div classglow-orb stylewidth:350px;height:350px;background:var(--primary);top:30%;left:-100px;>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-fire>ACHIEVEMENTS/span> h2 classsection-title>Portfolio/h2> p classsection-desc>다양한 외부 기관과 협업 프로젝트, 출판, 공간 제작/p> /div> div classachieve-filters reveal> button classachieve-filter active data-filterall>All/button> button classachieve-filter data-filteredu>교육/button> button classachieve-filter data-filterbook>출판/button> button classachieve-filter data-filterspace>공간제작/button> /div> div classachieve-grid idachieve-grid> div classachieve-item reveal data-catedu> img srcassets/img/portfolio/RpbloxOnline_3.png alt인프런 강좌> div classachieve-overlay> h4>인프런 강좌/h4> p>로블록스 게임 개발 완전정복/p> a hrefhttps://inf.run/PoECd target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catedu> img srcassets/img/portfolio/RobloxOnline_1.png alt클래스101 강좌> div classachieve-overlay> h4>클래스101 강좌/h4> p>로블록스 코딩 입문 바이블/p> a hrefhttps://class101.net/ko/products/629821b6466a4a00153bf9cd target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catspace> img srcassets/img/portfolio/porfolio-edu1.png alt로블록스 체험 공간> div classachieve-overlay> h4>로블록스 체험 공간 제작/h4> p>서울시 교육청 교복입은 예술가/p> a hrefhttps://www.roblox.com/games/7956185310 target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catedu> img srcassets/img/portfolio/RobloxOnline_2.png alt클래스101 강좌> div classachieve-overlay> h4>클래스101 강좌/h4> p>천공의 섬 메타버스 만들기/p> a hrefhttps://class101.net/ko/products/611cffff5f788b000ddc193c target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catbook> img srcassets/img/portfolio/book1.jpg alt로블록스 게임제작 무작정 따라하기> div classachieve-overlay> h4>로블록스게임제작 무작정 따라하기/h4> p>대상: 초고 이상/p> a hrefhttps://www.yes24.com/Product/Goods/101924438 target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catspace> img srcassets/img/portfolio/portfolio-makezone2.png alt한국원자력환경공단> div classachieve-overlay> h4>로블록스 체험 공간 제작/h4> p>한국원자력환경공단/p> a hrefhttps://www.roblox.com/games/7496042719/unnamed target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catbook> img srcassets/img/portfolio/book2.png alt점프앤런타워 게임만들기> div classachieve-overlay> h4>점프앤런타워 게임만들기/h4> p>대상: 초등학생 이상/p> a hrefhttps://www.yes24.com/Product/Goods/108907780 target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catbook> img srcassets/img/portfolio/book3.png alt로블록스 신간> div classachieve-overlay> h4>NEW! 로블록스 최신 교재/h4> p>대상: 초등학생 이상/p> a hrefhttps://product.kyobobook.co.kr/detail/S000212903240 target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> /div> /div> /section> !-- CONTACT / JOIN TEAM --> section idjoin-team classgame-section> div classbg-pattern>/div> div classglow-orb stylewidth:300px;height:300px;background:var(--accent-cyan);bottom:0;left:50%;transform:translateX(-50%);>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-ocean>JOIN THE TEAM/span> h2 classsection-title>Contact/h2> p classsection-desc>크리에이터 교육 및 협업을 위한 연락은 아래로 해주세요/p> /div> div classcontact-cards reveal> div classcontact-card> div classcontact-icon ci-location>i classbi bi-geo-alt-fill>/i>/div> h3>Location/h3> p>경기도 수원시 영통구br>광교로 156/p> /div> a hrefmailto:3dkids4u@gmail.com classcontact-card> div classcontact-icon ci-email>i classbi bi-envelope-fill>/i>/div> h3>Email/h3> p>3dkids4u@gmail.com/p> /a> a hreftel:010-6616-4545 classcontact-card> div classcontact-icon ci-phone>i classbi bi-telephone-fill>/i>/div> h3>Phone/h3> p>010-6616-4545/p> /a> /div> /div> /section> !-- FOOTER --> footer idgame-footer> div classfooter-content> div classfooter-logo>WGFACTORY/div> p classfooter-copy> © 2025 와글와글팩토리 (wgfactory). All Rights Reserved. | Designed by 서종원 공장장 /p> /div> /footer> !-- FLOATING ACTIONS --> div classfloating-actions> a hreftel:010-6616-4545 classfloat-btn fb-phone title전화 상담> i classbi bi-telephone-fill>/i> /a> a hrefmailto:3dkids4u@gmail.com classfloat-btn fb-email title이메일 문의> i classbi bi-envelope-fill>/i> /a> a href#hero-world classfloat-btn fb-top title맨 위로> i classbi bi-arrow-up>/i> /a> /div> !-- ACHIEVEMENT POPUP --> div classachievement-popup idachievement-popup> div classap-icon idap-icon>/div> div classap-text> h4>Achievement Unlocked/h4> p idap-message>/p> /div> /div> !-- SCRIPTS --> script> // SOUND MANAGER const SFX { coinCollect: new Audio(assets/sounds/sound1.mp3), // 3D coin/block click gemCollect: new Audio(assets/sounds/sound2.mp3), // 3D gem/star click achievement: new Audio(assets/sounds/sound3.mp3), // Achievement popup cardHover: new Audio(assets/sounds/sound4.mp3), // Card hover buttonClick: new Audio(assets/sounds/sound5.mp3), // Button/nav click sectionEnter: new Audio(assets/sounds/sound6.mp3), // New section scroll loadingDone: new Audio(assets/sounds/sound7.mp3), // Loading complete _enabled: false, _initialized: false, init() { if (this._initialized) return; this._initialized true; // Set volumes Object.keys(this).forEach(key > { if (thiskey instanceof Audio) { thiskey.volume 0.3; thiskey.load(); } }); this.cardHover.volume 0.15; this.sectionEnter.volume 0.2; this._enabled true; }, play(name) { if (!this._enabled || !thisname) return; const sound thisname; sound.currentTime 0; sound.play().catch(() > {}); } }; // Enable sound on first user interaction document.addEventListener(click, () > SFX.init(), { once: true }); document.addEventListener(touchstart, () > SFX.init(), { once: true }); // Sound toggle button (added to HUD) (function() { const btn document.createElement(button); btn.id sound-toggle; btn.innerHTML i classbi bi-volume-up-fill>/i>; btn.style.cssText background:rgba(255,255,255,0.1);border:1px solid rgba(255,255,255,0.2);color:#fff;font-size:1.1rem;padding:8px 12px;border-radius:12px;cursor:pointer;backdrop-filter:blur(10px);transition:all 0.3s ease;; btn.addEventListener(click, (e) > { e.stopPropagation(); SFX.init(); SFX._enabled !SFX._enabled; btn.innerHTML SFX._enabled ? i classbi bi-volume-up-fill>/i> : i classbi bi-volume-mute-fill>/i>; btn.style.borderColor SFX._enabled ? rgba(255,215,0,0.5) : rgba(255,255,255,0.2); SFX.play(buttonClick); }); document.querySelector(.hud-score).prepend(btn); })(); // LOADING SCREEN (function() { const bar document.getElementById(loading-bar); let progress 0; const interval setInterval(() > { progress + Math.random() * 15 + 5; if (progress > 100) { progress 100; clearInterval(interval); setTimeout(() > { document.getElementById(loading-screen).classList.add(hidden); SFX.play(loadingDone); }, 500); } bar.style.width progress + %; }, 200); })(); // MOBILE MENU document.getElementById(mobile-menu-btn).addEventListener(click, () > { document.getElementById(hud-nav).classList.toggle(mobile-open); SFX.play(buttonClick); }); // Close mobile menu on link click document.querySelectorAll(.hud-nav a).forEach(link > { link.addEventListener(click, () > { document.getElementById(hud-nav).classList.remove(mobile-open); SFX.play(buttonClick); }); }); // SMOOTH SCROLL document.querySelectorAll(ahref^#).forEach(anchor > { anchor.addEventListener(click, function(e) { e.preventDefault(); SFX.play(buttonClick); const target document.querySelector(this.getAttribute(href)); if (target) { target.scrollIntoView({ behavior: smooth, block: start }); } }); }); // ACTIVE NAV TRACKING const sections document.querySelectorAll(.game-section, #hero-world); const navLinks document.querySelectorAll(.hud-nav a); window.addEventListener(scroll, () > { let current ; sections.forEach(section > { const top section.offsetTop - 100; if (window.scrollY > top) { current section.getAttribute(id); } }); navLinks.forEach(link > { link.classList.remove(active); if (link.getAttribute(href) # + current) { link.classList.add(active); } }); }); // SCROLL REVEAL const revealElements document.querySelectorAll(.reveal); const revealObserver new IntersectionObserver((entries) > { entries.forEach(entry > { if (entry.isIntersecting) { entry.target.classList.add(active); } }); }, { threshold: 0.1 }); revealElements.forEach(el > revealObserver.observe(el)); // PORTFOLIO FILTER const filterBtns document.querySelectorAll(.achieve-filter); const achieveItems document.querySelectorAll(.achieve-item); filterBtns.forEach(btn > { btn.addEventListener(click, () > { filterBtns.forEach(b > b.classList.remove(active)); btn.classList.add(active); const filter btn.dataset.filter; achieveItems.forEach(item > { if (filter all || item.dataset.cat filter) { item.style.display ; item.style.opacity 1; item.style.transform scale(1); } else { item.style.opacity 0; item.style.transform scale(0.8); setTimeout(() > { item.style.display none; }, 300); } }); }); }); // SCORE & ACHIEVEMENTS let gameScore 0; const scoreEl document.getElementById(hud-score-num); const popup document.getElementById(achievement-popup); const popupIcon document.getElementById(ap-icon); const popupMsg document.getElementById(ap-message); const achievements {}; function addScore(points) { gameScore + points; scoreEl.textContent gameScore; scoreEl.style.transform scale(1.3); setTimeout(() > { scoreEl.style.transform scale(1); }, 200); if (points > 50) SFX.play(achievement); } function showAchievement(icon, message) { if (achievementsmessage) return; achievementsmessage true; popupIcon.textContent icon; popupMsg.textContent message; popup.classList.add(show); addScore(50); setTimeout(() > { popup.classList.remove(show); }, 3000); } // Section visit achievements const achievementMap { educator-boss: 🏆, 공장장을 만났습니다!, missions: 🎮, 미션 목록을 확인했습니다!, powerups: 📚, 파워업 아이템을 발견했습니다!, skills: ⚙, 스킬 트리를 열었습니다!, achievements: 🏅, 업적 갤러리에 입장했습니다!, join-team: 📨, 연락처를 획득했습니다! }; const achieveObserver new IntersectionObserver((entries) > { entries.forEach(entry > { if (entry.isIntersecting) { const id entry.target.id; if (achievementMapid) { const icon, msg achievementMapid; // Use innerHTML for the icon since its an HTML entity setTimeout(() > { popupIcon.innerHTML icon; popupMsg.textContent msg; if (!achievementsmsg) { achievementsmsg true; popup.classList.add(show); SFX.play(sectionEnter); addScore(50); setTimeout(() > { popup.classList.remove(show); }, 3000); } }, 500); } } }); }, { threshold: 0.3 }); document.querySelectorAll(.game-section).forEach(s > achieveObserver.observe(s)); // Click & hover sounds on cards document.querySelectorAll(.mission-card, .powerup-card, .achieve-item, .skill-card, .contact-card, .boss-stat).forEach(card > { card.addEventListener(mouseenter, () > SFX.play(cardHover)); card.addEventListener(click, () > { SFX.play(buttonClick); addScore(10); }); }); // Hover sounds on buttons document.querySelectorAll(.btn-game, .float-btn, .achieve-filter, .partner-tag).forEach(btn > { btn.addEventListener(mouseenter, () > SFX.play(cardHover)); }); // THREE.JS 3D WORLD (function() { const canvas document.getElementById(three-canvas); if (!canvas) return; const scene new THREE.Scene(); scene.fog new THREE.FogExp2(0x050510, 0.035); const camera new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer new THREE.WebGLRenderer({ canvas, alpha: true, antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)); const objects ; const colors 0xf50359, 0x1c228c, 0xff4000, 0x7d0e8b, 0x00e5ff, 0xffd700, 0x10b981, 0xf472b6; // Ground grid const gridHelper new THREE.GridHelper(40, 40, 0x1c228c, 0x0a0a2e); gridHelper.position.y -5; scene.add(gridHelper); // Ambient particles const pCount 600; const pGeo new THREE.BufferGeometry(); const pPos new Float32Array(pCount * 3); const pCol new Float32Array(pCount * 3); for (let i 0; i pCount; i++) { pPosi*3 (Math.random()-0.5) * 40; pPosi*3+1 (Math.random()-0.5) * 30; pPosi*3+2 (Math.random()-0.5) * 40; const c new THREE.Color(colorsMath.floor(Math.random()*colors.length)); pColi*3 c.r; pColi*3+1 c.g; pColi*3+2 c.b; } pGeo.setAttribute(position, new THREE.BufferAttribute(pPos, 3)); pGeo.setAttribute(color, new THREE.BufferAttribute(pCol, 3)); const pMat new THREE.PointsMaterial({ size: 0.08, vertexColors: true, transparent: true, opacity: 0.8 }); const particles new THREE.Points(pGeo, pMat); scene.add(particles); // Roblox character function makeCharacter(x, y, z, color) { const g new THREE.Group(); const head new THREE.Mesh(new THREE.BoxGeometry(0.5,0.5,0.5), new THREE.MeshBasicMaterial({color:0xffcc99})); head.position.y 0.85; g.add(head); // Eyes const eyeMat new THREE.MeshBasicMaterial({color:0x333333}); const lEye new THREE.Mesh(new THREE.BoxGeometry(0.08,0.1,0.05), eyeMat); lEye.position.set(-0.12, 0.9, 0.26); g.add(lEye); const rEye new THREE.Mesh(new THREE.BoxGeometry(0.08,0.1,0.05), eyeMat); rEye.position.set(0.12, 0.9, 0.26); g.add(rEye); // Smile const smile new THREE.Mesh(new THREE.BoxGeometry(0.2,0.04,0.05), new THREE.MeshBasicMaterial({color:0x333333})); smile.position.set(0, 0.73, 0.26); g.add(smile); const body new THREE.Mesh(new THREE.BoxGeometry(0.6,0.7,0.35), new THREE.MeshBasicMaterial({color})); body.position.y 0.25; g.add(body); const armGeo new THREE.BoxGeometry(0.18,0.55,0.18); const armMat new THREE.MeshBasicMaterial({color}); const lArm new THREE.Mesh(armGeo, armMat); lArm.position.set(-0.42,0.25,0); const rArm new THREE.Mesh(armGeo, armMat); rArm.position.set(0.42,0.25,0); g.add(lArm, rArm); const legGeo new THREE.BoxGeometry(0.2,0.55,0.2); const legMat new THREE.MeshBasicMaterial({color:0x222244}); const lLeg new THREE.Mesh(legGeo, legMat); lLeg.position.set(-0.15,-0.4,0); const rLeg new THREE.Mesh(legGeo, legMat); rLeg.position.set(0.15,-0.4,0); g.add(lLeg, rLeg); g.position.set(x,y,z); g.userData { type:char, rSpeed:{x:0,y:(Math.random()-0.5)*0.02}, fSpeed:Math.random()*0.4+0.3, fOff:Math.random()*Math.PI*2, oY:y, lArm, rArm, lLeg, rLeg }; return g; } // Coin function makeCoin(x,y,z) { const g new THREE.Group(); const ring new THREE.Mesh(new THREE.TorusGeometry(0.25,0.06,16,32), new THREE.MeshBasicMaterial({color:0xffd700})); g.add(ring); const center new THREE.Mesh(new THREE.CircleGeometry(0.15,32), new THREE.MeshBasicMaterial({color:0xffa500,side:THREE.DoubleSide})); g.add(center); g.position.set(x,y,z); g.userData {type:coin,rSpeed:{x:0,y:0.05},fSpeed:Math.random()*0.8+0.5,fOff:Math.random()*Math.PI*2,oY:y}; return g; } // Gem function makeGem(x,y,z,color) { const g new THREE.Group(); const mat new THREE.MeshBasicMaterial({color,transparent:true,opacity:0.8}); const top new THREE.Mesh(new THREE.ConeGeometry(0.18,0.3,6), mat); top.position.y 0.05; g.add(top); const bot new THREE.Mesh(new THREE.ConeGeometry(0.18,0.18,6), mat); bot.rotation.x Math.PI; bot.position.y -0.12; g.add(bot); g.position.set(x,y,z); g.userData {type:gem,rSpeed:{x:0,y:0.04},fSpeed:Math.random()*0.6+0.4,fOff:Math.random()*Math.PI*2,oY:y}; return g; } // Neon ring function makeRing(x,y,z,color,size) { const ring new THREE.Mesh( new THREE.TorusGeometry(size, 0.03, 8, 64), new THREE.MeshBasicMaterial({color, transparent:true, opacity:0.6}) ); ring.position.set(x,y,z); ring.userData {type:ring,rSpeed:{x:0.02,y:0.01,z:0.015},fSpeed:Math.random()*0.3+0.2,fOff:Math.random()*Math.PI*2,oY:y}; return ring; } // Floating block function makeBlock(x,y,z) { const size Math.random()*0.5+0.2; const geo new THREE.BoxGeometry(size,size,size); const mat new THREE.MeshBasicMaterial({ color: colorsMath.floor(Math.random()*colors.length), transparent:true, opacity:0.6 }); const m new THREE.Mesh(geo, mat); m.position.set(x,y,z); m.rotation.set(Math.random()*Math.PI, Math.random()*Math.PI, 0); m.userData {type:block,rSpeed:{x:(Math.random()-0.5)*0.015,y:(Math.random()-0.5)*0.015},fSpeed:Math.random()*0.5+0.3,fOff:Math.random()*Math.PI*2,oY:y}; return m; } // Star function makeStar(x,y,z) { const shape new THREE.Shape(); const or 0.25, ir 0.1, sp 5; for (let i0; isp*2; i++) { const r i%20 ? or : ir; const a (i*Math.PI)/sp - Math.PI/2; i0 ? shape.moveTo(Math.cos(a)*r, Math.sin(a)*r) : shape.lineTo(Math.cos(a)*r, Math.sin(a)*r); } shape.closePath(); const m new THREE.Mesh(new THREE.ShapeGeometry(shape), new THREE.MeshBasicMaterial({color:0xffd700,side:THREE.DoubleSide})); m.position.set(x,y,z); m.userData {type:star,rSpeed:{x:0,y:0.03,z:0.02},fSpeed:Math.random()*0.5+0.3,fOff:Math.random()*Math.PI*2,oY:y,pulse:Math.random()*Math.PI*2}; return m; } // Populate scene for (let i0;i35;i++) { const b makeBlock((Math.random()-0.5)*20,(Math.random()-0.5)*16,(Math.random()-0.5)*16-5); scene.add(b); objects.push(b); } const charColors 0xf50359, 0x00e5ff, 0xffd700, 0x7d0e8b, 0x10b981; for (let i0;i6;i++) { const c makeCharacter((Math.random()-0.5)*14,(Math.random()-0.5)*8,(Math.random()-0.5)*10-4, charColorsi%charColors.length); scene.add(c); objects.push(c); } for (let i0;i10;i++) { const c makeCoin((Math.random()-0.5)*18,(Math.random()-0.5)*14,(Math.random()-0.5)*14-3); scene.add(c); objects.push(c); } const gemColors 0x00ff88, 0xff00ff, 0x00e5ff, 0xf50359; for (let i0;i8;i++) { const g makeGem((Math.random()-0.5)*16,(Math.random()-0.5)*12,(Math.random()-0.5)*12-4, gemColorsi%gemColors.length); scene.add(g); objects.push(g); } for (let i0;i6;i++) { const s makeStar((Math.random()-0.5)*18,(Math.random()-0.5)*14,(Math.random()-0.5)*12-4); scene.add(s); objects.push(s); } const ringColors 0xf50359, 0x00e5ff, 0xffd700, 0x7d0e8b; for (let i0;i5;i++) { const r makeRing((Math.random()-0.5)*14,(Math.random()-0.5)*10,(Math.random()-0.5)*10-5, ringColorsi%ringColors.length, Math.random()*0.5+0.3); scene.add(r); objects.push(r); } camera.position.z 7; let mouseX0, mouseY0, tMouseX0, tMouseY0; document.addEventListener(mousemove, e > { tMouseX (e.clientX/window.innerWidth)*2-1; tMouseY -(e.clientY/window.innerHeight)*2+1; }); // Click interaction const raycaster new THREE.Raycaster(); const mouseVec new THREE.Vector2(); canvas.addEventListener(click, e > { mouseVec.x (e.clientX/window.innerWidth)*2-1; mouseVec.y -(e.clientY/window.innerHeight)*2+1; raycaster.setFromCamera(mouseVec, camera); const hits raycaster.intersectObjects(objects, true); if (hits.length > 0) { let obj hits0.object; while (obj.parent && !obj.userData.type) obj obj.parent; if (obj.userData.type) { let pts 0; switch(obj.userData.type) { case coin: pts10; SFX.play(coinCollect); break; case gem: pts25; SFX.play(gemCollect); break; case star: pts50; SFX.play(gemCollect); break; default: pts5; SFX.play(coinCollect); } addScore(pts); // Sparkle for (let i0;i8;i++) { const sp new THREE.Mesh( new THREE.SphereGeometry(0.04,6,6), new THREE.MeshBasicMaterial({color:0xffd700,transparent:true}) ); sp.position.copy(obj.position); sp.userData { vel: new THREE.Vector3((Math.random()-0.5)*0.12, Math.random()*0.12, (Math.random()-0.5)*0.12), life: 1 }; scene.add(sp); const animSp () > { sp.position.add(sp.userData.vel); sp.userData.vel.y - 0.002; sp.userData.life - 0.025; sp.material.opacity sp.userData.life; sp.scale.multiplyScalar(0.97); if (sp.userData.life > 0) requestAnimationFrame(animSp); else scene.remove(sp); }; animSp(); } const origSpeed obj.userData.rSpeed.y; obj.userData.rSpeed.y 0.3; setTimeout(() > { obj.userData.rSpeed.y origSpeed; }, 500); } } }); let t 0; function animate() { requestAnimationFrame(animate); t + 0.01; mouseX + (tMouseX - mouseX) * 0.05; mouseY + (tMouseY - mouseY) * 0.05; objects.forEach(obj > { obj.rotation.x + obj.userData.rSpeed.x; obj.rotation.y + obj.userData.rSpeed.y; if (obj.userData.rSpeed.z) obj.rotation.z + obj.userData.rSpeed.z; obj.position.y obj.userData.oY + Math.sin(t * obj.userData.fSpeed + obj.userData.fOff) * 0.4; if (obj.userData.type char) { const {lArm,rArm,lLeg,rLeg} obj.userData; if (lArm) lArm.rotation.x Math.sin(t*3)*0.5; if (rArm) rArm.rotation.x Math.sin(t*3+Math.PI)*0.5; if (lLeg) lLeg.rotation.x Math.sin(t*4)*0.3; if (rLeg) rLeg.rotation.x Math.sin(t*4+Math.PI)*0.3; } if (obj.userData.type coin) { const s 1 + Math.sin(t*3+obj.userData.fOff)*0.1; obj.scale.set(s,s,s); } if (obj.userData.type star && obj.userData.pulse ! undefined) { const p 1 + Math.sin(t*4+obj.userData.pulse)*0.2; obj.scale.set(p,p,p); } }); particles.rotation.y + 0.0008; particles.rotation.x + 0.0003; gridHelper.position.z (t * 0.5) % 1; camera.position.x + (mouseX * 2 - camera.position.x) * 0.03; camera.position.y + (mouseY * 1.5 - camera.position.y) * 0.03; camera.lookAt(scene.position); renderer.render(scene, camera); } animate(); window.addEventListener(resize, () > { camera.aspect window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); }); })(); /script>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Sun, 01 Mar 2026 14:27:30 GMTServer: ApacheConnection: closeTransfer-Encoding: chunkedContent-Type: text/html; charsetUTF-8 !DOCTYPE html>html langko>head> meta charsetutf-8> meta contentwidthdevice-width, initial-scale1.0 nameviewport> title>와글와글팩토리 - 한국 최고의 로블록스 교육/title> meta content한국 최초 ROBLOX Featured Educator 서종원 공장장의 로블록스 크리에이터 교육, AI 메이커 교육, 온라인 강의 namedescription> meta content로블록스, ROBLOX, 교육, 메타버스, 게임개발, 코딩교육, 서종원, 와글와글팩토리 namekeywords> meta namenaver-site-verification contentc4a90635cfe52d0b85498151571285b9b9521887 /> !-- Favicons --> link relicon typeimage/png sizes32x32 hreffavicon/favicon-32x32.png> link relapple-touch-icon sizes57x57 hreffavicon/apple-icon-57x57.png> !-- Google Fonts --> link hrefhttps://fonts.googleapis.com/css2?familyNoto+Sans+KR:wght@300;400;500;700;900&familyOrbitron:wght@400;500;600;700;800;900&familyPress+Start+2P&displayswap relstylesheet> !-- Bootstrap Icons --> link hrefassets/vendor/bootstrap-icons/bootstrap-icons.css relstylesheet> !-- Three.js --> script srchttps://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js>/script> !-- GSAP for smooth animations --> script srchttps://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js>/script> script srchttps://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/ScrollTrigger.min.js>/script> style> :root { --primary: #f50359; --secondary: #1c228c; --accent-orange: #ff4000; --accent-purple: #7d0e8b; --accent-cyan: #00e5ff; --accent-gold: #ffd700; --dark: #0a0a1a; --darker: #050510; --gradient-main: linear-gradient(135deg, #f50359 0%, #7d0e8b 50%, #1c228c 100%); --gradient-fire: linear-gradient(135deg, #ff4000 0%, #f50359 100%); --gradient-ocean: linear-gradient(135deg, #00e5ff 0%, #1c228c 100%); --gradient-magic: linear-gradient(135deg, #7d0e8b 0%, #f50359 50%, #ff4000 100%); --gradient-gold: linear-gradient(135deg, #ffd700 0%, #ff8c00 100%); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: Noto Sans KR, sans-serif; background: var(--darker); color: #fff; overflow-x: hidden; cursor: url(data:image/svg+xml,svg xmlnshttp://www.w3.org/2000/svg width32 height32 viewBox0 0 32 32>circle cx16 cy16 r12 fill%23f50359 opacity0.8/>circle cx16 cy16 r6 fill%23fff/>/svg>) 16 16, auto; } /* Scrollbar */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: var(--darker); } ::-webkit-scrollbar-thumb { background: var(--gradient-main); border-radius: 4px; } /* LOADING SCREEN */ #loading-screen { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: var(--darker); z-index: 10000; display: flex; flex-direction: column; align-items: center; justify-content: center; transition: opacity 0.8s ease, visibility 0.8s ease; } #loading-screen.hidden { opacity: 0; visibility: hidden; } .loading-logo { width: 120px; height: 120px; border-radius: 20px; object-fit: cover; animation: loadingPulse 1.5s ease-in-out infinite; border: 3px solid var(--primary); box-shadow: 0 0 40px rgba(245, 3, 89, 0.5); } .loading-title { font-family: Orbitron, sans-serif; font-size: 2rem; font-weight: 800; background: var(--gradient-main); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; margin-top: 30px; text-transform: uppercase; letter-spacing: 3px; } .loading-bar-container { width: 300px; height: 6px; background: rgba(255,255,255,0.1); border-radius: 3px; margin-top: 30px; overflow: hidden; } .loading-bar { height: 100%; width: 0%; background: var(--gradient-main); border-radius: 3px; transition: width 0.3s ease; } .loading-text { font-family: Orbitron, sans-serif; font-size: 0.75rem; color: rgba(255,255,255,0.5); margin-top: 15px; letter-spacing: 2px; } .loading-character { width: 80px; height: 80px; margin-top: 20px; position: relative; } .loading-character .char-body { width: 40px; height: 50px; background: var(--primary); border-radius: 8px; position: absolute; left: 20px; top: 10px; animation: charBounce 0.6s ease-in-out infinite; } .loading-character .char-head { width: 35px; height: 35px; background: #ffcc99; border-radius: 8px; position: absolute; left: 22px; top: -15px; animation: charBounce 0.6s ease-in-out infinite; } .loading-character .char-eye { width: 6px; height: 8px; background: #333; border-radius: 3px; position: absolute; top: 10px; animation: blink 3s infinite; } .loading-character .char-eye.left { left: 8px; } .loading-character .char-eye.right { right: 8px; } .loading-character .char-smile { width: 12px; height: 6px; border-bottom: 3px solid #333; border-radius: 0 0 6px 6px; position: absolute; bottom: 8px; left: 11px; } @keyframes loadingPulse { 0%, 100% { transform: scale(1); box-shadow: 0 0 40px rgba(245, 3, 89, 0.5); } 50% { transform: scale(1.05); box-shadow: 0 0 60px rgba(245, 3, 89, 0.8); } } @keyframes charBounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } @keyframes blink { 0%, 95%, 100% { transform: scaleY(1); } 97% { transform: scaleY(0.1); } } /* HUD NAVIGATION */ #game-hud { position: fixed; top: 0; left: 0; width: 100%; z-index: 1000; padding: 15px 25px; display: flex; align-items: center; justify-content: space-between; background: linear-gradient(180deg, rgba(10,10,26,0.95) 0%, rgba(10,10,26,0) 100%); pointer-events: none; } #game-hud > * { pointer-events: auto; } .hud-logo { display: flex; align-items: center; gap: 12px; text-decoration: none; } .hud-logo img { width: 45px; height: 45px; border-radius: 10px; border: 2px solid var(--primary); transition: all 0.3s ease; } .hud-logo:hover img { box-shadow: 0 0 20px rgba(245, 3, 89, 0.6); transform: scale(1.05); } .hud-logo-text { font-family: Orbitron, sans-serif; font-size: 1rem; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 1px; } .hud-nav { display: flex; gap: 5px; background: rgba(255,255,255,0.05); backdrop-filter: blur(20px); border-radius: 50px; padding: 5px; border: 1px solid rgba(255,255,255,0.1); } .hud-nav a { color: rgba(255,255,255,0.7); text-decoration: none; font-size: 0.85rem; font-weight: 500; padding: 10px 18px; border-radius: 50px; transition: all 0.3s ease; position: relative; } .hud-nav a:hover, .hud-nav a.active { color: #fff; background: var(--gradient-main); } .hud-score { display: flex; align-items: center; gap: 15px; } .hud-badge { display: flex; align-items: center; gap: 8px; background: rgba(255,255,255,0.05); backdrop-filter: blur(20px); padding: 8px 18px; border-radius: 50px; border: 1px solid rgba(255,215,0,0.3); font-family: Orbitron, sans-serif; font-size: 0.85rem; font-weight: 600; } .hud-badge .star { color: var(--accent-gold); font-size: 1.1rem; } /* Mobile menu */ .mobile-menu-btn { display: none; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); color: #fff; font-size: 1.5rem; padding: 8px 12px; border-radius: 12px; cursor: pointer; } @media (max-width: 992px) { .hud-nav { display: none; } .mobile-menu-btn { display: block; } .hud-nav.mobile-open { display: flex; flex-direction: column; position: fixed; top: 75px; right: 20px; background: rgba(10,10,26,0.95); backdrop-filter: blur(20px); border-radius: 20px; padding: 10px; border: 1px solid rgba(255,255,255,0.1); } } /* HERO / WORLD SECTION */ #hero-world { position: relative; width: 100%; height: 100vh; overflow: hidden; background: var(--darker); } #three-canvas { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .hero-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(ellipse at center, transparent 30%, rgba(5,5,16,0.6) 100%); z-index: 1; } .hero-content { position: absolute; bottom: 0; left: 0; width: 100%; padding: 60px 40px; z-index: 2; background: linear-gradient(0deg, rgba(5,5,16,0.95) 0%, rgba(5,5,16,0.5) 50%, transparent 100%); } .hero-main-title { font-family: Orbitron, sans-serif; font-size: 4rem; font-weight: 900; text-transform: uppercase; letter-spacing: 4px; line-height: 1.1; margin-bottom: 15px; } .hero-main-title .line1 { display: block; background: var(--gradient-main); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .hero-main-title .line2 { display: block; color: #fff; font-size: 2.5rem; } .hero-subtitle-text { font-size: 1.1rem; color: rgba(255,255,255,0.7); max-width: 500px; line-height: 1.6; margin-bottom: 25px; } .hero-actions { display: flex; gap: 15px; flex-wrap: wrap; } .btn-game { display: inline-flex; align-items: center; gap: 10px; padding: 14px 32px; border-radius: 50px; font-weight: 700; font-size: 0.95rem; text-decoration: none; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); text-transform: uppercase; letter-spacing: 1px; position: relative; overflow: hidden; } .btn-game.primary { background: var(--gradient-fire); color: #fff; border: none; } .btn-game.primary:hover { transform: translateY(-3px); box-shadow: 0 15px 40px rgba(245, 3, 89, 0.5); } .btn-game.secondary { background: transparent; color: #fff; border: 2px solid rgba(255,255,255,0.3); } .btn-game.secondary:hover { border-color: var(--accent-cyan); box-shadow: 0 0 30px rgba(0, 229, 255, 0.3); transform: translateY(-3px); } .hero-hint { position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%); z-index: 3; display: flex; flex-direction: column; align-items: center; gap: 8px; opacity: 0.5; animation: hintBounce 2s ease-in-out infinite; } .hero-hint span { font-size: 0.75rem; font-family: Orbitron, sans-serif; letter-spacing: 2px; text-transform: uppercase; } @keyframes hintBounce { 0%, 100% { transform: translateX(-50%) translateY(0); } 50% { transform: translateX(-50%) translateY(-10px); } } @media (max-width: 768px) { .hero-main-title { font-size: 2.2rem; } .hero-main-title .line2 { font-size: 1.5rem; } .hero-content { padding: 40px 20px; } } /* SECTION COMMON */ .game-section { position: relative; padding: 100px 0; overflow: hidden; } .section-container { max-width: 1200px; margin: 0 auto; padding: 0 25px; position: relative; z-index: 2; } .section-header { text-align: center; margin-bottom: 60px; } .section-tag { display: inline-block; font-family: Orbitron, sans-serif; font-size: 0.75rem; font-weight: 600; letter-spacing: 3px; text-transform: uppercase; padding: 8px 20px; border-radius: 50px; margin-bottom: 20px; } .tag-fire { background: var(--gradient-fire); color: #fff; } .tag-ocean { background: var(--gradient-ocean); color: #fff; } .tag-magic { background: var(--gradient-magic); color: #fff; } .tag-gold { background: var(--gradient-gold); color: #1a1a2e; } .section-title { font-family: Orbitron, sans-serif; font-size: 2.8rem; font-weight: 800; text-transform: uppercase; letter-spacing: 2px; margin-bottom: 15px; } .section-desc { font-size: 1.05rem; color: rgba(255,255,255,0.6); max-width: 600px; margin: 0 auto; line-height: 1.7; } /* Section backgrounds */ .bg-pattern { position: absolute; top: 0; left: 0; right: 0; bottom: 0; opacity: 0.03; background-image: radial-gradient(circle at 25% 25%, var(--primary) 2px, transparent 2px), radial-gradient(circle at 75% 75%, var(--accent-cyan) 1px, transparent 1px); background-size: 60px 60px; z-index: 0; } .glow-orb { position: absolute; border-radius: 50%; filter: blur(80px); opacity: 0.15; z-index: 0; } /* EDUCATOR / BOSS SECTION */ #educator-boss { background: var(--dark); } .boss-card { display: grid; grid-template-columns: 1fr 1.2fr; gap: 50px; align-items: center; background: rgba(255,255,255,0.03); border-radius: 30px; padding: 50px; border: 1px solid rgba(255,255,255,0.06); position: relative; overflow: hidden; } .boss-card::before { content: ; position: absolute; top: -2px; left: -2px; right: -2px; bottom: -2px; background: var(--gradient-main); border-radius: 31px; z-index: -1; opacity: 0; transition: opacity 0.5s ease; } .boss-card:hover::before { opacity: 0.3; } .boss-photo-area { text-align: center; } .boss-photo-frame { position: relative; display: inline-block; } .boss-photo { width: 280px; height: 280px; object-fit: cover; border-radius: 25px; border: 4px solid rgba(245, 3, 89, 0.5); box-shadow: 0 20px 60px rgba(245, 3, 89, 0.3); transition: all 0.5s ease; } .boss-photo:hover { transform: scale(1.03) rotate(2deg); border-color: var(--accent-gold); box-shadow: 0 20px 80px rgba(255, 215, 0, 0.3); } .boss-photo-ring { position: absolute; top: -15px; left: -15px; right: -15px; bottom: -15px; border: 2px solid rgba(245, 3, 89, 0.2); border-radius: 35px; animation: ringRotate 10s linear infinite; } .boss-photo-ring::before { content: ; position: absolute; top: -5px; left: 50%; width: 10px; height: 10px; background: var(--primary); border-radius: 50%; box-shadow: 0 0 20px var(--primary); } @keyframes ringRotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .boss-level-badge { position: absolute; top: -10px; right: -10px; background: var(--gradient-gold); color: #1a1a2e; font-family: Orbitron, sans-serif; font-weight: 800; font-size: 0.7rem; padding: 8px 14px; border-radius: 12px; box-shadow: 0 5px 20px rgba(255, 215, 0, 0.5); z-index: 2; } .boss-info h2 { font-family: Orbitron, sans-serif; font-size: 2.2rem; font-weight: 800; margin-bottom: 8px; text-transform: uppercase; } .boss-role { font-size: 1rem; background: var(--gradient-fire); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; font-weight: 700; margin-bottom: 20px; } .boss-desc { color: rgba(255,255,255,0.7); font-size: 1rem; line-height: 1.8; margin-bottom: 25px; } .boss-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 15px; margin-bottom: 25px; } .boss-stat { text-align: center; padding: 15px 10px; background: rgba(255,255,255,0.03); border-radius: 15px; border: 1px solid rgba(255,255,255,0.05); transition: all 0.3s ease; } .boss-stat:hover { transform: translateY(-5px); border-color: var(--primary); box-shadow: 0 10px 30px rgba(245, 3, 89, 0.2); } .boss-stat-num { font-family: Orbitron, sans-serif; font-size: 1.8rem; font-weight: 800; background: var(--gradient-main); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .boss-stat-label { font-size: 0.75rem; color: rgba(255,255,255,0.5); margin-top: 5px; } .boss-actions { display: flex; gap: 12px; flex-wrap: wrap; } .boss-partners { margin-top: 30px; padding: 20px; background: rgba(255,255,255,0.02); border-radius: 15px; border: 1px solid rgba(255,255,255,0.05); } .boss-partners h4 { font-family: Orbitron, sans-serif; font-size: 0.8rem; letter-spacing: 2px; color: rgba(255,255,255,0.4); margin-bottom: 12px; text-transform: uppercase; } .partner-tags { display: flex; flex-wrap: wrap; gap: 8px; } .partner-tag { padding: 6px 14px; background: rgba(255,255,255,0.05); border-radius: 20px; font-size: 0.8rem; color: rgba(255,255,255,0.6); border: 1px solid rgba(255,255,255,0.08); transition: all 0.3s ease; } .partner-tag:hover { background: var(--gradient-main); color: #fff; border-color: transparent; } @media (max-width: 992px) { .boss-card { grid-template-columns: 1fr; padding: 30px; text-align: center; } .boss-stats { grid-template-columns: repeat(2, 1fr); } .boss-actions { justify-content: center; } .boss-info h2 { font-size: 1.6rem; } } /* MISSIONS (COURSES) */ #missions { background: var(--darker); } .missions-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 25px; } .mission-card { position: relative; background: rgba(255,255,255,0.03); border-radius: 25px; overflow: hidden; border: 1px solid rgba(255,255,255,0.06); transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); text-decoration: none; color: #fff; display: block; } .mission-card:hover { transform: translateY(-10px); border-color: var(--primary); box-shadow: 0 25px 60px rgba(245, 3, 89, 0.25); } .mission-thumb { position: relative; height: 200px; overflow: hidden; } .mission-thumb img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s ease; } .mission-card:hover .mission-thumb img { transform: scale(1.1); } .mission-thumb-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(0deg, rgba(5,5,16,0.8) 0%, transparent 50%); display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity 0.3s ease; } .mission-card:hover .mission-thumb-overlay { opacity: 1; } .play-icon { width: 60px; height: 60px; background: var(--gradient-fire); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; box-shadow: 0 10px 30px rgba(245, 3, 89, 0.5); transform: scale(0.8); transition: transform 0.3s ease; } .mission-card:hover .play-icon { transform: scale(1); } .mission-platform { position: absolute; top: 15px; left: 15px; padding: 6px 14px; border-radius: 20px; font-size: 0.75rem; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; z-index: 2; } .platform-new { background: var(--gradient-fire); color: #fff; animation: newPulse 2s ease-in-out infinite; } .platform-class101 { background: #ff6b6b; color: #fff; } .platform-inflearn { background: #00c471; color: #fff; } @keyframes newPulse { 0%, 100% { box-shadow: 0 0 10px rgba(245,3,89,0.5); } 50% { box-shadow: 0 0 25px rgba(245,3,89,0.8); } } .mission-body { padding: 25px; } .mission-title { font-size: 1.15rem; font-weight: 700; margin-bottom: 8px; line-height: 1.4; } .mission-desc { font-size: 0.9rem; color: rgba(255,255,255,0.5); line-height: 1.5; margin-bottom: 15px; } .mission-cta { display: inline-flex; align-items: center; gap: 8px; font-size: 0.85rem; font-weight: 600; color: var(--primary); transition: gap 0.3s ease; } .mission-card:hover .mission-cta { gap: 14px; } @media (max-width: 992px) { .missions-grid { grid-template-columns: 1fr; max-width: 500px; margin: 0 auto; } } /* POWER-UPS (BOOKS) */ #powerups { background: var(--dark); position: relative; } .powerups-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 30px; } .powerup-card { text-decoration: none; color: #fff; display: block; position: relative; text-align: center; padding: 40px 25px; background: rgba(255,255,255,0.03); border-radius: 25px; border: 1px solid rgba(255,255,255,0.06); transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); overflow: hidden; } .powerup-card::before { content: ; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.05), transparent); transition: left 0.6s ease; } .powerup-card:hover::before { left: 100%; } .powerup-card:hover { transform: translateY(-12px) scale(1.02); border-color: var(--accent-purple); box-shadow: 0 25px 60px rgba(125, 14, 139, 0.3); } .powerup-rarity { position: absolute; top: 15px; right: 15px; font-family: Orbitron, sans-serif; font-size: 0.65rem; font-weight: 700; padding: 5px 12px; border-radius: 20px; letter-spacing: 1px; } .rarity-epic { background: var(--gradient-magic); color: #fff; } .rarity-rare { background: var(--gradient-ocean); color: #fff; } .rarity-legendary { background: var(--gradient-gold); color: #1a1a2e; } .powerup-image { position: relative; display: inline-block; margin-bottom: 20px; } .powerup-image img { max-height: 260px; border-radius: 12px; box-shadow: 0 15px 40px rgba(0,0,0,0.5); transition: transform 0.4s ease; } .powerup-card:hover .powerup-image img { transform: rotateY(8deg) scale(1.05); } .powerup-glow { position: absolute; bottom: -10px; left: 50%; transform: translateX(-50%); width: 80%; height: 40px; background: var(--primary); filter: blur(30px); opacity: 0; transition: opacity 0.4s ease; } .powerup-card:hover .powerup-glow { opacity: 0.4; } .powerup-name { font-size: 1.1rem; font-weight: 700; margin-bottom: 8px; } .powerup-target { font-size: 0.85rem; color: rgba(255,255,255,0.5); margin-bottom: 18px; } .powerup-btn { display: inline-flex; align-items: center; gap: 8px; padding: 10px 24px; background: var(--gradient-magic); color: #fff; border-radius: 50px; font-weight: 600; font-size: 0.85rem; transition: all 0.3s ease; } .powerup-card:hover .powerup-btn { transform: scale(1.05); box-shadow: 0 10px 30px rgba(125, 14, 139, 0.5); } @media (max-width: 992px) { .powerups-grid { grid-template-columns: 1fr; max-width: 400px; margin: 0 auto; } } /* SKILLS (SERVICES) */ #skills { background: var(--darker); } .skills-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } .skill-card { padding: 30px; background: rgba(255,255,255,0.03); border-radius: 20px; border: 1px solid rgba(255,255,255,0.06); transition: all 0.4s ease; position: relative; overflow: hidden; } .skill-card::after { content: ; position: absolute; top: 0; left: 0; width: 4px; height: 0; background: var(--gradient-main); transition: height 0.4s ease; } .skill-card:hover::after { height: 100%; } .skill-card:hover { transform: translateX(5px); border-color: rgba(245, 3, 89, 0.3); background: rgba(255,255,255,0.05); } .skill-icon { width: 50px; height: 50px; border-radius: 15px; display: flex; align-items: center; justify-content: center; font-size: 1.3rem; margin-bottom: 15px; } .skill-icon.fire { background: rgba(245, 3, 89, 0.15); color: var(--primary); } .skill-icon.ocean { background: rgba(0, 229, 255, 0.15); color: var(--accent-cyan); } .skill-icon.magic { background: rgba(125, 14, 139, 0.15); color: var(--accent-purple); } .skill-icon.gold { background: rgba(255, 215, 0, 0.15); color: var(--accent-gold); } .skill-card h3 { font-size: 1.05rem; font-weight: 700; margin-bottom: 10px; } .skill-card p { font-size: 0.88rem; color: rgba(255,255,255,0.5); line-height: 1.6; } @media (max-width: 768px) { .skills-grid { grid-template-columns: 1fr; } } /* ACHIEVEMENTS (PORTFOLIO) */ #achievements { background: var(--dark); } .achieve-filters { display: flex; justify-content: center; gap: 10px; margin-bottom: 40px; flex-wrap: wrap; } .achieve-filter { padding: 10px 24px; border-radius: 50px; border: 1px solid rgba(255,255,255,0.1); background: transparent; color: rgba(255,255,255,0.6); font-size: 0.85rem; font-weight: 600; cursor: pointer; transition: all 0.3s ease; } .achieve-filter:hover, .achieve-filter.active { background: var(--gradient-main); color: #fff; border-color: transparent; } .achieve-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; } .achieve-item { position: relative; border-radius: 20px; overflow: hidden; aspect-ratio: 1; cursor: pointer; transition: all 0.4s ease; } .achieve-item:hover { transform: scale(1.05); z-index: 2; } .achieve-item img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s ease; } .achieve-item:hover img { transform: scale(1.15); } .achieve-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(0deg, rgba(5,5,16,0.95) 0%, rgba(5,5,16,0.3) 50%, transparent 100%); display: flex; flex-direction: column; justify-content: flex-end; padding: 20px; opacity: 0; transition: opacity 0.3s ease; } .achieve-item:hover .achieve-overlay { opacity: 1; } .achieve-overlay h4 { font-size: 0.95rem; font-weight: 700; margin-bottom: 4px; } .achieve-overlay p { font-size: 0.8rem; color: rgba(255,255,255,0.6); } .achieve-overlay .achieve-link { display: inline-flex; align-items: center; gap: 6px; margin-top: 10px; color: var(--primary); font-size: 0.8rem; font-weight: 600; text-decoration: none; } @media (max-width: 992px) { .achieve-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 576px) { .achieve-grid { grid-template-columns: 1fr; } } /* ABOUT ZONE */ #about-zone { background: var(--darker); } .about-layout { display: grid; grid-template-columns: 1fr 1fr; gap: 50px; align-items: center; } .about-image { border-radius: 25px; overflow: hidden; position: relative; } .about-image img { width: 100%; border-radius: 25px; transition: transform 0.5s ease; } .about-image:hover img { transform: scale(1.03); } .about-text h3 { font-family: Orbitron, sans-serif; font-size: 1.6rem; font-weight: 700; margin-bottom: 15px; text-transform: uppercase; } .about-text p { color: rgba(255,255,255,0.7); line-height: 1.8; margin-bottom: 20px; } .about-checklist { list-style: none; padding: 0; } .about-checklist li { display: flex; align-items: center; gap: 12px; padding: 10px 0; color: rgba(255,255,255,0.8); font-size: 0.95rem; } .about-checklist li i { color: var(--accent-cyan); font-size: 1.2rem; } @media (max-width: 768px) { .about-layout { grid-template-columns: 1fr; } } /* CONTACT / JOIN */ #join-team { background: var(--dark); position: relative; } .contact-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 25px; max-width: 900px; margin: 0 auto; } .contact-card { text-align: center; padding: 40px 25px; background: rgba(255,255,255,0.03); border-radius: 20px; border: 1px solid rgba(255,255,255,0.06); transition: all 0.4s ease; text-decoration: none; color: #fff; display: block; } .contact-card:hover { transform: translateY(-8px); border-color: var(--primary); box-shadow: 0 20px 50px rgba(245, 3, 89, 0.2); color: #fff; } .contact-icon { width: 70px; height: 70px; border-radius: 20px; display: flex; align-items: center; justify-content: center; font-size: 1.8rem; margin: 0 auto 20px; transition: transform 0.3s ease; } .contact-card:hover .contact-icon { transform: scale(1.1) rotate(5deg); } .contact-icon.ci-location { background: rgba(0, 229, 255, 0.15); color: var(--accent-cyan); } .contact-icon.ci-email { background: rgba(245, 3, 89, 0.15); color: var(--primary); } .contact-icon.ci-phone { background: rgba(255, 215, 0, 0.15); color: var(--accent-gold); } .contact-card h3 { font-family: Orbitron, sans-serif; font-size: 0.85rem; font-weight: 600; letter-spacing: 1px; margin-bottom: 8px; text-transform: uppercase; } .contact-card p { font-size: 0.95rem; color: rgba(255,255,255,0.6); } @media (max-width: 768px) { .contact-cards { grid-template-columns: 1fr; max-width: 400px; } } /* FOOTER */ #game-footer { background: var(--darker); border-top: 1px solid rgba(255,255,255,0.05); padding: 40px 0; text-align: center; } .footer-content { max-width: 1200px; margin: 0 auto; padding: 0 25px; } .footer-logo { font-family: Orbitron, sans-serif; font-size: 1rem; font-weight: 700; letter-spacing: 2px; background: var(--gradient-main); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; margin-bottom: 10px; } .footer-copy { font-size: 0.8rem; color: rgba(255,255,255,0.3); } /* FLOATING ACTION */ .floating-actions { position: fixed; bottom: 30px; right: 30px; z-index: 999; display: flex; flex-direction: column; gap: 12px; } .float-btn { width: 55px; height: 55px; border-radius: 16px; display: flex; align-items: center; justify-content: center; font-size: 1.3rem; color: #fff; text-decoration: none; transition: all 0.3s ease; box-shadow: 0 8px 25px rgba(0,0,0,0.3); } .float-btn:hover { transform: translateY(-3px) scale(1.08); color: #fff; } .float-btn.fb-phone { background: var(--gradient-ocean); } .float-btn.fb-email { background: var(--gradient-fire); } .float-btn.fb-top { background: rgba(255,255,255,0.1); backdrop-filter: blur(10px); border: 1px solid rgba(255,255,255,0.1); } @media (max-width: 768px) { .floating-actions { bottom: 20px; right: 15px; } .float-btn { width: 48px; height: 48px; font-size: 1.1rem; border-radius: 14px; } .section-title { font-size: 1.8rem; } } /* SCROLL REVEAL */ .reveal { opacity: 0; transform: translateY(40px); transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1); } .reveal.active { opacity: 1; transform: translateY(0); } .reveal-delay-1 { transition-delay: 0.1s; } .reveal-delay-2 { transition-delay: 0.2s; } .reveal-delay-3 { transition-delay: 0.3s; } /* ACHIEVEMENT POPUP */ .achievement-popup { position: fixed; top: 90px; right: 25px; background: rgba(10,10,26,0.95); backdrop-filter: blur(20px); border: 1px solid rgba(255,215,0,0.3); border-radius: 15px; padding: 15px 25px; display: flex; align-items: center; gap: 15px; z-index: 9999; transform: translateX(120%); transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: 0 15px 40px rgba(0,0,0,0.5); } .achievement-popup.show { transform: translateX(0); } .achievement-popup .ap-icon { font-size: 2rem; } .achievement-popup .ap-text h4 { font-family: Orbitron, sans-serif; font-size: 0.7rem; color: var(--accent-gold); letter-spacing: 2px; text-transform: uppercase; } .achievement-popup .ap-text p { font-size: 0.9rem; color: #fff; margin-top: 2px; } /style>/head>body> !-- LOADING SCREEN --> div idloading-screen> img srcassets/img/wgNewlogo.jpg altWGFactory classloading-logo> div classloading-title>WGFactory/div> div classloading-character> div classchar-head> div classchar-eye left>/div> div classchar-eye right>/div> div classchar-smile>/div> /div> div classchar-body>/div> /div> div classloading-bar-container> div classloading-bar idloading-bar>/div> /div> div classloading-text>ENTERING THE WORLD.../div> /div> !-- HUD NAVIGATION --> div idgame-hud> a href#hero-world classhud-logo> img srcassets/img/wgNewlogo.jpg altWGFactory> span classhud-logo-text>WGFactory/span> /a> nav classhud-nav idhud-nav> a href#hero-world classactive>Home/a> a href#educator-boss>공장장/a> a href#missions>강의/a> a href#powerups>도서/a> a href#skills>Services/a> a href#achievements>Portfolio/a> a href#join-team>Contact/a> /nav> div classhud-score> div classhud-badge> span classstar>★/span> span idhud-score-num>0/span> /div> button classmobile-menu-btn idmobile-menu-btn> i classbi bi-list>/i> /button> /div> /div> !-- HERO / 3D WORLD --> section idhero-world> canvas idthree-canvas>/canvas> div classhero-overlay>/div> div classhero-content> h1 classhero-main-title> span classline1>와글와글팩토리/span> span classline2>Koreas #1 Roblox Educator/span> /h1> p classhero-subtitle-text> 2015년부터 국내 최초 ROBLOX Featured Educator로 활동.br> 메타버스 시대를 이끄는 크리에이터 교육의 선두주자. /p> div classhero-actions> a href#educator-boss classbtn-game primary> i classbi bi-person-fill>/i> 공장장 소개 /a> a href#missions classbtn-game secondary> i classbi bi-play-circle-fill>/i> 강의 보기 /a> /div> /div> div classhero-hint> i classbi bi-chevron-double-down stylefont-size:1.5rem;>/i> span>Scroll to Explore/span> /div> /section> !-- EDUCATOR / BOSS --> section ideducator-boss classgame-section> div classbg-pattern>/div> div classglow-orb stylewidth:400px;height:400px;background:var(--primary);top:-100px;right:-100px;>/div> div classglow-orb stylewidth:300px;height:300px;background:var(--accent-purple);bottom:-50px;left:-50px;>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-fire>FEATURED EDUCATOR/span> h2 classsection-title>Meet The Boss/h2> p classsection-desc>한국 로블록스 교육의 전설, 서종원 공장장을 소개합니다/p> /div> div classboss-card reveal> div classboss-photo-area> div classboss-photo-frame> div classboss-photo-ring>/div> img srcassets/img/Jongwon.png alt서종원 공장장 classboss-photo> span classboss-level-badge>LV.MAX/span> /div> /div> div classboss-info> h2>서종원 공장장/h2> div classboss-role>Koreas First ROBLOX Featured Educator/div> p classboss-desc> 2015년부터 strong stylecolor:var(--primary);>국내 최초 ROBLOX Featured Educator/strong>로 인증받아 활동하고 있습니다. 서울대, 매일경제, 구로문화재단, 울산이노베이션 등 strong stylecolor:var(--accent-gold);>수백 곳의 기관/strong>에서 로블록스 크리에이터 교육을 진행했으며, 학생들이 자신만의 메타버스 공간을 기획하고 제작할 수 있도록 strong stylecolor:var(--accent-cyan);>추진력 있는 기획가/strong>로 성장시키는 것이 목표입니다. /p> div classboss-stats> div classboss-stat> div classboss-stat-num>2015/div> div classboss-stat-label>활동 시작/div> /div> div classboss-stat> div classboss-stat-num>100+/div> div classboss-stat-label>교육 기관/div> /div> div classboss-stat> div classboss-stat-num>3+/div> div classboss-stat-label>출판 서적/div> /div> div classboss-stat> div classboss-stat-num>1K+/div> div classboss-stat-label>수강생/div> /div> /div> div classboss-actions> a hreftel:010-6616-4545 classbtn-game primary> i classbi bi-telephone-fill>/i> 전화 상담 /a> a hrefmailto:3dkids4u@gmail.com classbtn-game secondary> i classbi bi-envelope-fill>/i> 이메일 문의 /a> /div> div classboss-partners> h4>주요 협력 기관/h4> div classpartner-tags> span classpartner-tag>서울대학교/span> span classpartner-tag>매일경제/span> span classpartner-tag>구로문화재단/span> span classpartner-tag>울산이노베이션/span> span classpartner-tag>서울시교육청/span> span classpartner-tag>한국원자력환경공단/span> span classpartner-tag>Class101/span> span classpartner-tag>인프런/span> /div> /div> /div> /div> /div> /section> !-- MISSIONS (COURSES) --> section idmissions classgame-section> div classbg-pattern>/div> div classglow-orb stylewidth:350px;height:350px;background:var(--accent-cyan);top:10%;left:-80px;>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-ocean>ONLINE MISSIONS/span> h2 classsection-title>온라인 강의/h2> p classsection-desc>언제 어디서나 시작할 수 있는 로블록스 크리에이터 퀘스트/p> /div> div classmissions-grid> a hrefhttps://inf.run/PoECd target_blank classmission-card reveal reveal-delay-1> div classmission-thumb> img srcassets/img/portfolio/RpbloxOnline_3.png alt인프런 로블록스 강좌> span classmission-platform platform-new>NEW!/span> div classmission-thumb-overlay> div classplay-icon>i classbi bi-play-fill>/i>/div> /div> /div> div classmission-body> h3 classmission-title>로블록스 게임 개발 완전정복/h3> p classmission-desc>초보자도 쉽게 따라할 수 있는 로블록스 게임 개발 입문 강좌/p> span classmission-cta> 강의 시작하기 i classbi bi-arrow-right>/i> /span> /div> /a> a hrefhttps://class101.net/ko/products/629821b6466a4a00153bf9cd target_blank classmission-card reveal reveal-delay-2> div classmission-thumb> img srcassets/img/portfolio/RobloxOnline_1.png alt클래스101 로블록스 코딩 입문> span classmission-platform platform-class101>Class101/span> div classmission-thumb-overlay> div classplay-icon>i classbi bi-play-fill>/i>/div> /div> /div> div classmission-body> h3 classmission-title>로블록스 코딩 입문 바이블/h3> p classmission-desc>로블록스의 기초부터 코딩까지 체계적으로 배우는 입문 강좌/p> span classmission-cta> 강의 시작하기 i classbi bi-arrow-right>/i> /span> /div> /a> a hrefhttps://class101.net/ko/products/611cffff5f788b000ddc193c target_blank classmission-card reveal reveal-delay-3> div classmission-thumb> img srcassets/img/portfolio/RobloxOnline_2.png alt클래스101 천공의 섬> span classmission-platform platform-class101>Class101/span> div classmission-thumb-overlay> div classplay-icon>i classbi bi-play-fill>/i>/div> /div> /div> div classmission-body> h3 classmission-title>천공의 섬 메타버스 만들기/h3> p classmission-desc>나만의 메타버스 세계를 만들면서 로블록스 코딩을 배워요/p> span classmission-cta> 강의 시작하기 i classbi bi-arrow-right>/i> /span> /div> /a> /div> /div> /section> !-- POWER-UPS (BOOKS) --> section idpowerups classgame-section> div classbg-pattern>/div> div classglow-orb stylewidth:400px;height:400px;background:var(--accent-purple);bottom:-100px;right:-100px;>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-magic>POWER-UPS/span> h2 classsection-title>출판 도서/h2> p classsection-desc>레벨업을 위한 필수 아이템! 체계적인 로블록스 학습 서적/p> /div> div classpowerups-grid> a hrefhttps://www.yes24.com/Product/Goods/101924438 target_blank classpowerup-card reveal reveal-delay-1> span classpowerup-rarity rarity-epic>EPIC/span> div classpowerup-image> img srcassets/img/portfolio/book1.jpg alt로블록스 게임제작 무작정 따라하기> div classpowerup-glow>/div> /div> h3 classpowerup-name>로블록스 게임제작br>무작정 따라하기/h3> p classpowerup-target>대상: 초등학교 고학년 이상/p> span classpowerup-btn> i classbi bi-cart-fill>/i> 바로 구매하기 /span> /a> a hrefhttps://www.yes24.com/Product/Goods/108907780 target_blank classpowerup-card reveal reveal-delay-2> span classpowerup-rarity rarity-rare>RARE/span> div classpowerup-image> img srcassets/img/portfolio/book2.png alt점프앤런타워 게임만들기> div classpowerup-glow>/div> /div> h3 classpowerup-name>점프앤런타워br>게임만들기/h3> p classpowerup-target>대상: 초등학생 이상/p> span classpowerup-btn> i classbi bi-cart-fill>/i> 바로 구매하기 /span> /a> a hrefhttps://product.kyobobook.co.kr/detail/S000212903240 target_blank classpowerup-card reveal reveal-delay-3> span classpowerup-rarity rarity-legendary>LEGENDARY/span> div classpowerup-image> img srcassets/img/portfolio/book3.png alt로블록스 최신 교재> div classpowerup-glow>/div> /div> h3 classpowerup-name>NEW! 로블록스br>최신 교재/h3> p classpowerup-target>대상: 초등학생 이상/p> span classpowerup-btn> i classbi bi-cart-fill>/i> 바로 구매하기 /span> /a> /div> /div> /section> !-- ABOUT ZONE --> section idabout-zone classgame-section> div classbg-pattern>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-gold>ABOUT/span> h2 classsection-title>About Us/h2> /div> div classabout-layout reveal> div classabout-image> img srcassets/img/card-4.png alt와글와글팩토리> /div> div classabout-text> h3>각 개인의 관심 주제에서 시작합니다/h3> p>저희의 교육 목표는 추진력 있는 멋진 기획가 양성입니다./p> ul classabout-checklist> li>i classbi bi-check-circle-fill>/i> 참여자 개인의 관심 주제 찾기/li> li>i classbi bi-check-circle-fill>/i> 주제에 맞는 기술 탐구/li> li>i classbi bi-check-circle-fill>/i> 공간 기획 및 제작 진행/li> /ul> p> 하나의 3D 콘텐츠 공간을 만들기 위해서는 수학, 과학, 프로그래밍, 디자인(2D,3D), 음악, 스토리 등 많은 분야의 지식이 연결되어 탄생하게 됩니다. /p> /div> /div> /div> /section> !-- SKILLS (SERVICES) --> section idskills classgame-section> div classbg-pattern>/div> div classglow-orb stylewidth:300px;height:300px;background:var(--accent-gold);top:20%;right:-80px;>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-gold>SKILL TREE/span> h2 classsection-title>Services/h2> p classsection-desc>와글와글팩토리가 제공하는 다양한 서비스/p> /div> div classskills-grid> div classskill-card reveal reveal-delay-1> div classskill-icon fire>i classbi bi-controller>/i>/div> h3>로블록스 크리에이터 교육/h3> p>2015년부터 국내 최초 ROBLOX Featured Educator로 활동! 서울대, 매일경제, 구로문화재단 등 다양한 워크샵 진행/p> /div> div classskill-card reveal reveal-delay-2> div classskill-icon ocean>i classbi bi-cpu>/i>/div> h3>A.I. 메이커 교육/h3> p>인공지능을 활용한 메이커 교육 - ChatGPT, Stable Diffusion, IoT 플랫폼, 오픈하드웨어 연동 등/p> /div> div classskill-card reveal reveal-delay-3> div classskill-icon magic>i classbi bi-play-circle>/i>/div> h3>온라인 강의/h3> p>클래스101, 인프런 온라인 강의 플랫폼에 로블록스 교육 콘텐츠 운영/p> /div> div classskill-card reveal reveal-delay-1> div classskill-icon gold>i classbi bi-book>/i>/div> h3>책 출판/h3> p>로블록스 교육 책 출판 - 로블록스 게임 무작정 따라하기, 점프앤런타워 게임만들기 외/p> /div> div classskill-card reveal reveal-delay-2> div classskill-icon fire>i classbi bi-box>/i>/div> h3>로블록스 체험 제작/h3> p>로블록스 체험, 게임 제작 서비스/p> /div> div classskill-card reveal reveal-delay-3> div classskill-icon ocean>i classbi bi-building>/i>/div> h3>공공기관 체험 공간 제작/h3> p>한국 원자력 환경 공단 체험 공간, 서울시 교육부 관련 체험 공간 제작 등/p> /div> /div> /div> /section> !-- ACHIEVEMENTS (PORTFOLIO) --> section idachievements classgame-section> div classbg-pattern>/div> div classglow-orb stylewidth:350px;height:350px;background:var(--primary);top:30%;left:-100px;>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-fire>ACHIEVEMENTS/span> h2 classsection-title>Portfolio/h2> p classsection-desc>다양한 외부 기관과 협업 프로젝트, 출판, 공간 제작/p> /div> div classachieve-filters reveal> button classachieve-filter active data-filterall>All/button> button classachieve-filter data-filteredu>교육/button> button classachieve-filter data-filterbook>출판/button> button classachieve-filter data-filterspace>공간제작/button> /div> div classachieve-grid idachieve-grid> div classachieve-item reveal data-catedu> img srcassets/img/portfolio/RpbloxOnline_3.png alt인프런 강좌> div classachieve-overlay> h4>인프런 강좌/h4> p>로블록스 게임 개발 완전정복/p> a hrefhttps://inf.run/PoECd target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catedu> img srcassets/img/portfolio/RobloxOnline_1.png alt클래스101 강좌> div classachieve-overlay> h4>클래스101 강좌/h4> p>로블록스 코딩 입문 바이블/p> a hrefhttps://class101.net/ko/products/629821b6466a4a00153bf9cd target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catspace> img srcassets/img/portfolio/porfolio-edu1.png alt로블록스 체험 공간> div classachieve-overlay> h4>로블록스 체험 공간 제작/h4> p>서울시 교육청 교복입은 예술가/p> a hrefhttps://www.roblox.com/games/7956185310 target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catedu> img srcassets/img/portfolio/RobloxOnline_2.png alt클래스101 강좌> div classachieve-overlay> h4>클래스101 강좌/h4> p>천공의 섬 메타버스 만들기/p> a hrefhttps://class101.net/ko/products/611cffff5f788b000ddc193c target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catbook> img srcassets/img/portfolio/book1.jpg alt로블록스 게임제작 무작정 따라하기> div classachieve-overlay> h4>로블록스게임제작 무작정 따라하기/h4> p>대상: 초고 이상/p> a hrefhttps://www.yes24.com/Product/Goods/101924438 target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catspace> img srcassets/img/portfolio/portfolio-makezone2.png alt한국원자력환경공단> div classachieve-overlay> h4>로블록스 체험 공간 제작/h4> p>한국원자력환경공단/p> a hrefhttps://www.roblox.com/games/7496042719/unnamed target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catbook> img srcassets/img/portfolio/book2.png alt점프앤런타워 게임만들기> div classachieve-overlay> h4>점프앤런타워 게임만들기/h4> p>대상: 초등학생 이상/p> a hrefhttps://www.yes24.com/Product/Goods/108907780 target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> div classachieve-item reveal data-catbook> img srcassets/img/portfolio/book3.png alt로블록스 신간> div classachieve-overlay> h4>NEW! 로블록스 최신 교재/h4> p>대상: 초등학생 이상/p> a hrefhttps://product.kyobobook.co.kr/detail/S000212903240 target_blank classachieve-link> 자세히 보기 i classbi bi-arrow-right>/i> /a> /div> /div> /div> /div> /section> !-- CONTACT / JOIN TEAM --> section idjoin-team classgame-section> div classbg-pattern>/div> div classglow-orb stylewidth:300px;height:300px;background:var(--accent-cyan);bottom:0;left:50%;transform:translateX(-50%);>/div> div classsection-container> div classsection-header reveal> span classsection-tag tag-ocean>JOIN THE TEAM/span> h2 classsection-title>Contact/h2> p classsection-desc>크리에이터 교육 및 협업을 위한 연락은 아래로 해주세요/p> /div> div classcontact-cards reveal> div classcontact-card> div classcontact-icon ci-location>i classbi bi-geo-alt-fill>/i>/div> h3>Location/h3> p>경기도 수원시 영통구br>광교로 156/p> /div> a hrefmailto:3dkids4u@gmail.com classcontact-card> div classcontact-icon ci-email>i classbi bi-envelope-fill>/i>/div> h3>Email/h3> p>3dkids4u@gmail.com/p> /a> a hreftel:010-6616-4545 classcontact-card> div classcontact-icon ci-phone>i classbi bi-telephone-fill>/i>/div> h3>Phone/h3> p>010-6616-4545/p> /a> /div> /div> /section> !-- FOOTER --> footer idgame-footer> div classfooter-content> div classfooter-logo>WGFACTORY/div> p classfooter-copy> © 2025 와글와글팩토리 (wgfactory). All Rights Reserved. | Designed by 서종원 공장장 /p> /div> /footer> !-- FLOATING ACTIONS --> div classfloating-actions> a hreftel:010-6616-4545 classfloat-btn fb-phone title전화 상담> i classbi bi-telephone-fill>/i> /a> a hrefmailto:3dkids4u@gmail.com classfloat-btn fb-email title이메일 문의> i classbi bi-envelope-fill>/i> /a> a href#hero-world classfloat-btn fb-top title맨 위로> i classbi bi-arrow-up>/i> /a> /div> !-- ACHIEVEMENT POPUP --> div classachievement-popup idachievement-popup> div classap-icon idap-icon>/div> div classap-text> h4>Achievement Unlocked/h4> p idap-message>/p> /div> /div> !-- SCRIPTS --> script> // SOUND MANAGER const SFX { coinCollect: new Audio(assets/sounds/sound1.mp3), // 3D coin/block click gemCollect: new Audio(assets/sounds/sound2.mp3), // 3D gem/star click achievement: new Audio(assets/sounds/sound3.mp3), // Achievement popup cardHover: new Audio(assets/sounds/sound4.mp3), // Card hover buttonClick: new Audio(assets/sounds/sound5.mp3), // Button/nav click sectionEnter: new Audio(assets/sounds/sound6.mp3), // New section scroll loadingDone: new Audio(assets/sounds/sound7.mp3), // Loading complete _enabled: false, _initialized: false, init() { if (this._initialized) return; this._initialized true; // Set volumes Object.keys(this).forEach(key > { if (thiskey instanceof Audio) { thiskey.volume 0.3; thiskey.load(); } }); this.cardHover.volume 0.15; this.sectionEnter.volume 0.2; this._enabled true; }, play(name) { if (!this._enabled || !thisname) return; const sound thisname; sound.currentTime 0; sound.play().catch(() > {}); } }; // Enable sound on first user interaction document.addEventListener(click, () > SFX.init(), { once: true }); document.addEventListener(touchstart, () > SFX.init(), { once: true }); // Sound toggle button (added to HUD) (function() { const btn document.createElement(button); btn.id sound-toggle; btn.innerHTML i classbi bi-volume-up-fill>/i>; btn.style.cssText background:rgba(255,255,255,0.1);border:1px solid rgba(255,255,255,0.2);color:#fff;font-size:1.1rem;padding:8px 12px;border-radius:12px;cursor:pointer;backdrop-filter:blur(10px);transition:all 0.3s ease;; btn.addEventListener(click, (e) > { e.stopPropagation(); SFX.init(); SFX._enabled !SFX._enabled; btn.innerHTML SFX._enabled ? i classbi bi-volume-up-fill>/i> : i classbi bi-volume-mute-fill>/i>; btn.style.borderColor SFX._enabled ? rgba(255,215,0,0.5) : rgba(255,255,255,0.2); SFX.play(buttonClick); }); document.querySelector(.hud-score).prepend(btn); })(); // LOADING SCREEN (function() { const bar document.getElementById(loading-bar); let progress 0; const interval setInterval(() > { progress + Math.random() * 15 + 5; if (progress > 100) { progress 100; clearInterval(interval); setTimeout(() > { document.getElementById(loading-screen).classList.add(hidden); SFX.play(loadingDone); }, 500); } bar.style.width progress + %; }, 200); })(); // MOBILE MENU document.getElementById(mobile-menu-btn).addEventListener(click, () > { document.getElementById(hud-nav).classList.toggle(mobile-open); SFX.play(buttonClick); }); // Close mobile menu on link click document.querySelectorAll(.hud-nav a).forEach(link > { link.addEventListener(click, () > { document.getElementById(hud-nav).classList.remove(mobile-open); SFX.play(buttonClick); }); }); // SMOOTH SCROLL document.querySelectorAll(ahref^#).forEach(anchor > { anchor.addEventListener(click, function(e) { e.preventDefault(); SFX.play(buttonClick); const target document.querySelector(this.getAttribute(href)); if (target) { target.scrollIntoView({ behavior: smooth, block: start }); } }); }); // ACTIVE NAV TRACKING const sections document.querySelectorAll(.game-section, #hero-world); const navLinks document.querySelectorAll(.hud-nav a); window.addEventListener(scroll, () > { let current ; sections.forEach(section > { const top section.offsetTop - 100; if (window.scrollY > top) { current section.getAttribute(id); } }); navLinks.forEach(link > { link.classList.remove(active); if (link.getAttribute(href) # + current) { link.classList.add(active); } }); }); // SCROLL REVEAL const revealElements document.querySelectorAll(.reveal); const revealObserver new IntersectionObserver((entries) > { entries.forEach(entry > { if (entry.isIntersecting) { entry.target.classList.add(active); } }); }, { threshold: 0.1 }); revealElements.forEach(el > revealObserver.observe(el)); // PORTFOLIO FILTER const filterBtns document.querySelectorAll(.achieve-filter); const achieveItems document.querySelectorAll(.achieve-item); filterBtns.forEach(btn > { btn.addEventListener(click, () > { filterBtns.forEach(b > b.classList.remove(active)); btn.classList.add(active); const filter btn.dataset.filter; achieveItems.forEach(item > { if (filter all || item.dataset.cat filter) { item.style.display ; item.style.opacity 1; item.style.transform scale(1); } else { item.style.opacity 0; item.style.transform scale(0.8); setTimeout(() > { item.style.display none; }, 300); } }); }); }); // SCORE & ACHIEVEMENTS let gameScore 0; const scoreEl document.getElementById(hud-score-num); const popup document.getElementById(achievement-popup); const popupIcon document.getElementById(ap-icon); const popupMsg document.getElementById(ap-message); const achievements {}; function addScore(points) { gameScore + points; scoreEl.textContent gameScore; scoreEl.style.transform scale(1.3); setTimeout(() > { scoreEl.style.transform scale(1); }, 200); if (points > 50) SFX.play(achievement); } function showAchievement(icon, message) { if (achievementsmessage) return; achievementsmessage true; popupIcon.textContent icon; popupMsg.textContent message; popup.classList.add(show); addScore(50); setTimeout(() > { popup.classList.remove(show); }, 3000); } // Section visit achievements const achievementMap { educator-boss: 🏆, 공장장을 만났습니다!, missions: 🎮, 미션 목록을 확인했습니다!, powerups: 📚, 파워업 아이템을 발견했습니다!, skills: ⚙, 스킬 트리를 열었습니다!, achievements: 🏅, 업적 갤러리에 입장했습니다!, join-team: 📨, 연락처를 획득했습니다! }; const achieveObserver new IntersectionObserver((entries) > { entries.forEach(entry > { if (entry.isIntersecting) { const id entry.target.id; if (achievementMapid) { const icon, msg achievementMapid; // Use innerHTML for the icon since its an HTML entity setTimeout(() > { popupIcon.innerHTML icon; popupMsg.textContent msg; if (!achievementsmsg) { achievementsmsg true; popup.classList.add(show); SFX.play(sectionEnter); addScore(50); setTimeout(() > { popup.classList.remove(show); }, 3000); } }, 500); } } }); }, { threshold: 0.3 }); document.querySelectorAll(.game-section).forEach(s > achieveObserver.observe(s)); // Click & hover sounds on cards document.querySelectorAll(.mission-card, .powerup-card, .achieve-item, .skill-card, .contact-card, .boss-stat).forEach(card > { card.addEventListener(mouseenter, () > SFX.play(cardHover)); card.addEventListener(click, () > { SFX.play(buttonClick); addScore(10); }); }); // Hover sounds on buttons document.querySelectorAll(.btn-game, .float-btn, .achieve-filter, .partner-tag).forEach(btn > { btn.addEventListener(mouseenter, () > SFX.play(cardHover)); }); // THREE.JS 3D WORLD (function() { const canvas document.getElementById(three-canvas); if (!canvas) return; const scene new THREE.Scene(); scene.fog new THREE.FogExp2(0x050510, 0.035); const camera new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer new THREE.WebGLRenderer({ canvas, alpha: true, antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)); const objects ; const colors 0xf50359, 0x1c228c, 0xff4000, 0x7d0e8b, 0x00e5ff, 0xffd700, 0x10b981, 0xf472b6; // Ground grid const gridHelper new THREE.GridHelper(40, 40, 0x1c228c, 0x0a0a2e); gridHelper.position.y -5; scene.add(gridHelper); // Ambient particles const pCount 600; const pGeo new THREE.BufferGeometry(); const pPos new Float32Array(pCount * 3); const pCol new Float32Array(pCount * 3); for (let i 0; i pCount; i++) { pPosi*3 (Math.random()-0.5) * 40; pPosi*3+1 (Math.random()-0.5) * 30; pPosi*3+2 (Math.random()-0.5) * 40; const c new THREE.Color(colorsMath.floor(Math.random()*colors.length)); pColi*3 c.r; pColi*3+1 c.g; pColi*3+2 c.b; } pGeo.setAttribute(position, new THREE.BufferAttribute(pPos, 3)); pGeo.setAttribute(color, new THREE.BufferAttribute(pCol, 3)); const pMat new THREE.PointsMaterial({ size: 0.08, vertexColors: true, transparent: true, opacity: 0.8 }); const particles new THREE.Points(pGeo, pMat); scene.add(particles); // Roblox character function makeCharacter(x, y, z, color) { const g new THREE.Group(); const head new THREE.Mesh(new THREE.BoxGeometry(0.5,0.5,0.5), new THREE.MeshBasicMaterial({color:0xffcc99})); head.position.y 0.85; g.add(head); // Eyes const eyeMat new THREE.MeshBasicMaterial({color:0x333333}); const lEye new THREE.Mesh(new THREE.BoxGeometry(0.08,0.1,0.05), eyeMat); lEye.position.set(-0.12, 0.9, 0.26); g.add(lEye); const rEye new THREE.Mesh(new THREE.BoxGeometry(0.08,0.1,0.05), eyeMat); rEye.position.set(0.12, 0.9, 0.26); g.add(rEye); // Smile const smile new THREE.Mesh(new THREE.BoxGeometry(0.2,0.04,0.05), new THREE.MeshBasicMaterial({color:0x333333})); smile.position.set(0, 0.73, 0.26); g.add(smile); const body new THREE.Mesh(new THREE.BoxGeometry(0.6,0.7,0.35), new THREE.MeshBasicMaterial({color})); body.position.y 0.25; g.add(body); const armGeo new THREE.BoxGeometry(0.18,0.55,0.18); const armMat new THREE.MeshBasicMaterial({color}); const lArm new THREE.Mesh(armGeo, armMat); lArm.position.set(-0.42,0.25,0); const rArm new THREE.Mesh(armGeo, armMat); rArm.position.set(0.42,0.25,0); g.add(lArm, rArm); const legGeo new THREE.BoxGeometry(0.2,0.55,0.2); const legMat new THREE.MeshBasicMaterial({color:0x222244}); const lLeg new THREE.Mesh(legGeo, legMat); lLeg.position.set(-0.15,-0.4,0); const rLeg new THREE.Mesh(legGeo, legMat); rLeg.position.set(0.15,-0.4,0); g.add(lLeg, rLeg); g.position.set(x,y,z); g.userData { type:char, rSpeed:{x:0,y:(Math.random()-0.5)*0.02}, fSpeed:Math.random()*0.4+0.3, fOff:Math.random()*Math.PI*2, oY:y, lArm, rArm, lLeg, rLeg }; return g; } // Coin function makeCoin(x,y,z) { const g new THREE.Group(); const ring new THREE.Mesh(new THREE.TorusGeometry(0.25,0.06,16,32), new THREE.MeshBasicMaterial({color:0xffd700})); g.add(ring); const center new THREE.Mesh(new THREE.CircleGeometry(0.15,32), new THREE.MeshBasicMaterial({color:0xffa500,side:THREE.DoubleSide})); g.add(center); g.position.set(x,y,z); g.userData {type:coin,rSpeed:{x:0,y:0.05},fSpeed:Math.random()*0.8+0.5,fOff:Math.random()*Math.PI*2,oY:y}; return g; } // Gem function makeGem(x,y,z,color) { const g new THREE.Group(); const mat new THREE.MeshBasicMaterial({color,transparent:true,opacity:0.8}); const top new THREE.Mesh(new THREE.ConeGeometry(0.18,0.3,6), mat); top.position.y 0.05; g.add(top); const bot new THREE.Mesh(new THREE.ConeGeometry(0.18,0.18,6), mat); bot.rotation.x Math.PI; bot.position.y -0.12; g.add(bot); g.position.set(x,y,z); g.userData {type:gem,rSpeed:{x:0,y:0.04},fSpeed:Math.random()*0.6+0.4,fOff:Math.random()*Math.PI*2,oY:y}; return g; } // Neon ring function makeRing(x,y,z,color,size) { const ring new THREE.Mesh( new THREE.TorusGeometry(size, 0.03, 8, 64), new THREE.MeshBasicMaterial({color, transparent:true, opacity:0.6}) ); ring.position.set(x,y,z); ring.userData {type:ring,rSpeed:{x:0.02,y:0.01,z:0.015},fSpeed:Math.random()*0.3+0.2,fOff:Math.random()*Math.PI*2,oY:y}; return ring; } // Floating block function makeBlock(x,y,z) { const size Math.random()*0.5+0.2; const geo new THREE.BoxGeometry(size,size,size); const mat new THREE.MeshBasicMaterial({ color: colorsMath.floor(Math.random()*colors.length), transparent:true, opacity:0.6 }); const m new THREE.Mesh(geo, mat); m.position.set(x,y,z); m.rotation.set(Math.random()*Math.PI, Math.random()*Math.PI, 0); m.userData {type:block,rSpeed:{x:(Math.random()-0.5)*0.015,y:(Math.random()-0.5)*0.015},fSpeed:Math.random()*0.5+0.3,fOff:Math.random()*Math.PI*2,oY:y}; return m; } // Star function makeStar(x,y,z) { const shape new THREE.Shape(); const or 0.25, ir 0.1, sp 5; for (let i0; isp*2; i++) { const r i%20 ? or : ir; const a (i*Math.PI)/sp - Math.PI/2; i0 ? shape.moveTo(Math.cos(a)*r, Math.sin(a)*r) : shape.lineTo(Math.cos(a)*r, Math.sin(a)*r); } shape.closePath(); const m new THREE.Mesh(new THREE.ShapeGeometry(shape), new THREE.MeshBasicMaterial({color:0xffd700,side:THREE.DoubleSide})); m.position.set(x,y,z); m.userData {type:star,rSpeed:{x:0,y:0.03,z:0.02},fSpeed:Math.random()*0.5+0.3,fOff:Math.random()*Math.PI*2,oY:y,pulse:Math.random()*Math.PI*2}; return m; } // Populate scene for (let i0;i35;i++) { const b makeBlock((Math.random()-0.5)*20,(Math.random()-0.5)*16,(Math.random()-0.5)*16-5); scene.add(b); objects.push(b); } const charColors 0xf50359, 0x00e5ff, 0xffd700, 0x7d0e8b, 0x10b981; for (let i0;i6;i++) { const c makeCharacter((Math.random()-0.5)*14,(Math.random()-0.5)*8,(Math.random()-0.5)*10-4, charColorsi%charColors.length); scene.add(c); objects.push(c); } for (let i0;i10;i++) { const c makeCoin((Math.random()-0.5)*18,(Math.random()-0.5)*14,(Math.random()-0.5)*14-3); scene.add(c); objects.push(c); } const gemColors 0x00ff88, 0xff00ff, 0x00e5ff, 0xf50359; for (let i0;i8;i++) { const g makeGem((Math.random()-0.5)*16,(Math.random()-0.5)*12,(Math.random()-0.5)*12-4, gemColorsi%gemColors.length); scene.add(g); objects.push(g); } for (let i0;i6;i++) { const s makeStar((Math.random()-0.5)*18,(Math.random()-0.5)*14,(Math.random()-0.5)*12-4); scene.add(s); objects.push(s); } const ringColors 0xf50359, 0x00e5ff, 0xffd700, 0x7d0e8b; for (let i0;i5;i++) { const r makeRing((Math.random()-0.5)*14,(Math.random()-0.5)*10,(Math.random()-0.5)*10-5, ringColorsi%ringColors.length, Math.random()*0.5+0.3); scene.add(r); objects.push(r); } camera.position.z 7; let mouseX0, mouseY0, tMouseX0, tMouseY0; document.addEventListener(mousemove, e > { tMouseX (e.clientX/window.innerWidth)*2-1; tMouseY -(e.clientY/window.innerHeight)*2+1; }); // Click interaction const raycaster new THREE.Raycaster(); const mouseVec new THREE.Vector2(); canvas.addEventListener(click, e > { mouseVec.x (e.clientX/window.innerWidth)*2-1; mouseVec.y -(e.clientY/window.innerHeight)*2+1; raycaster.setFromCamera(mouseVec, camera); const hits raycaster.intersectObjects(objects, true); if (hits.length > 0) { let obj hits0.object; while (obj.parent && !obj.userData.type) obj obj.parent; if (obj.userData.type) { let pts 0; switch(obj.userData.type) { case coin: pts10; SFX.play(coinCollect); break; case gem: pts25; SFX.play(gemCollect); break; case star: pts50; SFX.play(gemCollect); break; default: pts5; SFX.play(coinCollect); } addScore(pts); // Sparkle for (let i0;i8;i++) { const sp new THREE.Mesh( new THREE.SphereGeometry(0.04,6,6), new THREE.MeshBasicMaterial({color:0xffd700,transparent:true}) ); sp.position.copy(obj.position); sp.userData { vel: new THREE.Vector3((Math.random()-0.5)*0.12, Math.random()*0.12, (Math.random()-0.5)*0.12), life: 1 }; scene.add(sp); const animSp () > { sp.position.add(sp.userData.vel); sp.userData.vel.y - 0.002; sp.userData.life - 0.025; sp.material.opacity sp.userData.life; sp.scale.multiplyScalar(0.97); if (sp.userData.life > 0) requestAnimationFrame(animSp); else scene.remove(sp); }; animSp(); } const origSpeed obj.userData.rSpeed.y; obj.userData.rSpeed.y 0.3; setTimeout(() > { obj.userData.rSpeed.y origSpeed; }, 500); } } }); let t 0; function animate() { requestAnimationFrame(animate); t + 0.01; mouseX + (tMouseX - mouseX) * 0.05; mouseY + (tMouseY - mouseY) * 0.05; objects.forEach(obj > { obj.rotation.x + obj.userData.rSpeed.x; obj.rotation.y + obj.userData.rSpeed.y; if (obj.userData.rSpeed.z) obj.rotation.z + obj.userData.rSpeed.z; obj.position.y obj.userData.oY + Math.sin(t * obj.userData.fSpeed + obj.userData.fOff) * 0.4; if (obj.userData.type char) { const {lArm,rArm,lLeg,rLeg} obj.userData; if (lArm) lArm.rotation.x Math.sin(t*3)*0.5; if (rArm) rArm.rotation.x Math.sin(t*3+Math.PI)*0.5; if (lLeg) lLeg.rotation.x Math.sin(t*4)*0.3; if (rLeg) rLeg.rotation.x Math.sin(t*4+Math.PI)*0.3; } if (obj.userData.type coin) { const s 1 + Math.sin(t*3+obj.userData.fOff)*0.1; obj.scale.set(s,s,s); } if (obj.userData.type star && obj.userData.pulse ! undefined) { const p 1 + Math.sin(t*4+obj.userData.pulse)*0.2; obj.scale.set(p,p,p); } }); particles.rotation.y + 0.0008; particles.rotation.x + 0.0003; gridHelper.position.z (t * 0.5) % 1; camera.position.x + (mouseX * 2 - camera.position.x) * 0.03; camera.position.y + (mouseY * 1.5 - camera.position.y) * 0.03; camera.lookAt(scene.position); renderer.render(scene, camera); } animate(); window.addEventListener(resize, () > { camera.aspect window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); }); })(); /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]