Files
anvil-hosting/index.html
kappa 241718d774 Improve Lighthouse Performance: 55 → 95
- Switch from Pretendard web font to system fonts
- Remove 2.3MB of Pretendard font files
- Add WebP image format for n8n workflow
- Update CSP to remove CDN font dependencies
- Add critical CSS inline, dns-prefetch, image optimization

Metrics improvement:
- FCP: 13.4s → 2.0s
- LCP: 14.1s → 2.6s
- Performance: 55 → 95

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 00:32:53 +09:00

970 lines
60 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="ko" class="scroll-smooth">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://cdn.jsdelivr.net 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data:; connect-src 'self';">
<title>Anvil Hosting - 개발자를 위한 컨테이너 클라우드</title>
<!-- SEO Meta Tags -->
<meta name="description" content="Incus/LXD 기반 초경량 컨테이너 호스팅. VM 오버헤드 없이 네이티브 성능을 제공하며, n8n, Ansible 자동화 파이프라인과 즉시 연동됩니다. 도쿄, 서울, 싱가포르, 홍콩 리전 지원.">
<meta name="keywords" content="컨테이너 호스팅, LXD, Incus, 클라우드 서버, VPS, 도쿄 서버, 서울 서버, 개발자 호스팅, Docker, 자동화">
<meta name="author" content="Anvil Hosting">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://hosting.anvil.it.com">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://hosting.anvil.it.com">
<meta property="og:title" content="Anvil Hosting - 개발자를 위한 컨테이너 클라우드">
<meta property="og:description" content="Incus/LXD 기반 초경량 컨테이너 호스팅. 네이티브 성능과 자동화 파이프라인을 경험하세요.">
<meta property="og:image" content="https://hosting.anvil.it.com/og-image.png">
<meta property="og:locale" content="ko_KR">
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:url" content="https://hosting.anvil.it.com">
<meta name="twitter:title" content="Anvil Hosting - 개발자를 위한 컨테이너 클라우드">
<meta name="twitter:description" content="Incus/LXD 기반 초경량 컨테이너 호스팅. 네이티브 성능과 자동화 파이프라인을 경험하세요.">
<meta name="twitter:image" content="https://hosting.anvil.it.com/og-image.png">
<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><rect fill='%230ea5e9' rx='20' width='100' height='100'/><text x='50' y='70' font-size='60' text-anchor='middle' fill='white' font-family='sans-serif' font-weight='bold'>A</text></svg>">
<!-- Tailwind CSS (Production Build) -->
<link rel="stylesheet" href="style.css">
<!-- Fonts -->
<link rel="stylesheet" href="fonts.css">
<!-- Critical CSS for above-the-fold -->
<style>
/* Critical CSS for above-the-fold */
body{background:#0a0f1a;color:#e2e8f0;margin:0}
.font-sans{font-family:-apple-system,BlinkMacSystemFont,'Apple SD Gothic Neo','Malgun Gothic',system-ui,sans-serif}
nav{position:fixed;width:100%;z-index:50;background:rgba(10,15,26,.8);backdrop-filter:blur(12px)}
</style>
<!-- App JavaScript (must load before Alpine.js) -->
<script defer src="app.js"></script>
<!-- Alpine.js (pinned version with SRI) -->
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.14.3/dist/cdn.min.js" integrity="sha384-iZD2X8o1Zdq0HR5H/7oa8W30WS4No+zWCKUPD7fHRay9I1Gf+C4F8sVmw7zec1wW" crossorigin="anonymous"></script>
</head>
<body x-data="anvilApp()" @keydown.window="handleKeydown($event)" class="font-sans antialiased selection:bg-brand-500/30">
<!-- Skip Link for Keyboard Users -->
<a href="#main-content" class="skip-link">메인 콘텐츠로 건너뛰기</a>
<!-- Navbar -->
<nav class="fixed w-full z-50 top-0 border-b border-white/5 bg-dark-900/80 backdrop-blur-md">
<div class="max-w-7xl mx-auto px-6 h-16 flex items-center justify-between">
<div class="flex items-center gap-8">
<a href="#" class="flex items-center gap-2 group">
<div class="w-8 h-8 rounded bg-brand-500 flex items-center justify-center text-white font-bold font-mono text-xl shadow-lg shadow-brand-500/20">A</div>
<span class="font-bold text-lg tracking-tight">Anvil<span class="text-brand-400">.Hosting</span></span>
</a>
<div class="hidden md:flex gap-6 text-sm font-medium text-slate-300">
<a href="#features" class="hover:text-white transition">기능</a>
<a href="#pricing" class="hover:text-white transition">요금제</a>
<a href="#automation" class="hover:text-white transition">자동화</a>
</div>
</div>
<a href="https://t.me/AnvilForgeBot" target="_blank" rel="noopener noreferrer" aria-label="Console 시작 - 텔레그램 봇으로 이동" class="px-4 py-2 bg-brand-700 hover:bg-brand-500 text-white text-sm font-bold rounded-lg transition shadow-lg shadow-brand-500/20 flex items-center gap-2">
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm4.64 6.8c-.15 1.58-.8 5.42-1.13 7.19-.14.75-.42 1-.68 1.03-.58.05-1.02-.38-1.58-.75-.88-.58-1.38-.94-2.23-1.5-.99-.65-.35-1.01.22-1.59.15-.15 2.71-2.48 2.76-2.69a.2.2 0 00-.05-.18c-.06-.05-.14-.03-.21-.02-.09.02-1.49.95-4.22 2.79-.4.27-.76.41-1.08.4-.36-.01-1.04-.2-1.55-.37-.62-.2-1.12-.31-1.15-.63.03-.37.59-.75 1.5-.95 6.07-2.64 10.12-4.38 12.15-5.21 2.91-1.2 3.51-1.4 3.91-1.41.09 0 .28.02.41.09.11.06.23.14.3.24.08.12.12.33.09.57z"/></svg>
Console 시작
</a>
</div>
</nav>
<!-- Main Content -->
<main id="main-content">
<!-- Hero Section -->
<section class="relative pt-32 pb-20 overflow-hidden grid-bg gradient-bg noise-bg">
<!-- Animated Blobs -->
<div class="blob blob-1 w-[600px] h-[600px] bg-brand-500/20 top-[-200px] left-[-100px] -z-10"></div>
<div class="blob blob-2 w-[500px] h-[500px] bg-purple-500/15 top-[100px] right-[-150px] -z-10"></div>
<div class="blob blob-3 w-[400px] h-[400px] bg-brand-400/10 bottom-[-100px] left-[30%] -z-10"></div>
<div class="max-w-7xl mx-auto px-6 grid lg:grid-cols-2 gap-16 items-center relative z-10">
<!-- Left: Text -->
<div>
<div class="inline-flex items-center gap-2 px-4 py-1.5 rounded-full glass-card-static text-xs font-mono text-brand-400 mb-6">
<span class="w-2 h-2 rounded-full bg-green-400 animate-pulse"></span>
System Operational: v2.4.0 Live
</div>
<h1 class="text-5xl md:text-6xl font-bold leading-tight mb-6">
<span class="gradient-text-animated">Incus/LXD</span> 기반<br>
초경량 컨테이너 호스팅
</h1>
<p class="text-lg text-slate-400 mb-8 leading-relaxed">
VM의 오버헤드는 버리세요. OS 수준의 완벽한 격리와 네이티브 성능을 제공합니다.
<span class="text-white font-medium">n8n, Ansible</span> 자동화 파이프라인과 즉시 연동됩니다.
</p>
<div class="flex flex-col sm:flex-row gap-4">
<div class="relative">
<button @click="openLauncher()" :aria-expanded="launcherOpen" aria-haspopup="dialog" aria-label="인스턴스 즉시 배포 - 서버 런처 열기" class="btn-glow relative w-full sm:w-auto px-8 py-4 bg-gradient-to-r from-white to-slate-100 text-dark-900 font-bold rounded-xl flex items-center justify-center gap-3 transition-all active:scale-95 group">
<span class="text-xl">🚀</span>
<span>인스턴스 즉시 배포</span>
<svg class="w-4 h-4 text-brand-600 transition-transform group-hover:translate-x-1" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6"/></svg>
</button>
</div>
<div id="ping-widget" class="flex flex-col gap-1.5 text-xs font-mono text-slate-400 bg-slate-900/50 p-3 rounded-lg border border-slate-700/50 backdrop-blur-sm mt-8 sm:mt-0 sm:ml-4 max-w-sm">
<div class="flex items-center gap-3">
<span class="w-24 whitespace-nowrap">🇰🇷 Seoul</span>
<div class="flex-1 h-1 bg-slate-700 rounded-full overflow-hidden"><div class="h-full bg-green-400 w-[95%]"></div></div>
<span class="text-green-400 w-12 text-right"><span id="ping-kr">2</span>ms</span>
</div>
<div class="flex items-center gap-3">
<span class="w-24 whitespace-nowrap">🇯🇵 Tokyo</span>
<div class="flex-1 h-1 bg-slate-700 rounded-full overflow-hidden"><div class="h-full bg-brand-400 w-[80%]"></div></div>
<span class="text-brand-400 w-12 text-right"><span id="ping-jp">35</span>ms</span>
</div>
<div class="flex items-center gap-3">
<span class="w-24 whitespace-nowrap">🇭🇰 HongKong</span>
<div class="flex-1 h-1 bg-slate-700 rounded-full overflow-hidden"><div class="h-full bg-yellow-400 w-[70%]"></div></div>
<span class="text-yellow-400 w-12 text-right"><span id="ping-hk">45</span>ms</span>
</div>
<div class="flex items-center gap-3">
<span class="w-24 whitespace-nowrap">🇸🇬 Singapore</span>
<div class="flex-1 h-1 bg-slate-700 rounded-full overflow-hidden"><div class="h-full bg-yellow-400 w-[60%]"></div></div>
<span class="text-yellow-400 w-12 text-right"><span id="ping-sg">65</span>ms</span>
</div>
</div>
</div>
</div>
<!-- Right: Telegram Chat Demo -->
<div class="relative max-w-md mx-auto w-full">
<!-- Telegram Window -->
<div class="rounded-2xl shadow-2xl overflow-hidden relative border border-slate-700">
<!-- Telegram Header -->
<div class="bg-[#232e3c] px-4 py-3 flex items-center gap-3">
<div class="w-10 h-10 rounded-full bg-gradient-to-br from-blue-400 to-blue-600 flex items-center justify-center text-white text-lg font-bold">A</div>
<div class="flex-1">
<div class="font-semibold text-white text-[15px]">Anvil Forge Bot</div>
<div class="text-xs text-[#6c7883]">bot</div>
</div>
<div class="flex gap-4 text-[#6c7883]">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 0 0 1.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 0 0-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 0 0 5.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></svg>
</div>
</div>
<!-- Chat Messages -->
<div class="p-4 space-y-3 text-[14px] bg-[#0e1621] min-h-[420px]" style="background-image: url('data:image/svg+xml,%3Csvg width=&quot;60&quot; height=&quot;60&quot; viewBox=&quot;0 0 60 60&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;%3E%3Cg fill=&quot;none&quot; fill-rule=&quot;evenodd&quot;%3E%3Cg fill=&quot;%23ffffff&quot; fill-opacity=&quot;0.02&quot;%3E%3Cpath d=&quot;M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z&quot;/%3E%3C/g%3E%3C/g%3E%3C/svg%3E');">
<!-- User Message -->
<div class="flex justify-end chat-bubble delay-1">
<div class="bg-[#2b5278] text-white px-3 py-2 rounded-xl rounded-tr-sm max-w-[85%] leading-relaxed shadow-sm">
도쿄 리전에 데비안 12로 프로 등급 서버 하나 만들어줘
<div class="text-[10px] text-blue-200/60 text-right mt-1">오후 3:42 ✓✓</div>
</div>
</div>
<!-- Bot Response -->
<div class="flex justify-start chat-bubble delay-2">
<div class="bg-[#182533] text-[#f5f5f5] px-3 py-2 rounded-xl rounded-tl-sm max-w-[85%] shadow-sm">
<div class="text-[#6ab3f3] font-medium text-[13px] mb-1">Anvil Forge Bot</div>
🤖 AI가 요청을 분석했습니다.<br><br>
다음 구성으로 서버를 준비할까요?<br><br>
📍 <span class="text-white/90">위치:</span> 🇯🇵 도쿄<br>
💿 <span class="text-white/90">OS:</span> Debian 12<br>
<span class="text-white/90">사양:</span> Pro (2 vCPU / 4GB)
<div class="text-[10px] text-slate-400 text-right mt-1">오후 3:42</div>
</div>
</div>
<!-- User Message -->
<div class="flex justify-end chat-bubble delay-3">
<div class="bg-[#2b5278] text-white px-3 py-2 rounded-xl rounded-tr-sm max-w-[80%] shadow-sm">
응 바로 생성해줘
<div class="text-[10px] text-blue-200/60 text-right mt-1">오후 3:42 ✓✓</div>
</div>
</div>
<!-- Bot Response (Success) -->
<div class="flex justify-start chat-bubble delay-4">
<div class="bg-[#182533] text-[#f5f5f5] px-3 py-2 rounded-xl rounded-tl-sm max-w-[85%] shadow-sm">
<div class="text-[#6ab3f3] font-medium text-[13px] mb-1">Anvil Forge Bot</div>
<span class="text-green-400 font-medium">서버 생성 완료!</span><br><br>
🌐 <span class="text-white/90">IP:</span> <code class="bg-black/30 px-1 rounded text-[13px]">45.12.89.121</code><br>
🔑 <span class="text-white/90">Root PW:</span> <span class="text-slate-400">(보안 전송됨)</span><br><br>
<span class="text-slate-400 text-[13px]">지금 바로 SSH 접속이 가능합니다.</span>
<div class="text-[10px] text-slate-400 text-right mt-1">오후 3:43</div>
</div>
</div>
</div>
</div>
<!-- Decoration -->
<div class="absolute -right-12 -bottom-12 w-64 h-64 bg-brand-500/20 rounded-full blur-3xl -z-10"></div>
</div>
</div>
</section>
<!-- Technical Features -->
<section id="features" class="py-24 bg-dark-800 relative overflow-hidden">
<!-- Background accent -->
<div class="absolute top-0 left-0 w-full h-px bg-gradient-to-r from-transparent via-brand-500/50 to-transparent"></div>
<div class="max-w-7xl mx-auto px-6">
<div class="text-center mb-16">
<h2 class="text-3xl md:text-4xl font-bold mb-4">엔지니어를 위한 <span class="gradient-text">기술 스택</span></h2>
<p class="text-slate-400 text-lg">단순한 호스팅을 넘어, 제어가 가능한 인프라를 제공합니다.</p>
</div>
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-6">
<!-- Tech Card 1 -->
<div class="glass-card feature-card p-8 rounded-2xl group" data-accent="brand">
<div class="w-12 h-12 rounded-xl bg-brand-500/10 flex items-center justify-center mb-5 group-hover:scale-110 transition-transform">
<span class="text-2xl"></span>
</div>
<div class="text-brand-400 font-mono mb-3 text-sm tracking-wide">&lt;Incus/LXD&gt;</div>
<h3 class="text-xl font-bold mb-3">Native Performance</h3>
<p class="text-slate-400 text-sm leading-relaxed">
KVM 오버헤드 없이 커널을 직접 공유하는 컨테이너 기술로 베어메탈에 가까운 성능을 냅니다. Docker in Docker도 완벽하게 지원합니다.
</p>
</div>
<!-- Tech Card 2 -->
<div class="glass-card feature-card p-8 rounded-2xl group" data-accent="purple">
<div class="w-12 h-12 rounded-xl bg-purple-500/10 flex items-center justify-center mb-5 group-hover:scale-110 transition-transform">
<span class="text-2xl">🔗</span>
</div>
<div class="text-purple-400 font-mono mb-3 text-sm tracking-wide">&lt;Automation&gt;</div>
<h3 class="text-xl font-bold mb-3">API & Webhooks</h3>
<p class="text-slate-400 text-sm leading-relaxed">
n8n, Ansible, Terraform으로 인프라를 코드로 관리하세요. 서버 생성, 삭제, 리소스 조정을 자동화된 워크플로우로 제어할 수 있습니다.
</p>
</div>
<!-- Tech Card 3 -->
<div class="glass-card feature-card p-8 rounded-2xl group" data-accent="green">
<div class="w-12 h-12 rounded-xl bg-green-500/10 flex items-center justify-center mb-5 group-hover:scale-110 transition-transform">
<span class="text-2xl">🛡️</span>
</div>
<div class="text-green-400 font-mono mb-3 text-sm tracking-wide">&lt;Security&gt;</div>
<h3 class="text-xl font-bold mb-3">Isolated & Safe</h3>
<p class="text-slate-400 text-sm leading-relaxed">
CrowdSec이 기본 통합된 방화벽과 네임스페이스 격리 기술로 이웃한 컨테이너의 영향 없이 안전하게 데이터를 보호합니다.
</p>
</div>
<!-- Tech Card 4 (DDoS) -->
<div class="glass-card feature-card p-8 rounded-2xl group" data-accent="red">
<div class="w-12 h-12 rounded-xl bg-red-500/10 flex items-center justify-center mb-5 group-hover:scale-110 transition-transform">
<span class="text-2xl">🚫</span>
</div>
<div class="text-red-400 font-mono mb-3 text-sm tracking-wide">&lt;Anti-DDoS&gt;</div>
<h3 class="text-xl font-bold mb-3">1Tbps+ Mitigation</h3>
<p class="text-slate-400 text-sm leading-relaxed">
L3/L4는 물론 복잡한 L7 애플리케이션 공격까지 완벽 방어합니다. 전 세계 엣지 노드에서 공격을 즉시 정화하여 무중단 서비스를 보장합니다.
</p>
</div>
</div>
</div>
</section>
<!-- Automation Section -->
<section id="automation" class="py-24 bg-dark-900 relative overflow-hidden">
<!-- Background accent -->
<div class="absolute top-0 left-0 w-full h-px bg-gradient-to-r from-transparent via-purple-500/30 to-transparent"></div>
<div class="absolute bottom-0 right-0 w-[500px] h-[500px] bg-purple-500/5 rounded-full blur-[100px] -z-10"></div>
<div class="max-w-7xl mx-auto px-6 flex flex-col lg:flex-row items-center gap-16">
<div class="lg:w-1/2">
<div class="inline-flex items-center gap-2 px-4 py-1.5 rounded-full glass-card-static text-xs font-mono text-purple-400 mb-6">
<span class="w-1.5 h-1.5 rounded-full bg-purple-400"></span>
Infrastructure as Code
</div>
<h2 class="text-3xl md:text-4xl font-bold mb-6">
반복적인 작업은<br>
<span class="gradient-text">자동화에 맡기세요</span>
</h2>
<p class="text-slate-400 mb-8 leading-relaxed text-lg">
웹 콘솔에 접속할 필요도 없습니다. <span class="text-white font-mono">Terraform</span>으로 인프라를 정의하고, <span class="text-white font-mono">Ansible</span>로 설정을 배포하세요. Anvil은 개발자 친화적인 API를 제공합니다.
</p>
<ul class="space-y-4">
<li class="flex items-center gap-4">
<div class="w-10 h-10 rounded bg-slate-800 flex items-center justify-center text-purple-400 border border-slate-700">
<svg class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19.428 15.428a2 2 0 00-1.022-.547l-2.384-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z"/></svg>
</div>
<div>
<div class="font-bold text-white">Webhook Integration</div>
<div class="text-sm text-slate-400">Github Actions, GitLab CI/CD 연동</div>
</div>
</li>
<li class="flex items-center gap-4">
<div class="w-10 h-10 rounded bg-slate-800 flex items-center justify-center text-purple-400 border border-slate-700">
<svg class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"/></svg>
</div>
<div>
<div class="font-bold text-white">Full API Access</div>
<div class="text-sm text-slate-400">서버 생성, 제어, 모니터링 100% API 지원</div>
</div>
</li>
</ul>
</div>
<div class="lg:w-1/2 w-full" x-data="{ tab: 'n8n' }">
<!-- Tab Buttons -->
<div class="flex gap-2 mb-4" role="tablist" aria-label="코드 예제 선택">
<button role="tab"
aria-selected="true"
aria-controls="panel-n8n"
data-tab="n8n"
id="btn-n8n"
class="px-4 py-2 rounded-lg bg-purple-600 text-white text-sm font-bold transition">
n8n Workflow
</button>
<button role="tab"
aria-selected="false"
aria-controls="panel-tf"
data-tab="tf"
id="btn-tf"
class="px-4 py-2 rounded-lg bg-slate-800 text-slate-400 text-sm font-bold border border-slate-700 hover:text-white transition">
Terraform
</button>
</div>
<!-- n8n Window -->
<div id="panel-n8n" role="tabpanel" aria-labelledby="btn-n8n" class="rounded-2xl overflow-hidden shadow-2xl border border-slate-700 relative group">
<!-- Window Header -->
<div class="flex items-center px-4 py-3 bg-[#1a1a2e] border-b border-slate-700/50 gap-2">
<div class="w-3 h-3 rounded-full bg-[#ff5f56]"></div>
<div class="w-3 h-3 rounded-full bg-[#ffbd2e]"></div>
<div class="w-3 h-3 rounded-full bg-[#27c93f]"></div>
<span class="ml-3 text-slate-400 text-xs font-mono">n8n Workflow Editor</span>
</div>
<!-- Screenshot Image (Cropped diagram) -->
<div class="relative overflow-hidden rounded-b-xl">
<picture>
<source srcset="images/n8n-workflow.webp" type="image/webp">
<img src="images/n8n-workflow.png"
alt="n8n 워크플로우 자동화 예시: GitHub Actions 트리거 → Anvil API 호출 → 서버 자동 생성 프로세스"
class="w-full h-auto block transition-transform duration-500 group-hover:scale-[1.02]"
width="800"
height="450"
loading="lazy"
decoding="async"
fetchpriority="low"
crossorigin="anonymous">
</picture>
</div>
</div>
<!-- Terraform Window (Hidden by default) -->
<div id="panel-tf" role="tabpanel" aria-labelledby="btn-tf" class="hidden bg-[#1e1e1e] rounded-xl overflow-hidden shadow-2xl border border-slate-700 h-[320px] font-mono text-sm">
<div class="flex items-center px-4 py-2 bg-[#252526] border-b border-[#3e3e42] gap-2">
<div class="w-3 h-3 rounded-full bg-[#ff5f56]"></div>
<div class="w-3 h-3 rounded-full bg-[#ffbd2e]"></div>
<div class="w-3 h-3 rounded-full bg-[#27c93f]"></div>
<span class="ml-2 text-slate-400 text-xs">main.tf</span>
</div>
<div class="p-6 text-slate-300 leading-relaxed overflow-x-auto h-full overflow-y-auto custom-scrollbar">
<div><span class="text-[#569cd6]">resource</span> <span class="text-[#ce9178]">"anvil_instance"</span> <span class="text-[#ce9178]">"web"</span> {</div>
<div class="pl-4"><span class="text-[#9cdcfe]">name</span> &nbsp;&nbsp;= <span class="text-[#ce9178]">"production-web-01"</span></div>
<div class="pl-4"><span class="text-[#9cdcfe]">image</span> &nbsp;= <span class="text-[#ce9178]">"debian-12"</span></div>
<div class="pl-4"><span class="text-[#9cdcfe]">region</span> = <span class="text-[#ce9178]">"jp-east-1"</span></div>
<div class="pl-4"><span class="text-[#9cdcfe]">plan</span> &nbsp;&nbsp;= <span class="text-[#ce9178]">"pro-v2"</span></div>
<br>
<div class="pl-4"><span class="text-[#6a9955]">// 자동 백업 설정</span></div>
<div class="pl-4"><span class="text-[#9cdcfe]">backup_schedule</span> {</div>
<div class="pl-8"><span class="text-[#9cdcfe]">enabled</span> = <span class="text-[#569cd6]">true</span></div>
<div class="pl-8"><span class="text-[#9cdcfe]">retain</span> &nbsp;= <span class="text-[#b5cea8]">7</span></div>
<div class="pl-4">}</div>
<div>}</div>
</div>
</div>
</div>
</div>
</section>
<!-- Infrastructure Details -->
<section class="py-24 relative overflow-hidden">
<!-- Background accent -->
<div class="absolute top-0 left-0 w-full h-px bg-gradient-to-r from-transparent via-slate-700 to-transparent"></div>
<div class="max-w-7xl mx-auto px-6 grid md:grid-cols-2 gap-12">
<div>
<h3 class="text-2xl md:text-3xl font-bold mb-8">High-Spec <span class="gradient-text">Infrastructure</span></h3>
<ul class="space-y-6">
<li class="flex gap-4">
<div class="w-12 h-12 rounded bg-slate-800 flex items-center justify-center flex-shrink-0 border border-slate-700">
<span class="text-2xl"></span>
</div>
<div>
<h4 class="font-bold text-lg">NVMe Storage</h4>
<p class="text-slate-400 text-sm">모든 플랜에 Enterprise급 NVMe SSD 제공. IOPS 병목 없는 데이터베이스 성능 보장.</p>
</div>
</li>
<li class="flex gap-4">
<div class="w-12 h-12 rounded bg-slate-800 flex items-center justify-center flex-shrink-0 border border-slate-700">
<span class="text-2xl">🌐</span>
</div>
<div>
<h4 class="font-bold text-lg">Premium Network</h4>
<p class="text-slate-400 text-sm">CN2/BGP 최적화 경로. 서울-도쿄 35ms, 서울-홍콩 45ms의 낮은 레이턴시.</p>
</div>
</li>
<li class="flex gap-4">
<div class="w-12 h-12 rounded bg-slate-800 flex items-center justify-center flex-shrink-0 border border-slate-700">
<span class="text-2xl">💾</span>
</div>
<div>
<h4 class="font-bold text-lg">ZFS Snapshots</h4>
<p class="text-slate-400 text-sm">CoW(Copy-on-Write) 기반의 즉각적인 스냅샷과 롤백 지원. 데이터 손실 걱정 끝.</p>
</div>
</li>
</ul>
</div>
<div class="glass-card rounded-2xl p-1 terminal-glow">
<!-- Terminal UI Mockup -->
<div class="bg-dark-900/90 rounded-xl h-full p-5 font-mono text-xs md:text-sm text-slate-300 overflow-hidden">
<div class="flex gap-2 mb-4 items-center">
<div class="w-3 h-3 rounded-full bg-red-500/80"></div>
<div class="w-3 h-3 rounded-full bg-yellow-500/80"></div>
<div class="w-3 h-3 rounded-full bg-green-500/80"></div>
<span class="ml-3 text-slate-500 text-xs">anvil-server ~ bash</span>
</div>
<p><span class="text-brand-400">root@anvil:~#</span> neofetch</p>
<div class="mt-2 text-slate-400">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/ \<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\ /&nbsp;&nbsp;&nbsp;&nbsp;<span class="text-white">OS:</span> Debian GNU/Linux 12 (bookworm)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="text-white">Kernel:</span> 6.1.0-18-cloud-amd64<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="text-white">Uptime:</span> 142 days, 4 hours<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="text-white">Virtualization:</span> lxc (Incus)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="text-white">CPU:</span> AMD EPYC 7763 (4) @ 2.45GHz<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="text-white">Memory:</span> 512MiB / 64GiB<br>
</div>
<p class="mt-4"><span class="text-brand-400">root@anvil:~#</span> docker ps</p>
<p class="text-green-400">CONTAINER ID IMAGE STATUS PORTS</p>
<p>a1b2c3d4e5f6 nginx Up 24h 0.0.0.0:80->80/tcp</p>
<p class="mt-4 animate-pulse">_</p>
</div>
</div>
</div>
</section>
<!-- Domain Section -->
<section id="domain" class="py-24 relative overflow-hidden">
<!-- Background accent -->
<div class="absolute top-0 left-0 w-full h-px bg-gradient-to-r from-transparent via-brand-500/30 to-transparent"></div>
<div class="absolute top-[20%] left-[-10%] w-[400px] h-[400px] bg-brand-500/5 rounded-full blur-[100px] -z-10"></div>
<div class="max-w-7xl mx-auto px-6">
<div class="flex flex-col lg:flex-row items-center gap-16">
<div class="lg:w-1/2">
<div class="inline-flex items-center gap-2 px-4 py-1.5 rounded-full glass-card-static text-xs font-mono text-brand-400 mb-6">
<span class="w-1.5 h-1.5 rounded-full bg-brand-400 animate-pulse"></span>
NEW: AI Domain Generator
</div>
<h2 class="text-3xl md:text-4xl font-bold mb-6">대화로 끝내는<br><span class="gradient-text">도메인 등록과 관리</span></h2>
<p class="text-slate-400 mb-8 leading-relaxed text-lg">
원하는 아이디어만 말씀하세요. AI가 창의적인 도메인을 추천하고, 텔레그램 대화창에서 3초 만에 등록까지 완료합니다. 복잡한 설정 없이 네임서버까지 즉시 연결됩니다.
</p>
<div class="grid grid-cols-2 gap-4">
<div class="glass-card p-5 rounded-xl group">
<div class="text-brand-400 font-bold mb-2 flex items-center gap-2">
<span class="text-lg">🤖</span> AI 추천
</div>
<p class="text-sm text-slate-400">키워드 분석 기반 도메인 작명</p>
</div>
<div class="glass-card p-5 rounded-xl group">
<div class="text-brand-400 font-bold mb-2 flex items-center gap-2">
<span class="text-lg">🔍</span> 실시간 조회
</div>
<p class="text-sm text-slate-400">전 세계 TLD 실시간 가용 확인</p>
</div>
<div class="glass-card p-5 rounded-xl group">
<div class="text-brand-400 font-bold mb-2 flex items-center gap-2">
<span class="text-lg">⚙️</span> 간편 DNS
</div>
<p class="text-sm text-slate-400">대화형 A/CNAME/MX 레코드 설정</p>
</div>
<div class="glass-card p-5 rounded-xl group">
<div class="text-brand-400 font-bold mb-2 flex items-center gap-2">
<span class="text-lg">🔒</span> Whois 보안
</div>
<p class="text-sm text-slate-400">개인정보 보호 설정 기본 제공</p>
</div>
</div>
</div>
<div class="lg:w-1/2 w-full">
<div class="glass-panel p-8 rounded-2xl border border-slate-700 relative overflow-hidden">
<div class="absolute top-0 right-0 p-4 opacity-10">
<svg class="w-32 h-32 text-brand-400" fill="currentColor" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/></svg>
</div>
<h3 class="text-xl font-bold mb-4 flex items-center gap-2">
<span class="w-2 h-2 rounded-full bg-brand-500"></span>
주요 도메인 가격 (연간)
</h3>
<div class="space-y-4 font-mono text-sm">
<div class="flex justify-between items-center p-3 border-b border-white/5">
<span class="text-white">.com / .net</span>
<span class="text-brand-400 font-bold">₩20,000 / ₩22,600</span>
</div>
<div class="flex justify-between items-center p-3 border-b border-white/5">
<span class="text-white">.it.com / .dev</span>
<div class="text-right">
<span class="text-brand-400 font-bold">₩8,700 / ₩27,800</span>
<div class="text-[10px] text-slate-400 mt-0.5">(.it.com 갱신 ₩67,900)</div>
</div>
</div>
<div class="flex justify-between items-center p-3 border-b border-white/5">
<span class="text-white">.io / .ai</span>
<span class="text-brand-400 font-bold">₩114,800 / ₩139,200</span>
</div>
<div class="flex justify-between items-center p-3">
<span class="text-white">.xyz / .me</span>
<span class="text-brand-400 font-bold">₩27,800 / ₩31,300</span>
</div>
</div>
<a href="https://t.me/AnvilForgeBot" target="_blank" rel="noopener noreferrer" class="mt-8 w-full py-3 bg-brand-700 hover:bg-brand-500 text-white font-bold rounded-lg transition text-center block">
🌐 도메인 검색 시작하기
</a>
</div>
</div>
</div>
</div>
</section>
<!-- Pricing -->
<section id="pricing" class="py-24 relative overflow-hidden">
<!-- Background Effects -->
<div class="absolute inset-0 gradient-bg opacity-50"></div>
<div class="absolute top-1/4 -right-32 w-96 h-96 bg-purple-500/10 rounded-full blur-3xl"></div>
<div class="absolute bottom-1/4 -left-32 w-96 h-96 bg-brand-500/10 rounded-full blur-3xl"></div>
<div class="max-w-7xl mx-auto px-6 relative z-10">
<div class="text-center mb-16 animate-on-scroll">
<div class="inline-flex items-center gap-2 px-4 py-2 rounded-full glass-panel text-sm text-slate-300 mb-6">
<span class="w-2 h-2 rounded-full bg-green-400 animate-pulse"></span>
투명한 가격 정책
</div>
<h2 class="text-3xl md:text-4xl font-bold mb-4">합리적인 <span class="gradient-text">요금제</span></h2>
<p class="text-slate-400 text-lg">전 세계 4개 리전에서 제공되는 최적의 인프라 요금</p>
<p class="text-slate-500 text-sm mt-2">(월간 기준, VAT 포함)</p>
</div>
<!-- Pricing Tabs -->
<div x-data="pricingTable()" class="glass-card-static p-8 rounded-3xl mb-12 animate-on-scroll">
<!-- Tab Buttons -->
<div class="flex justify-center mb-8">
<div class="glass-panel p-1.5 rounded-2xl inline-flex gap-1">
<button @click="region = 'global'" :class="region === 'global' ? 'bg-gradient-to-r from-brand-600 to-brand-500 text-white shadow-lg shadow-brand-500/30 border-b-2 border-b-white/60' : 'text-slate-400 hover:text-white hover:bg-white/5'" class="px-6 py-3 rounded-xl text-sm font-bold transition-all flex items-center gap-2">
<span>🌏 Global</span>
<span class="text-[10px] font-normal opacity-80">(Tokyo/SG/HK)</span>
</button>
<button @click="region = 'seoul'" :class="region === 'seoul' ? 'bg-gradient-to-r from-brand-600 to-brand-500 text-white shadow-lg shadow-brand-500/30 border-b-2 border-b-white/60' : 'text-slate-400 hover:text-white hover:bg-white/5'" class="px-6 py-3 rounded-xl text-sm font-bold transition-all flex items-center gap-2">
<span>🇰🇷 Seoul</span>
<span class="text-[10px] font-normal opacity-80">(Premium)</span>
</button>
</div>
</div>
<!-- Dynamic Pricing Table -->
<div x-transition:enter="transition ease-out duration-300" x-transition:enter-start="opacity-0 transform scale-95" x-transition:enter-end="opacity-100 transform scale-100">
<div class="overflow-x-auto">
<table class="w-full text-left font-sans"
aria-label="서버 요금 비교표 - 리전 및 플랜별 가격 정보">
<caption class="sr-only">
서버 요금은 월간 기준입니다. 글로벌 리전(도쿄, 싱가포르, 홍콩)과 서울 프리미엄 리전 중에서 선택할 수 있습니다.
</caption>
<thead>
<tr class="text-slate-500 text-sm border-b border-slate-700">
<th class="pb-4 font-medium pl-4">Plan</th>
<th class="pb-4 font-medium text-center">vCPU</th>
<th class="pb-4 font-medium text-center">RAM</th>
<th class="pb-4 font-medium text-center" :class="isSeoul() ? 'text-green-400' : ''">
<span x-text="isSeoul() ? 'SSD (High)' : 'SSD'"></span>
</th>
<th class="pb-4 font-medium text-center">Transfer</th>
<th class="pb-4 font-medium text-right pr-4">Price / Month</th>
</tr>
</thead>
<tbody class="text-slate-300 text-sm">
<template x-for="(plan, index) in plans" :key="plan.plan">
<tr :class="plan.featured
? 'border-b border-slate-700/50 bg-brand-500/5 hover:bg-brand-500/10 transition border-l-4 border-l-brand-500'
: (index < plans.length - 1 ? 'border-b border-slate-700/50 hover:bg-slate-800/50 transition' : 'hover:bg-slate-800/50 transition')">
<td :class="plan.featured ? 'py-4 pl-3 font-bold text-brand-400' : 'py-4 pl-4 font-bold text-white'">
<span x-text="plan.plan"></span>
<span x-show="plan.featured"></span>
</td>
<td :class="plan.featured ? 'text-center text-brand-400 font-bold' : 'text-center text-brand-400'" x-text="plan.vcpu"></td>
<td :class="plan.featured ? 'text-center font-bold' : 'text-center'" x-text="plan.ram"></td>
<td :class="isSeoul() ? 'text-center text-green-400 font-bold' : 'text-center'" x-text="plan.ssd"></td>
<td class="text-center" x-text="plan.transfer"></td>
<td :class="plan.featured ? 'text-right pr-4 font-bold text-lg text-brand-400' : 'text-right pr-4 font-bold text-lg'" x-text="formatPrice(plan.price)"></td>
</tr>
</template>
</tbody>
</table>
</div>
<!-- Global Note -->
<p x-show="!isSeoul()" class="mt-4 text-center text-xs text-slate-500">
* 🇯🇵 도쿄, 🇸🇬 싱가포르 기준 요금입니다. 🇭🇰 홍콩 리전은 약 10%의 추가 요금이 발생할 수 있습니다.
</p>
<!-- Seoul Enterprise Note -->
<div x-show="isSeoul()" class="mt-6 p-4 bg-slate-800/50 rounded-lg border border-slate-700 flex flex-col md:flex-row justify-between items-center gap-4">
<div class="text-xs text-slate-400">
<span class="text-white font-bold block mb-1">더 강력한 성능이 필요하신가요?</span>
AWS EC2 기반의 고성능(4 vCPU+) 인스턴스는 별도 문의 바랍니다. (VPC Peering 지원)
</div>
<a href="https://t.me/AnvilForgeBot" target="_blank" rel="noopener noreferrer" class="px-4 py-2 bg-slate-700 hover:bg-slate-600 text-white text-xs font-bold rounded transition">
Enterprise 문의 →
</a>
</div>
</div>
</div>
<!-- Feature Highlight -->
<div class="grid md:grid-cols-2 gap-8 max-w-4xl mx-auto animate-on-scroll">
<div class="glass-card p-6 rounded-2xl flex items-start gap-4 group">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-brand-500/20 to-purple-500/20 flex items-center justify-center text-2xl group-hover:scale-110 transition-transform">🌍</div>
<div>
<h3 class="font-bold text-white mb-2">글로벌 4개 리전 운영</h3>
<p class="text-sm text-slate-400 leading-relaxed">도쿄(JP-East), 오사카(JP-West), 싱가포르(SG-Core), 홍콩(HK-Hub)에서 즉시 서버를 생성할 수 있습니다.</p>
</div>
</div>
<div class="glass-card p-6 rounded-2xl flex items-start gap-4 group border-brand-500/20">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-green-500/20 to-brand-500/20 flex items-center justify-center text-2xl group-hover:scale-110 transition-transform">🛡️</div>
<div>
<h3 class="font-bold text-white mb-2">프리미엄 DDoS 방어</h3>
<p class="text-sm text-slate-400 leading-relaxed">모든 리전에 엔터프라이즈급 DDoS 방어 옵션(₩99,000, VAT 포함)을 추가하여 L7 공격까지 완벽하게 방어할 수 있습니다.</p>
</div>
</div>
</div>
<!-- Bare Metal Section -->
<div class="mt-16 glass-card p-8 md:p-10 rounded-3xl relative overflow-hidden animate-on-scroll pricing-featured">
<!-- Background Glow Effects -->
<div class="absolute inset-0 bg-gradient-to-br from-red-500/5 via-transparent to-purple-500/5 z-0"></div>
<div class="absolute -top-20 -right-20 w-60 h-60 bg-red-500/10 rounded-full blur-3xl"></div>
<div class="absolute -bottom-20 -left-20 w-60 h-60 bg-brand-500/10 rounded-full blur-3xl"></div>
<div class="relative z-10 flex flex-col md:flex-row items-center justify-between gap-8">
<div>
<div class="inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-gradient-to-r from-red-500/20 to-orange-500/20 border border-red-500/30 text-xs font-bold text-red-400 mb-4">
<span class="w-1.5 h-1.5 rounded-full bg-red-400 animate-pulse"></span>
EXTREME PERFORMANCE
</div>
<h3 class="text-3xl md:text-4xl font-bold text-white mb-3">Bare Metal <span class="gradient-text">Dedicated</span></h3>
<p class="text-slate-400 max-w-xl leading-relaxed">
가상화가 없는 100% 물리 서버를 단독으로 사용하세요. <br>
<span class="text-white font-mono">AMD EPYC 9004</span> 프로세서와 <span class="text-white font-mono">DDR5 ECC RAM</span>의 압도적인 성능을 경험할 수 있습니다.
</p>
<div class="flex flex-wrap gap-4 mt-6 text-sm font-mono text-slate-300">
<span class="flex items-center gap-2 glass-panel px-3 py-1.5 rounded-lg"><span class="text-brand-400"></span> Full IPMI Access</span>
<span class="flex items-center gap-2 glass-panel px-3 py-1.5 rounded-lg"><span class="text-brand-400"></span> Custom Hardware</span>
<span class="flex items-center gap-2 glass-panel px-3 py-1.5 rounded-lg"><span class="text-brand-400"></span> 40Gbps Private Network</span>
</div>
</div>
<div class="flex flex-col items-center md:items-end gap-4">
<div class="text-center md:text-right glass-panel p-6 rounded-2xl">
<span class="text-sm text-slate-400">Live Inventory Pricing</span>
<div class="text-4xl md:text-5xl font-bold text-white mt-1">₩169,000<span class="text-lg text-slate-500 font-normal">~</span></div>
<p class="text-xs text-brand-400 mt-2">🇸🇬 싱가포르 최저가 재고 보유 중</p>
<p class="text-[10px] text-slate-400 mt-1">※ 서울/도쿄 리전 재고 및 가격은 봇으로 확인하세요.</p>
</div>
<a href="https://t.me/AnvilForgeBot" target="_blank" rel="noopener noreferrer" class="btn-glow px-8 py-4 bg-gradient-to-r from-brand-600 to-brand-500 text-white font-bold rounded-xl hover:shadow-lg hover:shadow-brand-500/30 transition-all flex items-center gap-3">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm4.64 6.8c-.15 1.58-.8 5.42-1.13 7.19-.14.75-.42 1-.68 1.03-.58.05-1.02-.38-1.58-.75-.88-.58-1.38-.94-2.23-1.5-.99-.65-.35-1.01.22-1.59.15-.15 2.71-2.48 2.76-2.69a.2.2 0 00-.05-.18c-.06-.05-.14-.03-.21-.02-.09.02-1.49.95-4.22 2.79-.4.27-.76.41-1.08.4-.36-.01-1.04-.2-1.55-.37-.62-.2-1.12-.31-1.15-.63.03-.37.59-.75 1.5-.95 6.07-2.64 10.12-4.38 12.15-5.21 2.91-1.2 3.51-1.4 3.91-1.41.09 0 .28.02.41.09.11.06.23.14.3.24.08.12.12.33.09.57z"/></svg>
실시간 재고/가격 조회 (Bot)
</a>
</div>
</div>
</div>
</div>
</section>
</main>
<!-- End Main Content -->
<!-- Footer -->
<footer class="py-16 relative overflow-hidden">
<!-- Background -->
<div class="absolute inset-0 bg-gradient-to-t from-dark-900 to-transparent"></div>
<div class="absolute top-0 left-0 right-0 h-px bg-gradient-to-r from-transparent via-brand-500/30 to-transparent"></div>
<div class="max-w-7xl mx-auto px-6 relative z-10">
<div class="flex flex-col md:flex-row justify-between items-center gap-8">
<!-- Brand -->
<div class="text-center md:text-left">
<div class="flex items-center gap-3 mb-2 justify-center md:justify-start">
<div class="w-10 h-10 rounded-xl bg-gradient-to-br from-brand-500 to-purple-500 flex items-center justify-center text-white font-bold text-lg">A</div>
<span class="text-xl font-bold text-white">Anvil Hosting</span>
</div>
<p class="text-sm text-slate-500">Global Cloud Infrastructure</p>
</div>
<!-- Links -->
<div class="flex flex-wrap justify-center gap-8">
<a href="/terms.html" class="text-slate-400 hover:text-brand-400 transition underline-animation">이용약관</a>
<a href="/privacy.html" class="text-slate-400 hover:text-brand-400 transition underline-animation">개인정보처리방침</a>
<a href="/sla.html" class="text-slate-400 hover:text-brand-400 transition underline-animation">SLA</a>
</div>
<!-- Company Info -->
<div class="text-center md:text-right text-sm">
<div class="text-slate-400">© 2026 LIBEHAIM Inc. | Taro Tanaka</div>
<div class="text-xs text-slate-500 mt-1">#202 K-Flat, 3-1-13 Higashioi, Shinagawa-ku, Tokyo 140-0011, Japan</div>
</div>
</div>
<!-- Bottom Decoration -->
<div class="mt-12 pt-8 border-t border-white/5 text-center">
<p class="text-xs text-slate-500">Powered by <span class="text-brand-400">Cloud Infrastructure</span> across 4 global regions</p>
</div>
</div>
</footer>
<!-- Server Launcher Modal -->
<div x-show="launcherOpen"
x-transition:enter="transition ease-out duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
x-transition:leave="transition ease-in duration-200"
x-transition:leave-start="opacity-100"
x-transition:leave-end="opacity-0"
class="fixed inset-0 z-[100] flex items-center justify-center p-2 sm:p-4 bg-dark-900/90 backdrop-blur-sm"
style="display: none;">
<div @click.away="if(!launching) launcherOpen = false"
role="dialog"
aria-modal="true"
aria-labelledby="modal-main-title"
aria-describedby="modal-description"
class="bg-slate-900/95 backdrop-blur-xl border border-white/10 mx-2 sm:mx-4 rounded-3xl shadow-2xl shadow-black/50 overflow-hidden flex flex-col"
style="width: 100%; max-width: 800px; max-height: 90vh; height: 90vh;">
<!-- Accessibility: Hidden description -->
<div id="modal-description" class="sr-only">
단계별로 서버 구성을 선택하세요. 각 단계에서 옵션을 클릭하거나 Tab 키로 네비게이션할 수 있습니다. ESC 키를 누르면 닫을 수 있습니다.
</div>
<!-- Modal Header -->
<div class="px-4 py-3 border-b border-white/5 flex justify-between items-center flex-shrink-0">
<div class="flex items-center gap-2">
<div class="w-8 h-8 rounded-full bg-gradient-to-br from-brand-500 to-purple-500 flex items-center justify-center text-sm flex-shrink-0">🚀</div>
<div>
<h2 id="modal-main-title" class="text-sm font-bold text-white">서버 생성 마법사</h2>
<p class="text-[10px] text-slate-400">Anvil Forge Bot</p>
</div>
</div>
<button @click="resetLauncher"
aria-label="모달 닫기 (ESC 키 지원)"
class="modal-close w-8 h-8 flex items-center justify-center rounded-full bg-white/5 text-slate-400 hover:bg-white/10 hover:text-white transition flex-shrink-0"
x-show="!launching">
<span aria-hidden="true">×</span>
</button>
</div>
<!-- Chat Container -->
<div id="chat-container" role="log" aria-live="polite" class="flex-1 overflow-y-auto px-3 sm:px-6 py-3 sm:py-4 space-y-2 sm:space-y-4" x-show="wizardStep < 5">
<!-- Messages -->
<template x-for="(msg, idx) in messages" :key="idx">
<div :class="msg.type === 'bot' ? 'flex justify-start' : 'flex justify-end'"
role="article"
:aria-label="(msg.type === 'bot' ? 'Anvil Forge Bot' : '당신') + ': ' + msg.text">
<div :class="msg.type === 'bot'
? 'bg-slate-800 text-slate-200 rounded-xl sm:rounded-2xl rounded-tl-sm'
: 'bg-brand-500 text-white rounded-xl sm:rounded-2xl rounded-tr-sm'"
class="px-3 py-2 sm:px-4 sm:py-2.5 text-xs sm:text-sm max-w-[90%] break-words"
role="document">
<span x-text="msg.text"></span>
</div>
</div>
</template>
<!-- Current Step Options -->
<div class="pt-2">
<!-- Step 0: Region Selection -->
<fieldset x-show="wizardStep === 0" role="radiogroup" aria-label="리전 선택" class="space-y-3">
<legend class="sr-only">리전 선택 (지역 선택)</legend>
<template x-for="r in regions" :key="r.id">
<button @click="selectRegion(r)"
role="radio"
:aria-checked="config.region === r.id"
:tabindex="config.region === r.id ? '0' : '-1'"
class="w-full flex items-center justify-between px-5 py-4 bg-slate-800/80 hover:bg-slate-700 border-2 rounded-xl transition-all group"
:class="config.region === r.id
? 'border-brand-500 bg-brand-500/10'
: 'border-slate-700/50 hover:border-brand-500/50'">
<div class="flex items-center gap-4">
<span class="text-3xl" x-text="r.flag"></span>
<div class="text-left">
<div class="font-semibold text-white text-base" x-text="r.name"></div>
<div class="text-sm text-slate-300" x-text="r.id"></div>
</div>
</div>
<div class="text-sm text-slate-500 group-hover:text-brand-400 font-mono" x-text="r.ping"></div>
</button>
</template>
</fieldset>
<!-- Step 1: Plan Selection -->
<fieldset x-show="wizardStep === 1" class="space-y-3">
<legend class="sr-only">플랜 선택 (서버 사양 선택)</legend>
<template x-for="p in plans" :key="p">
<button @click="selectPlan(p)"
class="w-full flex items-center justify-between px-5 py-4 bg-slate-800/80 hover:bg-slate-700 border border-slate-700/50 hover:border-brand-500/50 rounded-xl transition-all">
<div class="flex items-center gap-4">
<div class="w-12 h-12 rounded-lg bg-slate-700/50 flex items-center justify-center text-2xl"
x-text="p === 'Micro' ? '🔹' : p === 'Starter' ? '🔷' : p === 'Pro' ? '⭐' : '💎'"></div>
<div class="text-left">
<div class="font-semibold text-white text-base" x-text="p"></div>
<div class="text-sm text-slate-400" x-text="getPlanSpec(p)"></div>
</div>
</div>
<div class="text-right">
<div class="font-bold text-brand-400 text-base" x-text="'₩' + getPrice(p)"></div>
<div class="text-xs text-slate-500">/월</div>
</div>
</button>
</template>
</fieldset>
<!-- Step 2: OS Selection -->
<fieldset x-show="wizardStep === 2" class="space-y-3">
<legend class="sr-only">운영체제 선택</legend>
<template x-for="os in osList" :key="os.id">
<button @click="selectOS(os)"
class="w-full flex items-center gap-4 px-5 py-4 bg-slate-800/80 hover:bg-slate-700 border border-slate-700/50 hover:border-purple-500/50 rounded-xl transition-all">
<span class="text-2xl" x-text="os.icon"></span>
<span class="font-semibold text-white text-base" x-text="os.name"></span>
</button>
</template>
</fieldset>
<!-- Step 3: Payment Selection -->
<fieldset x-show="wizardStep === 3" class="space-y-3">
<legend class="sr-only">결제 방식 선택</legend>
<template x-for="pay in paymentMethods" :key="pay.id">
<button @click="selectPayment(pay)"
class="w-full flex items-center justify-between px-5 py-4 bg-slate-800/80 hover:bg-slate-700 border border-slate-700/50 hover:border-green-500/50 rounded-xl transition-all">
<div class="text-left">
<div class="font-semibold text-white text-base" x-text="pay.name"></div>
<div class="text-sm text-slate-400" x-text="pay.desc"></div>
</div>
<div x-show="pay.discount > 0" class="px-3 py-1.5 bg-green-500/20 text-green-400 text-sm font-bold rounded-full">
-<span x-text="pay.discount"></span>%
</div>
</button>
</template>
</fieldset>
<!-- Step 4: Confirmation -->
<div x-show="wizardStep === 4" class="space-y-4">
<div class="px-5 py-4 bg-slate-800/50 border border-slate-700/50 rounded-xl space-y-3">
<div class="flex justify-between text-base"><span class="text-slate-400">리전</span><span class="text-white font-medium" x-text="config.region"></span></div>
<div class="flex justify-between text-base"><span class="text-slate-400">플랜</span><span class="text-white font-medium" x-text="config.plan + ' (' + getPlanSpec(config.plan) + ')'"></span></div>
<div class="flex justify-between text-base"><span class="text-slate-400">OS</span><span class="text-white font-medium" x-text="config.os"></span></div>
<div class="flex justify-between text-base"><span class="text-slate-400">결제</span><span class="text-white font-medium" x-text="config.payment === 'yearly' ? '연간' : '월간'"></span></div>
<div class="border-t border-slate-700 pt-3 mt-3 flex justify-between font-bold text-lg">
<span class="text-slate-300">월 요금</span>
<span class="text-brand-400" x-text="'₩' + getFinalPrice().toLocaleString('ko-KR')"></span>
</div>
</div>
<button @click="startLaunch"
class="w-full py-4 bg-gradient-to-r from-brand-600 to-brand-500 hover:from-brand-500 hover:to-brand-400 text-white font-bold rounded-xl transition-all shadow-lg shadow-brand-500/25 active:scale-[0.98] text-base">
🚀 서버 생성하기
</button>
</div>
</div>
</div>
<!-- Back Button -->
<div x-show="wizardStep > 0 && wizardStep < 5" class="px-4 pb-3 flex-shrink-0">
<button @click="goBack" class="text-xs text-slate-500 hover:text-slate-300 transition flex items-center gap-1">
<svg class="w-3 h-3" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"/></svg>
이전 단계
</button>
</div>
<!-- Deploying State -->
<div x-show="wizardStep >= 5" class="p-4 flex flex-col min-h-[300px]">
<!-- Progress -->
<div class="mb-4">
<div class="flex justify-between text-xs text-slate-400 mb-2">
<span x-text="deployStep < 5 ? '배포 중...' : '완료'"></span>
<span x-text="(deployStep * 20) + '%'"></span>
</div>
<div class="h-1.5 bg-slate-800 rounded-full overflow-hidden">
<div class="h-full bg-gradient-to-r from-brand-500 to-purple-500 transition-all duration-500 rounded-full" :style="'width: ' + (deployStep * 20) + '%'"></div>
</div>
</div>
<!-- Logs -->
<div class="flex-1 bg-black/30 rounded-xl p-3 text-xs text-slate-400 overflow-y-auto border border-white/5 space-y-1 max-h-40">
<template x-for="(log, idx) in logs" :key="idx">
<div x-text="log"></div>
</template>
<div x-show="launching" class="animate-pulse text-brand-400"></div>
</div>
<!-- Success State -->
<div x-show="deployStep === 5" x-transition class="mt-4 p-4 bg-gradient-to-br from-brand-500/10 to-purple-500/10 border border-brand-500/20 rounded-2xl text-center">
<div class="w-12 h-12 rounded-full bg-gradient-to-br from-brand-500 to-purple-500 flex items-center justify-center text-white text-xl mb-2 mx-auto"></div>
<h4 class="text-base font-bold text-white mb-1">서버 준비 완료!</h4>
<p class="text-slate-400 text-xs mb-3">인스턴스가 활성화되었습니다</p>
<div class="flex gap-2">
<button @click="resetLauncher" class="flex-1 py-2.5 bg-slate-800 hover:bg-slate-700 text-white font-semibold rounded-xl transition text-sm">닫기</button>
<a href="https://t.me/AnvilForgeBot" target="_blank" rel="noopener noreferrer" class="flex-1 py-2.5 bg-gradient-to-r from-brand-600 to-brand-500 text-white font-semibold rounded-xl transition text-center text-sm">Console →</a>
</div>
</div>
</div>
</div>
</div>
<!-- Scroll Animation Script -->
<script>
// Intersection Observer for scroll animations
document.addEventListener('DOMContentLoaded', () => {
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
observer.unobserve(entry.target);
}
});
}, observerOptions);
// Observe all animate-on-scroll elements
document.querySelectorAll('.animate-on-scroll').forEach(el => {
observer.observe(el);
});
});
</script>
</body>
</html>