- layouts.presentation → layouts.app 변경 (13개 파일) - 슬라이드 높이: 100vh → calc(100vh - 80px) - 슬라이드 번호 위치 중앙 정렬
487 lines
25 KiB
PHP
487 lines
25 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('title', '대한민국 RAG 스타트업 현황 분석')
|
|
|
|
@push('styles')
|
|
<style>
|
|
body {
|
|
font-family: 'Noto Sans KR', sans-serif;
|
|
}
|
|
.chart-container {
|
|
position: relative;
|
|
width: 100%;
|
|
max-width: 600px;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
height: 320px;
|
|
max-height: 400px;
|
|
}
|
|
@media (min-width: 640px) {
|
|
.chart-container {
|
|
height: 400px;
|
|
}
|
|
}
|
|
.nav-link {
|
|
padding: 0.5rem 0.75rem;
|
|
border-radius: 0.375rem;
|
|
font-size: 0.875rem;
|
|
font-weight: 500;
|
|
color: #374151;
|
|
transition: all 0.2s;
|
|
}
|
|
.nav-link:hover {
|
|
background-color: #f0fdfa;
|
|
color: #0f766e;
|
|
}
|
|
.nav-link.active {
|
|
background-color: #ccfbf1;
|
|
color: #115e59;
|
|
}
|
|
.tab-button {
|
|
padding: 0.5rem 1rem;
|
|
font-size: 0.875rem;
|
|
font-weight: 500;
|
|
border-radius: 0.5rem 0.5rem 0 0;
|
|
transition: all 0.2s;
|
|
border-bottom: 2px solid transparent;
|
|
}
|
|
.tab-button.active {
|
|
border-bottom-color: #0d9488;
|
|
color: #0f766e;
|
|
}
|
|
.tab-button:not(.active) {
|
|
border-bottom-color: transparent;
|
|
color: #6b7280;
|
|
}
|
|
.tab-button:not(.active):hover {
|
|
color: #374151;
|
|
border-bottom-color: #d1d5db;
|
|
}
|
|
.content-section {
|
|
padding-top: 5rem;
|
|
margin-top: -4rem;
|
|
}
|
|
.company-card {
|
|
background: white;
|
|
padding: 1rem;
|
|
border-radius: 0.5rem;
|
|
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
|
|
border: 1px solid #e5e7eb;
|
|
transition: box-shadow 0.2s;
|
|
}
|
|
.company-card:hover {
|
|
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
|
}
|
|
</style>
|
|
@endpush
|
|
|
|
@section('content')
|
|
<div class="bg-amber-50 text-gray-800 min-h-screen">
|
|
<!-- Sticky Header -->
|
|
<header class="bg-white shadow-sm sticky top-0 z-40 w-full">
|
|
<nav class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
<div class="flex justify-between items-center h-16">
|
|
<div class="flex-shrink-0">
|
|
<h1 class="text-xl font-bold text-teal-800">대한민국 RAG 스타트업 현황</h1>
|
|
</div>
|
|
<div class="hidden sm:block sm:ml-6">
|
|
<div class="flex space-x-4">
|
|
<a href="#intro" class="nav-link active">RAG 소개</a>
|
|
<a href="#market" class="nav-link">시장 현황</a>
|
|
<a href="#players" class="nav-link">주요 기업</a>
|
|
<a href="#tech" class="nav-link">기술 트렌드</a>
|
|
<a href="#usecases" class="nav-link">도입 사례</a>
|
|
<a href="#outlook" class="nav-link">전망</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
</header>
|
|
|
|
<main class="max-w-6xl mx-auto p-4 sm:p-6 lg:p-8">
|
|
<!-- Section 1: RAG 소개 -->
|
|
<section id="intro" class="content-section mb-12">
|
|
<h2 class="text-3xl font-bold text-center mb-6 text-teal-900">RAG (Retrieval-Augmented Generation)란?</h2>
|
|
<p class="text-lg text-gray-700 mb-8 max-w-3xl mx-auto text-center">
|
|
RAG는 '검색 증강 생성'의 약자로, 대규모 언어 모델(LLM)이 최신 정보나 특정 도메인 지식에 접근할 수 있도록 외부 데이터베이스에서 관련 정보를 검색하여 이를 기반으로 답변을 생성하는 기술입니다.
|
|
</p>
|
|
|
|
<!-- RAG Architecture Diagram -->
|
|
<div class="max-w-4xl mx-auto bg-white p-6 rounded-lg shadow-lg border border-gray-200">
|
|
<h3 class="text-xl font-bold text-center mb-4 text-gray-800">RAG 시스템 아키텍처</h3>
|
|
<div class="flex flex-col md:flex-row items-center justify-between space-y-4 md:space-y-0 md:space-x-4">
|
|
<div class="flex flex-col items-center text-center p-3 bg-gray-50 rounded-lg w-full md:w-1/4">
|
|
<svg class="w-10 h-10 mb-2 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z" />
|
|
</svg>
|
|
<span class="font-bold">사용자 질문</span>
|
|
<p class="text-sm text-gray-600">"최신 AI 트렌드는?"</p>
|
|
</div>
|
|
|
|
<span class="text-2xl font-bold text-teal-600 hidden md:block">→</span>
|
|
<span class="text-2xl font-bold text-teal-600 md:hidden">↓</span>
|
|
|
|
<div class="flex flex-col items-center text-center p-3 bg-teal-50 rounded-lg w-full md:w-1/3">
|
|
<svg class="w-10 h-10 mb-2 text-teal-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" />
|
|
</svg>
|
|
<span class="font-bold">1. Retriever (검색)</span>
|
|
<p class="text-sm text-gray-600">Vector DB 등 외부 지식 소스에서 관련 문서 검색</p>
|
|
</div>
|
|
|
|
<span class="text-2xl font-bold text-teal-600 hidden md:block">→</span>
|
|
<span class="text-2xl font-bold text-teal-600 md:hidden">↓</span>
|
|
|
|
<div class="flex flex-col items-center text-center p-3 bg-teal-50 rounded-lg w-full md:w-1/3">
|
|
<svg class="w-10 h-10 mb-2 text-teal-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09zM18.259 8.715L18 9.75l-.259-1.035a3.375 3.375 0 00-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 002.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 002.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 00-2.456 2.456zM16.894 20.567L16.5 21.75l-.394-1.183a2.25 2.25 0 00-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 001.423-1.423l.394-1.183.394 1.183a2.25 2.25 0 001.423 1.423l1.183.394-1.183.394a2.25 2.25 0 00-1.423 1.423z" />
|
|
</svg>
|
|
<span class="font-bold">2. Generator (LLM)</span>
|
|
<p class="text-sm text-gray-600">질문 + 검색된 문서를 기반으로 정확한 답변 생성</p>
|
|
</div>
|
|
|
|
<span class="text-2xl font-bold text-teal-600 hidden md:block">→</span>
|
|
<span class="text-2xl font-bold text-teal-600 md:hidden">↓</span>
|
|
|
|
<div class="flex flex-col items-center text-center p-3 bg-gray-50 rounded-lg w-full md:w-1/4">
|
|
<svg class="w-10 h-10 mb-2 text-amber-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 18v-5.25m0 0a6.01 6.01 0 001.5-.189m-1.5.189a6.01 6.01 0 01-1.5-.189m3.75 7.478a12.06 12.06 0 01-4.5 0m3.75 2.383a14.406 14.406 0 01-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 10-7.517 0c.85.493 1.509 1.333 1.509 2.316V18" />
|
|
</svg>
|
|
<span class="font-bold">최종 답변</span>
|
|
<p class="text-sm text-gray-600">"최신 트렌드는... (검색된 정보 기반)"</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Section 2: 시장 현황 -->
|
|
<section id="market" class="content-section mb-12">
|
|
<h2 class="text-3xl font-bold text-center mb-6 text-teal-900">국내 RAG 시장 현황</h2>
|
|
<p class="text-lg text-gray-700 mb-8 max-w-3xl mx-auto text-center">
|
|
국내 RAG 시장은 생성형 AI의 기업 도입이 가속화되면서 폭발적으로 성장하고 있습니다.
|
|
</p>
|
|
|
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8">
|
|
<div class="bg-white p-6 rounded-lg shadow-md text-center border border-gray-200">
|
|
<h3 class="text-xl font-bold text-teal-800 mb-2">시장 규모 (2024년 예상)</h3>
|
|
<p class="text-4xl font-bold text-gray-900">500억+</p>
|
|
<p class="text-sm text-gray-600">원</p>
|
|
</div>
|
|
<div class="bg-white p-6 rounded-lg shadow-md text-center border border-gray-200">
|
|
<h3 class="text-xl font-bold text-teal-800 mb-2">연평균 성장률 (CAGR)</h3>
|
|
<p class="text-4xl font-bold text-gray-900">35%</p>
|
|
<p class="text-sm text-gray-600">2024-2027년 예상</p>
|
|
</div>
|
|
<div class="bg-white p-6 rounded-lg shadow-md text-center border border-gray-200">
|
|
<h3 class="text-xl font-bold text-teal-800 mb-2">주요 성장 동력</h3>
|
|
<p class="text-lg font-medium text-gray-900">기업 맞춤형 AI</p>
|
|
<p class="text-sm text-gray-600">데이터 보안 및 환각 감소 요구</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="bg-white p-6 rounded-lg shadow-lg border border-gray-200">
|
|
<h3 class="text-xl font-bold text-center mb-4 text-gray-800">연도별 국내 RAG 시장 투자 규모</h3>
|
|
<div class="chart-container">
|
|
<canvas id="investmentChart"></canvas>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Section 3: 주요 기업 -->
|
|
<section id="players" class="content-section mb-12">
|
|
<h2 class="text-3xl font-bold text-center mb-6 text-teal-900">주요 RAG 스타트업</h2>
|
|
<p class="text-lg text-gray-700 mb-8 max-w-3xl mx-auto text-center">
|
|
국내 RAG 시장은 다양한 배경의 스타트업들이 경쟁하고 있습니다.
|
|
</p>
|
|
|
|
<div class="border-b border-gray-300 mb-6">
|
|
<nav class="-mb-px flex justify-center space-x-6" aria-label="Tabs">
|
|
<button class="tab-button active" data-filter="all">전체</button>
|
|
<button class="tab-button" data-filter="search">AI 검색 솔루션</button>
|
|
<button class="tab-button" data-filter="b2b">B2B SaaS</button>
|
|
<button class="tab-button" data-filter="domain">특화 도메인</button>
|
|
</nav>
|
|
</div>
|
|
|
|
<div id="playerGrid" class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
<div class="company-card" data-category="search">
|
|
<h3 class="text-xl font-bold text-teal-800">Upstage (업스테이지)</h3>
|
|
<p class="text-sm font-medium text-gray-600 mb-2">AI 검색 솔루션</p>
|
|
<p class="text-gray-700">자체 LLM 'Solar'와 RAG 기술을 결합한 Document AI 솔루션 제공.</p>
|
|
</div>
|
|
<div class="company-card" data-category="search">
|
|
<h3 class="text-xl font-bold text-teal-800">Wrtn (뤼튼)</h3>
|
|
<p class="text-sm font-medium text-gray-600 mb-2">AI 검색 솔루션</p>
|
|
<p class="text-gray-700">AI 포털 서비스 '뤼튼'을 통해 RAG 기반 검색 및 콘텐츠 생성 기능 제공.</p>
|
|
</div>
|
|
<div class="company-card" data-category="b2b">
|
|
<h3 class="text-xl font-bold text-teal-800">Allganize (올거나이즈)</h3>
|
|
<p class="text-sm font-medium text-gray-600 mb-2">B2B SaaS</p>
|
|
<p class="text-gray-700">기업용 LLM 앱 빌더 '알리(Alli)' 제공. 사내 문서 기반 Q&A에 강점.</p>
|
|
</div>
|
|
<div class="company-card" data-category="search">
|
|
<h3 class="text-xl font-bold text-teal-800">42Maru (포티투마루)</h3>
|
|
<p class="text-sm font-medium text-gray-600 mb-2">AI 검색 솔루션</p>
|
|
<p class="text-gray-700">'QA42' 등 시맨틱 검색 기반 AI 솔루션. 정확한 의도 파악 기술 보유.</p>
|
|
</div>
|
|
<div class="company-card" data-category="domain">
|
|
<h3 class="text-xl font-bold text-teal-800">Law&Company (로앤컴퍼니)</h3>
|
|
<p class="text-sm font-medium text-gray-600 mb-2">특화 도메인 (법률)</p>
|
|
<p class="text-gray-700">'로톡' 서비스를 통해 RAG 기반 법률 정보 검색 및 상담 서비스 고도화.</p>
|
|
</div>
|
|
<div class="company-card" data-category="b2b">
|
|
<h3 class="text-xl font-bold text-teal-800">Mindlogic (마인드로직)</h3>
|
|
<p class="text-sm font-medium text-gray-600 mb-2">B2B SaaS</p>
|
|
<p class="text-gray-700">AI 페르소나 기술과 RAG를 결합하여 기업 맞춤형 가상 상담원 제공.</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Section 4: 기술 트렌드 -->
|
|
<section id="tech" class="content-section mb-12">
|
|
<h2 class="text-3xl font-bold text-center mb-6 text-teal-900">기술 트렌드 및 과제</h2>
|
|
<p class="text-lg text-gray-700 mb-8 max-w-3xl mx-auto text-center">
|
|
RAG 기술이 상용화되면서 여러 기술적 과제들이 대두되고 있습니다.
|
|
</p>
|
|
|
|
<div class="bg-white p-6 rounded-lg shadow-lg border border-gray-200">
|
|
<h3 class="text-xl font-bold text-center mb-4 text-gray-800">RAG 기술 핵심 과제</h3>
|
|
<div class="chart-container">
|
|
<canvas id="techRadarChart"></canvas>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Section 5: 도입 사례 -->
|
|
<section id="usecases" class="content-section mb-12">
|
|
<h2 class="text-3xl font-bold text-center mb-6 text-teal-900">주요 도입 사례</h2>
|
|
<p class="text-lg text-gray-700 mb-8 max-w-3xl mx-auto text-center">
|
|
RAG 시스템은 다양한 산업 분야에서 기업의 생산성을 높이는 데 활용되고 있습니다.
|
|
</p>
|
|
|
|
<div class="max-w-3xl mx-auto">
|
|
<div class="border-b border-gray-300 mb-4">
|
|
<nav class="-mb-px flex space-x-4" aria-label="Tabs">
|
|
<button class="usecase-tab-button tab-button active" data-target="usecase-1">고객 지원</button>
|
|
<button class="usecase-tab-button tab-button" data-target="usecase-2">사내 지식 관리</button>
|
|
<button class="usecase-tab-button tab-button" data-target="usecase-3">전문 리서치</button>
|
|
</nav>
|
|
</div>
|
|
|
|
<div id="usecase-content">
|
|
<div id="usecase-1" class="usecase-content-panel p-4 bg-white rounded-lg shadow border">
|
|
<h3 class="text-xl font-bold text-teal-800 mb-2">고객 지원 및 상담 챗봇</h3>
|
|
<p class="text-gray-700">최신 제품 매뉴얼, FAQ, 약관 등을 실시간으로 검색하여 고객 문의에 24시간 정확하게 응대합니다.</p>
|
|
<p class="text-sm text-gray-600 mt-2"><strong>주요 기업:</strong> 금융사, 이커머스, 통신사</p>
|
|
</div>
|
|
<div id="usecase-2" class="usecase-content-panel p-4 bg-white rounded-lg shadow border hidden">
|
|
<h3 class="text-xl font-bold text-teal-800 mb-2">사내 지식 관리 및 검색</h3>
|
|
<p class="text-gray-700">방대한 양의 내부 문서를 학습하여 직원이 필요한 정보를 빠르게 찾고 요약할 수 있도록 돕습니다.</p>
|
|
<p class="text-sm text-gray-600 mt-2"><strong>주요 기업:</strong> 대기업, IT/제조업</p>
|
|
</div>
|
|
<div id="usecase-3" class="usecase-content-panel p-4 bg-white rounded-lg shadow border hidden">
|
|
<h3 class="text-xl font-bold text-teal-800 mb-2">전문 분야 리서치 (법률, 의료)</h3>
|
|
<p class="text-gray-700">수만 건의 판례, 논문, 특허 등 전문 자료를 RAG로 분석하여 리서치 시간을 획기적으로 단축시킵니다.</p>
|
|
<p class="text-sm text-gray-600 mt-2"><strong>주요 기업:</strong> 로펌, 병원, 연구소</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Section 6: 전망 -->
|
|
<section id="outlook" class="content-section">
|
|
<h2 class="text-3xl font-bold text-center mb-6 text-teal-900">시장 전망 및 결론</h2>
|
|
<div class="max-w-3xl mx-auto bg-white p-6 rounded-lg shadow-lg border border-gray-200 space-y-4">
|
|
<div>
|
|
<h3 class="text-xl font-bold text-gray-800">핵심 전망</h3>
|
|
<ul class="list-disc list-inside text-gray-700 mt-2 space-y-1">
|
|
<li><strong>수직적 확장:</strong> 법률, 의료, 금융, 교육 등 특정 도메인에 고도로 특화된 RAG 솔루션이 증가할 것입니다.</li>
|
|
<li><strong>기술 고도화:</strong> 단순 검색을 넘어, 복잡한 추론과 데이터 분석이 가능한 'Advanced RAG' 기술 경쟁이 심화될 것입니다.</li>
|
|
<li><strong>M&A 및 파트너십:</strong> 대형 IT 기업 및 클라우드 사업자(CSP)와의 파트너십, 혹은 기술력 있는 스타트업의 M&A가 활발해질 전망입니다.</li>
|
|
</ul>
|
|
</div>
|
|
<div>
|
|
<h3 class="text-xl font-bold text-gray-800">결론</h3>
|
|
<p class="text-gray-700 mt-2">
|
|
RAG는 생성형 AI의 한계를 극복하고 기업 환경에 실질적인 가치를 제공하는 핵심 기술입니다. 국내 스타트업들은 한국어 처리 능력과 각 산업 도메인에 대한 깊은 이해를 바탕으로 글로벌 시장에서도 경쟁력 있는 솔루션을 만들어낼 잠재력을 가지고 있습니다.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<footer class="bg-white mt-16 border-t border-gray-200">
|
|
<div class="max-w-6xl mx-auto py-6 px-4 text-center text-sm text-gray-500">
|
|
<p>© 2025 RAG Startup Analysis. 이 데이터는 분석 목적으로 작성되었습니다.</p>
|
|
</div>
|
|
</footer>
|
|
</div>
|
|
@endsection
|
|
|
|
@push('scripts')
|
|
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
// Bar Chart - Investment
|
|
const renderBarChart = () => {
|
|
const ctx = document.getElementById('investmentChart').getContext('2d');
|
|
if (window.myInvestmentChart) {
|
|
window.myInvestmentChart.destroy();
|
|
}
|
|
window.myInvestmentChart = new Chart(ctx, {
|
|
type: 'bar',
|
|
data: {
|
|
labels: ['2022년', '2023년', '2024년 (E)', '2025년 (F)'],
|
|
datasets: [{
|
|
label: '투자 규모 (억 원)',
|
|
data: [80, 250, 520, 900],
|
|
backgroundColor: 'rgba(13, 148, 136, 0.6)',
|
|
borderColor: 'rgba(13, 148, 136, 1)',
|
|
borderWidth: 1,
|
|
borderRadius: 4
|
|
}]
|
|
},
|
|
options: {
|
|
responsive: true,
|
|
maintainAspectRatio: false,
|
|
plugins: {
|
|
legend: { display: false }
|
|
},
|
|
scales: {
|
|
y: {
|
|
beginAtZero: true,
|
|
title: { display: true, text: '투자 규모 (억 원)' }
|
|
},
|
|
x: { grid: { display: false } }
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
// Radar Chart - Tech Challenges
|
|
const renderRadarChart = () => {
|
|
const ctx = document.getElementById('techRadarChart').getContext('2d');
|
|
if (window.myRadarChart) {
|
|
window.myRadarChart.destroy();
|
|
}
|
|
window.myRadarChart = new Chart(ctx, {
|
|
type: 'radar',
|
|
data: {
|
|
labels: ['환각 감소', '한국어 처리', '비용 효율성', '데이터 보안', '검색 정확도'],
|
|
datasets: [{
|
|
label: '기술적 중요도 및 과제',
|
|
data: [9, 8, 7, 9, 10],
|
|
fill: true,
|
|
backgroundColor: 'rgba(13, 148, 136, 0.2)',
|
|
borderColor: 'rgba(13, 148, 136, 1)',
|
|
pointBackgroundColor: 'rgba(13, 148, 136, 1)',
|
|
pointBorderColor: '#fff'
|
|
}]
|
|
},
|
|
options: {
|
|
responsive: true,
|
|
maintainAspectRatio: false,
|
|
plugins: { legend: { position: 'top' } },
|
|
scales: {
|
|
r: {
|
|
beginAtZero: true,
|
|
max: 10,
|
|
pointLabels: { font: { size: 12 } }
|
|
}
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
// Navigation scroll
|
|
const initNav = () => {
|
|
const navLinks = document.querySelectorAll('.nav-link');
|
|
const sections = document.querySelectorAll('.content-section');
|
|
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
navLinks.forEach(link => {
|
|
link.classList.remove('active');
|
|
if (link.getAttribute('href') === `#${entry.target.id}`) {
|
|
link.classList.add('active');
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}, { rootMargin: '-20% 0px -70% 0px', threshold: 0.1 });
|
|
|
|
sections.forEach(section => observer.observe(section));
|
|
|
|
navLinks.forEach(link => {
|
|
link.addEventListener('click', (e) => {
|
|
e.preventDefault();
|
|
const targetId = e.currentTarget.getAttribute('href');
|
|
const targetElement = document.querySelector(targetId);
|
|
if (targetElement) {
|
|
const headerOffset = 70;
|
|
const elementPosition = targetElement.getBoundingClientRect().top;
|
|
const offsetPosition = elementPosition + window.pageYOffset - headerOffset;
|
|
window.scrollTo({ top: offsetPosition, behavior: 'smooth' });
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
// Player Filters
|
|
const initPlayerFilters = () => {
|
|
const filterButtons = document.querySelectorAll('#players .tab-button');
|
|
const playerCards = document.querySelectorAll('#playerGrid .company-card');
|
|
|
|
filterButtons.forEach(button => {
|
|
button.addEventListener('click', () => {
|
|
const filter = button.getAttribute('data-filter');
|
|
filterButtons.forEach(btn => btn.classList.remove('active'));
|
|
button.classList.add('active');
|
|
|
|
playerCards.forEach(card => {
|
|
if (filter === 'all' || card.getAttribute('data-category') === filter) {
|
|
card.style.display = 'block';
|
|
} else {
|
|
card.style.display = 'none';
|
|
}
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
// Use Case Tabs
|
|
const initUseCaseTabs = () => {
|
|
const tabButtons = document.querySelectorAll('.usecase-tab-button');
|
|
const contentPanels = document.querySelectorAll('.usecase-content-panel');
|
|
|
|
tabButtons.forEach(button => {
|
|
button.addEventListener('click', () => {
|
|
const targetId = button.getAttribute('data-target');
|
|
tabButtons.forEach(btn => btn.classList.remove('active'));
|
|
button.classList.add('active');
|
|
|
|
contentPanels.forEach(panel => {
|
|
if (panel.id === targetId) {
|
|
panel.classList.remove('hidden');
|
|
} else {
|
|
panel.classList.add('hidden');
|
|
}
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
initNav();
|
|
renderBarChart();
|
|
renderRadarChart();
|
|
initPlayerFilters();
|
|
initUseCaseTabs();
|
|
|
|
window.addEventListener('resize', () => {
|
|
renderBarChart();
|
|
renderRadarChart();
|
|
});
|
|
});
|
|
</script>
|
|
@endpush |