<!DOCTYPE html>




<html lang="ko">
<head>
    <meta charset="UTF-8">
    <script>document.documentElement.setAttribute('data-theme',localStorage.getItem('theme')||'light')</script>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>실전코딩 기술 블로그 | 실전코딩 기술 블로그</title>
    <meta name="description" content="실무에서 배운 개발 노하우와 기술적 인사이트를 공유합니다">
    
    <!-- 다국어 hreflang 태그 -->
    <link rel="alternate" hreflang="ko" href="https://realcoding.blog/assets/css/main.css" />
        <link rel="alternate" hreflang="x-default" href="https://realcoding.blog/assets/css/main.css" />
        
          <link rel="alternate" hreflang="en" href="https://realcoding.blog/en/assets/css/main.css" />
          <link rel="alternate" hreflang="ja" href="https://realcoding.blog/ja/assets/css/main.css" />
        
    

    <!-- Favicon -->
    <link rel="icon" type="image/x-icon" href="/assets/favicons/favicon.ico">
    <link rel="apple-touch-icon" sizes="180x180" href="/assets/favicons/apple-touch-icon.png">
    <link rel="icon" type="image/png" sizes="192x192" href="/assets/favicons/android-chrome-192x192.png">
    <link rel="icon" type="image/png" sizes="512x512" href="/assets/favicons/android-chrome-512x512.png">
    <link rel="manifest" href="/assets/favicons/manifest.webmanifest">
    
    <!-- CSS -->
    <link rel="stylesheet" href="/assets/css/main.css">
    
    <!-- Pretendard Font -->
    <link rel="stylesheet" as="style" crossorigin href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable.min.css" />
    
    <!-- Highlight.js for Code Syntax Highlighting -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github-dark.min.css" media="(prefers-color-scheme: dark)">
    
    <!-- Theme color -->
    <meta name="theme-color" content="#0969da">
    
    <!-- Dynamic OG Image Selection -->
    
    
    <!-- Open Graph / Facebook -->
    <meta property="og:type" content="website">
    <meta property="og:url" content="https://realcoding.blog/assets/css/main.css">
    <meta property="og:title" content="실전코딩 기술 블로그">
    <meta property="og:description" content="실무에서 배운 개발 노하우와 기술적 인사이트를 공유합니다">
    <meta property="og:image" content="https://realcoding.blog/assets/images/og-default.jpg">
    
    <!-- Twitter -->
    <meta property="twitter:card" content="summary_large_image">
    <meta property="twitter:url" content="https://realcoding.blog/assets/css/main.css">
    <meta property="twitter:title" content="실전코딩 기술 블로그">
    <meta property="twitter:description" content="실무에서 배운 개발 노하우와 기술적 인사이트를 공유합니다">
    <meta property="twitter:image" content="https://realcoding.blog/assets/images/og-default.jpg">
    
    <!-- SEO Tags -->
    <!-- Begin Jekyll SEO tag v2.8.0 -->
<title>실전코딩 기술 블로그 | 실무에서 배운 개발 노하우와 기술적 인사이트를 공유합니다</title>
<meta name="generator" content="Jekyll v3.10.0" />
<meta property="og:title" content="실전코딩 기술 블로그" />
<meta name="author" content="실전코딩" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="실무에서 배운 개발 노하우와 기술적 인사이트를 공유합니다" />
<meta property="og:description" content="실무에서 배운 개발 노하우와 기술적 인사이트를 공유합니다" />
<link rel="canonical" href="https://realcoding.blog/assets/css/main.css" />
<meta property="og:url" content="https://realcoding.blog/assets/css/main.css" />
<meta property="og:site_name" content="실전코딩 기술 블로그" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="실전코딩 기술 블로그" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebPage","author":{"@type":"Person","name":"실전코딩"},"description":"실무에서 배운 개발 노하우와 기술적 인사이트를 공유합니다","headline":"실전코딩 기술 블로그","url":"https://realcoding.blog/assets/css/main.css"}</script>
<!-- End Jekyll SEO tag -->


    <!-- JSON-LD Structured Data -->
    <script type="application/ld+json">
    {
        "@context": "https://schema.org",
        "@type": "WebSite",
        "name": "실전코딩 기술 블로그",
        "url": "https://realcoding.blog",
        "description": "실무에서 배운 개발 노하우와 기술적 인사이트를 공유합니다",
        "inLanguage": "ko"
    }
    </script>
    
    <!-- Google Analytics -->
    
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MEFBMHM6FK"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-MEFBMHM6FK');
</script>
 
    
</head>

<body>
    <!-- Header -->
    


<header class="site-header">
    <div class="container">
        <div class="header-content">
            <!-- 로고/브랜드 -->
            <div class="site-brand">
                
                    <a href="/" class="brand-link">
                
                    <img src="/assets/images/logo.png" alt="실전코딩 기술 블로그" class="brand-logo">
                    <span class="brand-text sr-only">실전코딩 기술 블로그</span>
                </a>
            </div>

            <!-- 네비게이션 -->
            <nav class="main-nav">
                <ul class="nav-list">
                    <li class="nav-item">
                        
                            <a href="/" class="nav-link ">
                        
                            홈
                        </a>
                    </li>
                    <li class="nav-item">
                        
                            <a href="/archive" class="nav-link ">
                        
                            아카이브
                        </a>
                    </li>
                    <li class="nav-item">
                        
                            <a href="/about" class="nav-link ">
                        
                            소개
                        </a>
                    </li>
                </ul>
            </nav>

            <!-- 유틸리티 -->
            <div class="header-utilities">
                <!-- 언어 전환 (인라인) -->
                <div class="language-switcher">
                    
                        
                            
                            <a href="/" class="lang-btn active">
                                KO
                            </a>
                        
                            
                            <a href="/en/" class="lang-btn ">
                                EN
                            </a>
                        
                            
                            <a href="/ja/" class="lang-btn ">
                                JA
                            </a>
                        
                    
                </div>

                <!-- 다크모드 토글 -->
                <button class="theme-toggle" id="themeToggle" title="Toggle Dark Mode" aria-label="Toggle Dark Mode">
                    ☀
                </button>
            </div>

            <!-- 모바일 메뉴 -->
            <button class="mobile-menu-toggle" aria-label="">
                <span class="hamburger-line"></span>
                <span class="hamburger-line"></span>
                <span class="hamburger-line"></span>
            </button>
        </div>
    </div>
</header>

    
    <!-- Main Content -->
    <main class="main-content">
        /* ===========================
   1. RESET & BASE
   =========================== */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

*,
*::before,
*::after {
    box-sizing: border-box;
}

html,
body {
    margin: 0;
    padding: 0;
    width: 100%;
    height: 100%;
}

/* ===========================
   2. DESIGN TOKENS
   =========================== */
:root {
    /* GitHub-inspired Colors */
    --primary-color: #0969da;
    --primary-hover: #0550ae;
    --primary-muted: #ddf4ff;
    --success-color: #1a7f37;
    --warning-color: #9a6700;
    --danger-color: #cf222e;

    /* Neutral Palette */
    --text-primary: #1f2328;
    --text-secondary: #656d76;
    --text-muted: #8b949e;
    --background: #ffffff;
    --surface: #f6f8fa;
    --border: #d1d9e0;
    --border-muted: #d8dee4;
    --shadow: rgba(31, 35, 40, 0.04);
    --shadow-md: rgba(31, 35, 40, 0.08);

    /* Typography */
    --font-family: 'Pretendard Variable', Pretendard, -apple-system, BlinkMacSystemFont, system-ui, Roboto, 'Helvetica Neue', 'Segoe UI', 'Apple SD Gothic Neo', 'Noto Sans KR', 'Malgun Gothic', sans-serif;
    --font-mono: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
    --font-size-xs: 0.75rem;
    --font-size-sm: 0.875rem;
    --font-size-base: 1rem;
    --font-size-lg: 1.125rem;
    --font-size-xl: 1.25rem;
    --font-size-2xl: 1.5rem;
    --font-size-3xl: 2rem;

    /* Spacing */
    --spacing-xs: 0.25rem;
    --spacing-sm: 0.5rem;
    --spacing-md: 1rem;
    --spacing-lg: 1.5rem;
    --spacing-xl: 2rem;
    --spacing-2xl: 2.5rem;
    --spacing-3xl: 3rem;

    /* Border radius */
    --radius-sm: 4px;
    --radius-md: 6px;
    --radius-lg: 8px;
    --radius-xl: 12px;
    --radius-full: 9999px;

    /* Transitions */
    --transition: all 0.2s ease;
}

/* ===========================
   3. DARK MODE
   =========================== */
[data-theme="dark"] {
    --primary-color: #4493f8;
    --primary-hover: #58a6ff;
    --primary-muted: #0d1d30;
    --text-primary: #e6edf3;
    --text-secondary: #8b949e;
    --text-muted: #656d76;
    --background: #0d1117;
    --surface: #161b22;
    --border: #30363d;
    --border-muted: #21262d;
    --shadow: rgba(0, 0, 0, 0.2);
    --shadow-md: rgba(0, 0, 0, 0.3);
}

/* ===========================
   4. TYPOGRAPHY & BASE
   =========================== */
body {
    font-family: var(--font-family);
    font-size: var(--font-size-base);
    line-height: 1.6;
    color: var(--text-primary);
    background-color: var(--background);
    transition: background-color 0.2s ease, color 0.2s ease;
}

h1, h2, h3, h4, h5, h6 {
    font-weight: 600;
    line-height: 1.3;
    margin-bottom: var(--spacing-md);
    color: var(--text-primary);
}

h1 { font-size: var(--font-size-3xl); }
h2 { font-size: var(--font-size-2xl); }
h3 { font-size: var(--font-size-xl); }
h4 { font-size: var(--font-size-lg); }
h5 { font-size: var(--font-size-base); }
h6 { font-size: var(--font-size-sm); }

p {
    margin-bottom: var(--spacing-md);
    color: var(--text-secondary);
}

a {
    color: var(--primary-color);
    text-decoration: none;
    transition: color 0.2s ease;
}

a:hover {
    color: var(--primary-hover);
    text-decoration: underline;
}

/* ===========================
   5. LAYOUT
   =========================== */
.container {
    width: 1000px;
    max-width: 100%;
    margin: 0 auto;
    padding: 0 var(--spacing-md);
}

.blog-hero .container,
.about-hero .container,
.post-hero .container {
    max-width: 100%;
}

.content-container {
    max-width: 100%;
    margin: 0 auto;
}

.main-content {
    margin-top: 64px;
    min-height: calc(100vh - 64px);
}

/* ===========================
   6. BUTTONS
   =========================== */
.btn {
    display: inline-block;
    padding: var(--spacing-sm) var(--spacing-lg);
    border: 1px solid var(--border);
    border-radius: var(--radius-md);
    font-size: var(--font-size-sm);
    font-weight: 500;
    font-family: var(--font-family);
    text-decoration: none;
    cursor: pointer;
    transition: var(--transition);
    text-align: center;
    background: var(--surface);
    color: var(--text-primary);
}

.btn:hover {
    background: var(--border);
    text-decoration: none;
}

.btn-primary {
    background: var(--primary-color);
    color: white;
    border-color: var(--primary-color);
}

.btn-primary:hover {
    background: var(--primary-hover);
    border-color: var(--primary-hover);
    text-decoration: none;
}

/* ===========================
   7. HEADER
   =========================== */
.site-header {
    background: var(--background);
    border-bottom: 1px solid var(--border);
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    width: 100%;
    z-index: 1000;
    height: 64px;
    display: flex;
    align-items: center;
    transition: background-color 0.2s ease;
}

.header-content {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--spacing-lg);
    height: 100%;
}

.header-utilities {
    display: flex;
    align-items: center;
    gap: var(--spacing-sm);
}

.site-brand .brand-link {
    display: flex;
    align-items: center;
    gap: var(--spacing-sm);
    font-size: var(--font-size-lg);
    font-weight: 600;
    color: var(--text-primary);
    text-decoration: none;
}

.site-brand .brand-link:hover {
    color: var(--primary-color);
    text-decoration: none;
}

.brand-text {
    font-weight: 600;
    color: inherit;
}

.brand-text.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    border: 0;
}

.brand-logo {
    height: 28px;
    width: auto;
    filter: invert(1) hue-rotate(180deg);
}

[data-theme="dark"] .brand-logo {
    filter: none;
}

.main-nav {
    display: flex;
    align-items: center;
}

.nav-list {
    display: flex;
    list-style: none;
    gap: var(--spacing-xs);
    margin: 0;
}

.nav-item {
    margin: 0;
}

.nav-link {
    display: flex;
    align-items: center;
    padding: 6px 12px;
    color: var(--text-secondary);
    font-weight: 500;
    border-radius: var(--radius-md);
    transition: var(--transition);
    white-space: nowrap;
    font-size: var(--font-size-sm);
    text-decoration: none;
}

.nav-link:hover {
    background: var(--surface);
    color: var(--text-primary);
    text-decoration: none;
}

.nav-link.active {
    color: var(--text-primary);
    font-weight: 600;
}

/* Language Switcher - Inline buttons */
.language-switcher {
    display: flex;
    align-items: center;
    gap: 2px;
    border: 1px solid var(--border);
    border-radius: var(--radius-md);
    overflow: hidden;
}

.lang-btn {
    background: none;
    border: none;
    color: var(--text-muted);
    font-size: var(--font-size-xs);
    font-weight: 500;
    font-family: var(--font-family);
    cursor: pointer;
    padding: 4px 8px;
    transition: var(--transition);
    text-decoration: none;
    line-height: 1;
}

.lang-btn:hover {
    color: var(--text-primary);
    background: var(--surface);
    text-decoration: none;
}

.lang-btn.active {
    color: var(--primary-color);
    font-weight: 600;
    background: var(--primary-muted);
}

/* Theme Toggle */
.theme-toggle {
    background: none;
    border: none;
    color: var(--text-secondary);
    font-size: var(--font-size-base);
    padding: 6px;
    border-radius: var(--radius-md);
    cursor: pointer;
    transition: var(--transition);
    display: flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
}

.theme-toggle:hover {
    background: var(--surface);
    color: var(--text-primary);
}

/* Mobile Menu Toggle */
.mobile-menu-toggle {
    display: none;
    flex-direction: column;
    gap: 4px;
    background: none;
    border: none;
    cursor: pointer;
    padding: var(--spacing-sm);
}

.hamburger-line {
    width: 20px;
    height: 2px;
    background: var(--text-primary);
    transition: var(--transition);
    border-radius: 1px;
}

/* ===========================
   8. BLOG HERO (Landing Page Style)
   =========================== */
.blog-hero,
.about-hero,
.post-hero {
    position: relative;
    min-height: 400px;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    background-color: var(--surface);
}

.post-hero {
    min-height: 360px;
}

.post-hero .hero-overlay {
    padding: var(--spacing-2xl) 0;
}

.post-hero .hero-text {
    max-width: 100%;
    padding: var(--spacing-xl) var(--spacing-lg);
}

.post-hero .hero-text h1 {
    font-size: 2rem;
    margin-bottom: var(--spacing-md);
    text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}

.post-hero .post-meta {
    color: rgba(255, 255, 255, 0.8);
    margin-bottom: var(--spacing-sm);
    font-size: var(--font-size-sm);
    text-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
}

.post-hero .post-meta a {
    color: rgba(255, 255, 255, 0.9);
}

.post-hero .post-tags {
    margin-top: var(--spacing-sm);
}

.post-hero .post-tags .tag {
    background: rgba(255, 255, 255, 0.12);
    color: rgba(255, 255, 255, 0.9);
    border-color: rgba(255, 255, 255, 0.2);
    font-size: var(--font-size-xs);
}

.post-hero .post-tags .tag:hover {
    background: rgba(255, 255, 255, 0.25);
}

.post-hero + .post-content h1:first-child {
    display: none;
}

.about-hero {
    min-height: 280px;
}

.about-hero .hero-overlay {
    background: linear-gradient(135deg, rgba(255,255,255,0.7) 0%, rgba(221,244,255,0.5) 100%);
}

[data-theme="dark"] .about-hero .hero-overlay {
    background: linear-gradient(135deg, rgba(13,17,23,0.8) 0%, rgba(22,27,34,0.7) 100%);
}

.about-hero .hero-text h1,
.about-hero .hero-subtitle {
    color: var(--text-primary);
}

[data-theme="dark"] .about-hero .hero-text h1,
[data-theme="dark"] .about-hero .hero-subtitle {
    color: #ffffff;
}

.hero-overlay {
    position: absolute;
    inset: 0;
    background: linear-gradient(135deg, rgba(13,17,23,0.85) 0%, rgba(9,105,218,0.6) 100%);
    display: flex;
    align-items: center;
}

[data-theme="dark"] .hero-overlay {
    background: linear-gradient(135deg, rgba(13,17,23,0.92) 0%, rgba(68,147,248,0.35) 100%);
}

[data-theme="dark"] .blog-hero,
[data-theme="dark"] .about-hero,
[data-theme="dark"] .post-hero {
    filter: brightness(0.8);
}

.hero-text {
    position: relative;
    z-index: 1;
    max-width: 600px;
    color: #ffffff;
}

.hero-text h1 {
    font-size: 2.5rem;
    font-weight: 800;
    margin-bottom: var(--spacing-md);
    color: #ffffff;
    line-height: 1.2;
    letter-spacing: -0.02em;
}

.hero-subtitle {
    font-size: var(--font-size-lg);
    color: rgba(255, 255, 255, 0.85);
    line-height: 1.6;
    margin: 0;
    font-weight: 400;
}

/* ===========================
   9. BLOG MAIN - POST LIST
   =========================== */
.blog-main {
    padding: var(--spacing-xl) 0;
    background: var(--background);
}

.blog-layout {
    max-width: 100%;
    margin: 0 auto;
}

.posts-feed {
    min-width: 0;
}

.section-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: var(--spacing-lg);
    padding-bottom: var(--spacing-md);
    border-bottom: 1px solid var(--border);
}

.section-header h2 {
    font-size: var(--font-size-xl);
    color: var(--text-primary);
    margin-bottom: 0;
    font-weight: 600;
}

.view-all-link {
    color: var(--primary-color);
    font-weight: 500;
    font-size: var(--font-size-sm);
    text-decoration: none;
}

.view-all-link:hover {
    text-decoration: underline;
}

/* Posts List */
.posts-list {
    display: flex;
    flex-direction: column;
}

.post-item {
    padding: var(--spacing-md) 0;
    border-bottom: 1px solid var(--border);
}

.post-item:last-child {
    border-bottom: none;
}

.post-item .post-title {
    margin-bottom: 4px;
    margin-top: 0;
}

.post-item .post-title a {
    color: var(--text-primary);
    text-decoration: none;
    font-size: var(--font-size-lg);
    font-weight: 600;
    line-height: 1.4;
}

.post-item .post-title a:hover {
    color: var(--primary-color);
    text-decoration: none;
}

.post-item .post-meta {
    display: flex;
    gap: var(--spacing-sm);
    margin-bottom: 4px;
    font-size: var(--font-size-sm);
    color: var(--text-muted);
    flex-wrap: wrap;
}

.post-date {
    font-weight: 400;
}

.post-category a {
    color: var(--primary-color);
    text-decoration: none;
    font-weight: 500;
}

.post-category a:hover {
    text-decoration: underline;
}

.post-excerpt {
    color: var(--text-secondary);
    font-size: var(--font-size-sm);
    line-height: 1.5;
    margin-bottom: 0;
}

.post-item .post-tags {
    display: flex;
    gap: var(--spacing-sm);
    flex-wrap: wrap;
    margin-top: 4px;
    margin-bottom: 0;
}

.post-item .post-tags .tag {
    background: transparent;
    color: var(--primary-color);
    font-size: var(--font-size-xs);
    font-weight: 500;
    text-decoration: none;
    border: none;
    padding: 0;
}

.post-item .post-tags .tag:hover {
    text-decoration: underline;
}

/* Pagination */
.pagination {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: var(--spacing-lg);
    padding: var(--spacing-xl) 0;
    margin-top: var(--spacing-lg);
    border-top: 1px solid var(--border);
}

.pagination-btn {
    padding: var(--spacing-sm) var(--spacing-lg);
    border-radius: var(--radius-md);
    font-size: var(--font-size-sm);
    font-weight: 500;
    color: var(--text-primary);
    text-decoration: none;
    transition: background-color 0.2s, color 0.2s;
}

.pagination-btn:hover {
    background-color: var(--bg-secondary);
}

.pagination-btn.disabled {
    color: var(--text-tertiary);
    pointer-events: none;
}

.pagination-info {
    font-size: var(--font-size-sm);
    color: var(--text-secondary);
    font-weight: 500;
}

/* ===========================
   10. POST & PAGE LAYOUT
   =========================== */
.post-header,
.page-header {
    padding: var(--spacing-2xl) 0 var(--spacing-xl);
    border-bottom: 1px solid var(--border);
    margin-bottom: var(--spacing-xl);
}

.post-title,
.page-title {
    font-size: var(--font-size-3xl);
    font-weight: 700;
    color: var(--text-primary);
    margin-bottom: var(--spacing-md);
    line-height: 1.2;
}

.page-subtitle {
    font-size: var(--font-size-lg);
    color: var(--text-secondary);
    margin-bottom: 0;
    font-weight: 400;
}

/* Post Meta in post header */
.post-header .post-meta {
    display: flex;
    gap: var(--spacing-lg);
    margin-bottom: var(--spacing-lg);
    font-size: var(--font-size-sm);
    color: var(--text-muted);
    flex-wrap: wrap;
}

.post-header .post-meta span {
    display: flex;
    align-items: center;
    gap: var(--spacing-xs);
}

.post-header .post-meta a {
    color: var(--primary-color);
    text-decoration: none;
}

.post-header .post-meta a:hover {
    text-decoration: underline;
}

/* Post Tags */
.post-tags {
    display: flex;
    gap: var(--spacing-sm);
    flex-wrap: wrap;
    margin-top: var(--spacing-md);
}

.post-tags .tag {
    background: var(--primary-muted);
    color: var(--primary-color);
    padding: 2px 8px;
    border-radius: var(--radius-full);
    font-size: var(--font-size-xs);
    text-decoration: none;
    font-weight: 500;
    transition: var(--transition);
}

.post-tags .tag:hover {
    background: var(--primary-color);
    color: white;
    text-decoration: none;
}

/* Post/Page Content Typography */
.post-content,
.page-content {
    padding: 0 0 var(--spacing-2xl);
}

.post-content .container,
.page-content .container {
    max-width: 100%;
    margin: 0 auto;
}

.post-content h1:first-child,
.page-content h1:first-child {
    margin-top: 0;
}

.post-content h2,
.post-content h3,
.post-content h4,
.post-content h5,
.post-content h6,
.page-content h2,
.page-content h3,
.page-content h4,
.page-content h5,
.page-content h6 {
    margin-top: 2rem;
    margin-bottom: 0.75rem;
    color: var(--text-primary);
}

.post-content h2,
.page-content h2 {
    padding-bottom: 0.375rem;
    border-bottom: 1px solid var(--border);
}

/* Lists */
.post-content ul,
.post-content ol,
.page-content ul,
.page-content ol {
    margin: 1rem 0;
    padding-left: 2rem;
    color: var(--text-secondary);
}

.post-content ul ul,
.post-content ol ol,
.post-content ul ol,
.post-content ol ul,
.page-content ul ul,
.page-content ol ol,
.page-content ul ol,
.page-content ol ul {
    margin: 0.25rem 0;
    padding-left: 1.5rem;
}

.post-content li,
.page-content li {
    margin-bottom: 0.25rem;
    line-height: 1.7;
}

.post-content li:last-child,
.page-content li:last-child {
    margin-bottom: 0;
}

.post-content li p,
.page-content li p {
    margin-bottom: 0.25rem;
}

.post-content li strong,
.page-content li strong {
    color: var(--text-primary);
}

/* Blockquotes */
.post-content blockquote,
.page-content blockquote {
    margin: 1.5rem 0;
    padding: 0.75rem 1rem;
    border-left: 3px solid var(--primary-color);
    background: var(--surface);
    border-radius: 0 var(--radius-md) var(--radius-md) 0;
    color: var(--text-secondary);
}

.post-content blockquote p:last-child,
.page-content blockquote p:last-child {
    margin-bottom: 0;
}

/* Code blocks */
.post-content pre:not(.mermaid),
.page-content pre:not(.mermaid) {
    margin: 1.5rem 0;
    border-radius: var(--radius-md);
    overflow-x: auto;
    border: 1px solid var(--border);
}

.post-content code,
.page-content code {
    font-family: var(--font-mono);
    font-size: 0.875em;
}

.post-content p code,
.page-content p code,
.post-content li code,
.page-content li code {
    background: var(--surface);
    padding: 0.15rem 0.4rem;
    border-radius: var(--radius-sm);
    color: var(--text-primary);
    border: 1px solid var(--border);
    font-size: 0.85em;
}

/* Mermaid diagrams */
.post-content pre.mermaid,
.page-content pre.mermaid {
    margin: 1.5rem 0;
    padding: 1.5rem;
    background: transparent !important;
    border-radius: var(--radius-lg);
    overflow: visible;
    border: 1px solid var(--border);
    text-align: center;
    cursor: pointer;
    transition: var(--transition);
}

.post-content pre.mermaid:hover,
.page-content pre.mermaid:hover {
    border-color: var(--primary-color);
}

.post-content .mermaid,
.page-content .mermaid,
.post-content div.mermaid,
.page-content div.mermaid {
    cursor: pointer;
    transition: var(--transition);
    border-radius: var(--radius-md);
    position: relative;
}

.post-content .mermaid svg,
.page-content .mermaid svg,
.post-content pre.mermaid svg,
.page-content pre.mermaid svg,
.post-content div.mermaid svg,
.page-content div.mermaid svg {
    pointer-events: none;
}

/* Tables */
.post-content table,
.page-content table {
    width: 100%;
    margin: 1.5rem 0;
    border-collapse: collapse;
    border: 1px solid var(--border);
    border-radius: var(--radius-md);
    overflow: hidden;
    font-size: var(--font-size-sm);
}

.table-wrapper {
    overflow-x: auto;
    margin: 1.5rem 0;
    border: 1px solid var(--border);
    border-radius: var(--radius-md);
}

.table-wrapper table {
    margin: 0;
    min-width: 100%;
    border: none;
}

.post-content th,
.post-content td,
.page-content th,
.page-content td {
    padding: 0.5rem 0.75rem;
    text-align: left;
    border-bottom: 1px solid var(--border);
}

.post-content th,
.page-content th {
    background: var(--surface);
    font-weight: 600;
    color: var(--text-primary);
}

.post-content tr:last-child td,
.page-content tr:last-child td {
    border-bottom: none;
}

/* Images */
.post-content img,
.page-content img {
    max-width: 100%;
    height: auto;
    margin: 1.5rem 0;
    border-radius: var(--radius-md);
    border: 1px solid var(--border);
    cursor: pointer;
}

/* Horizontal rules */
.post-content hr,
.page-content hr {
    margin: 2rem 0;
    border: none;
    height: 1px;
    background: var(--border);
}

/* ===========================
   11. IMAGE MODAL (Simplified)
   =========================== */
.image-modal-dialog {
    border: none;
    background: transparent;
    padding: 0;
    width: 100vw;
    height: 100vh;
    max-width: 100vw;
    max-height: 100vh;
    outline: none;
    overflow: hidden;
}

.image-modal-dialog[open] {
    display: flex;
    flex-direction: column;
}

.image-modal-dialog::backdrop {
    background: rgba(0, 0, 0, 0.9);
}

.modal-controls {
    position: fixed;
    top: 16px;
    right: 16px;
    display: flex;
    gap: 8px;
    z-index: 10001;
}

.modal-btn {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    border: none;
    background: rgba(255, 255, 255, 0.15);
    color: white;
    font-size: 18px;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.2s;
    backdrop-filter: blur(4px);
}

.modal-btn:hover {
    background: rgba(255, 255, 255, 0.3);
}

.modal-viewport {
    flex: 1;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: grab;
}

.modal-viewport:active {
    cursor: grabbing;
}

.modal-content {
    transform-origin: center center;
    transition: transform 0.1s ease-out;
}

.modal-content img {
    max-width: 90vw;
    max-height: 90vh;
    object-fit: contain;
    border-radius: var(--radius-md);
    pointer-events: none;
    user-select: none;
}

.modal-content svg {
    display: block;
    background: #ffffff;
    border-radius: var(--radius-md);
    padding: var(--spacing-lg);
    width: 85vw;
    height: auto;
    max-height: 85vh;
    pointer-events: none;
    user-select: none;
}

/* ===========================
   12. POST FOOTER
   =========================== */
.post-footer {
    border-top: 1px solid var(--border);
    padding: var(--spacing-xl) 0;
}

.post-footer .container {
    max-width: 748px;
    margin: 0 auto;
}

/* Post Navigation */
.post-navigation {
    margin-bottom: var(--spacing-xl);
}

.nav-heading {
    font-size: var(--font-size-sm);
    font-weight: 600;
    color: var(--text-secondary);
    margin-bottom: var(--spacing-md);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.nav-post-list {
    list-style: none;
    padding: 0;
    margin: 0;
}

.nav-post-item {
    display: flex;
    align-items: baseline;
    gap: var(--spacing-sm);
    padding: var(--spacing-xs) 0;
}

.nav-post-date {
    font-size: var(--font-size-xs);
    color: var(--text-muted);
    flex-shrink: 0;
    min-width: 40px;
}

.nav-post-link {
    font-size: var(--font-size-sm);
    color: var(--text-primary);
    text-decoration: none;
    line-height: 1.5;
    transition: color 0.15s;
}

.nav-post-link:hover {
    color: var(--primary-color);
    text-decoration: none;
}

/* Post Share */
.post-share {
    margin-bottom: var(--spacing-xl);
}

.post-share h4 {
    color: var(--text-primary);
    margin-bottom: var(--spacing-md);
    font-size: var(--font-size-base);
}

.share-buttons {
    display: flex;
    gap: var(--spacing-sm);
}

.share-btn {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xs);
    padding: 6px 12px;
    border: 1px solid var(--border);
    border-radius: var(--radius-md);
    font-size: var(--font-size-sm);
    font-weight: 500;
    font-family: var(--font-family);
    text-decoration: none;
    cursor: pointer;
    transition: var(--transition);
    background: var(--surface);
    color: var(--text-secondary);
}

.share-btn:hover {
    border-color: var(--primary-color);
    color: var(--primary-color);
    text-decoration: none;
}

.share-btn-mini {
    display: inline-flex;
    align-items: center;
    padding: 2px 8px;
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    font-size: var(--font-size-xs);
    font-family: var(--font-family);
    cursor: pointer;
    transition: var(--transition);
    background: transparent;
    color: var(--text-tertiary);
}

.share-btn-mini:hover {
    border-color: var(--primary-color);
    color: var(--primary-color);
}

.post-hero .share-btn-mini {
    color: rgba(255, 255, 255, 0.7);
    border-color: rgba(255, 255, 255, 0.25);
}

.post-hero .share-btn-mini:hover {
    color: #ffffff;
    border-color: rgba(255, 255, 255, 0.5);
}

/* Post Comments */
.post-comments {
    margin-top: var(--spacing-xl);
}

/* ===========================
   13. ABOUT PAGE
   =========================== */
.about-container {
    max-width: 100%;
    margin: 0 auto;
    padding: var(--spacing-xl) var(--spacing-md);
    line-height: 1.7;
}

.about-description {
    margin: 0;
    color: var(--text-secondary);
    font-size: var(--font-size-base);
    line-height: 1.6;
}

.about-intro {
    display: flex;
    align-items: center;
    gap: var(--spacing-xl);
    margin-bottom: var(--spacing-2xl);
    padding: var(--spacing-lg);
    background: var(--surface);
    border-radius: var(--radius-lg);
    border: 1px solid var(--border);
}

.about-avatar {
    flex-shrink: 0;
}

.character-image {
    width: 96px;
    height: 96px;
    border-radius: 50%;
    border: 2px solid var(--border);
}

.about-text h2 {
    margin: 0 0 var(--spacing-sm) 0;
    color: var(--text-primary);
    font-size: var(--font-size-xl);
}

.about-text .about-description {
    margin: 0;
    color: var(--text-secondary);
    font-size: var(--font-size-base);
}

.about-section {
    margin-bottom: var(--spacing-2xl);
}

.about-section h2 {
    color: var(--text-primary);
    margin-bottom: var(--spacing-md);
    font-size: var(--font-size-xl);
    padding-bottom: var(--spacing-sm);
    border-bottom: 1px solid var(--border);
}

.contact-links {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-sm);
}

.contact-link {
    display: flex;
    align-items: center;
    gap: var(--spacing-sm);
    padding: var(--spacing-sm) var(--spacing-md);
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-md);
    text-decoration: none;
    color: var(--text-primary);
    font-size: var(--font-size-sm);
    transition: var(--transition);
}

.contact-link:hover {
    border-color: var(--primary-color);
    color: var(--primary-color);
    text-decoration: none;
}

.contact-icon {
    font-size: var(--font-size-base);
    width: 20px;
    text-align: center;
}

/* ===========================
   13.5 PROJECT CARDS
   =========================== */
.project-card {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    overflow: hidden;
    transition: var(--transition);
}

.project-card:hover {
    border-color: var(--primary-color);
    box-shadow: 0 4px 12px var(--shadow-md);
}

.project-screenshots {
    display: flex;
    gap: var(--spacing-md);
    padding: var(--spacing-lg);
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    background: var(--background);
    justify-content: center;
}

.project-screenshots::-webkit-scrollbar {
    height: 4px;
}

.project-screenshots::-webkit-scrollbar-thumb {
    background: var(--border);
    border-radius: 2px;
}

.project-phone-frame {
    flex-shrink: 0;
    width: 200px;
    scroll-snap-align: center;
    background: #1a1a2e;
    border-radius: 24px;
    padding: 10px 8px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
}

.project-phone-frame img {
    width: 100%;
    height: auto;
    border-radius: 16px;
    display: block;
}

.project-info {
    padding: var(--spacing-lg);
}

.project-info h3 {
    font-size: var(--font-size-lg);
    font-weight: 600;
    color: var(--text-primary);
    margin-bottom: var(--spacing-xs);
}

.project-description {
    color: var(--text-secondary);
    font-size: var(--font-size-sm);
    margin-bottom: var(--spacing-md);
    line-height: 1.6;
}

.project-tags {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-xs);
    margin-bottom: var(--spacing-md);
}

.project-tags span {
    display: inline-block;
    padding: 2px 10px;
    background: var(--primary-muted);
    color: var(--primary-color);
    border-radius: var(--radius-full, 9999px);
    font-size: 12px;
    font-weight: 500;
}

.project-links {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-sm);
}

.project-links a {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 14px;
    border: 1px solid var(--border);
    border-radius: var(--radius-md);
    font-size: var(--font-size-sm);
    color: var(--text-primary);
    text-decoration: none;
    transition: var(--transition);
}

.project-links a:hover {
    border-color: var(--primary-color);
    color: var(--primary-color);
    text-decoration: none;
}

@media (max-width: 480px) {
    .project-phone-frame {
        width: 160px;
        border-radius: 20px;
        padding: 8px 6px;
    }

    .project-phone-frame img {
        border-radius: 12px;
    }

    .project-screenshots {
        padding: var(--spacing-md);
        gap: var(--spacing-sm);
    }
}

/* ===========================
   14. ARCHIVE PAGE
   =========================== */
.archive-container {
    max-width: 100%;
    margin: 0 auto;
    padding: var(--spacing-xl) var(--spacing-md);
}

.archive-year {
    margin-bottom: var(--spacing-xl);
}

.archive-year h2 {
    font-size: var(--font-size-xl);
    font-weight: 700;
    color: var(--text-primary);
    margin-bottom: var(--spacing-md);
    padding-bottom: var(--spacing-sm);
    border-bottom: 1px solid var(--border);
}

.archive-posts {
    list-style: none;
    padding: 0;
    margin: 0;
}

.archive-post-item {
    display: flex;
    align-items: baseline;
    gap: var(--spacing-md);
    padding: var(--spacing-sm) 0;
    border-bottom: 1px solid var(--surface);
}

.archive-post-item:last-child {
    border-bottom: none;
}

.archive-post-date {
    flex-shrink: 0;
    font-size: var(--font-size-sm);
    color: var(--text-muted);
    font-variant-numeric: tabular-nums;
    min-width: 70px;
}

.archive-post-title {
    font-size: var(--font-size-base);
    font-weight: 500;
}

.archive-post-title a {
    color: var(--text-primary);
    text-decoration: none;
}

.archive-post-title a:hover {
    color: var(--primary-color);
}

/* ===========================
   15. CATEGORIES PAGE
   =========================== */
.categories-container {
    max-width: 100%;
    margin: 0 auto;
    padding: var(--spacing-xl) var(--spacing-md);
}

.category-section {
    margin-bottom: var(--spacing-xl);
}

.category-section h2 {
    font-size: var(--font-size-lg);
    font-weight: 600;
    margin-bottom: var(--spacing-md);
    padding-bottom: var(--spacing-sm);
    border-bottom: 1px solid var(--border);
    display: flex;
    align-items: center;
    gap: var(--spacing-sm);
}

.category-count-badge {
    background: var(--surface);
    color: var(--text-muted);
    padding: 2px 8px;
    border-radius: var(--radius-full);
    font-size: var(--font-size-xs);
    font-weight: 500;
    border: 1px solid var(--border);
}

.category-posts {
    list-style: none;
    padding: 0;
    margin: 0;
}

.category-post-item {
    display: flex;
    align-items: baseline;
    gap: var(--spacing-md);
    padding: var(--spacing-sm) 0;
}

.category-post-date {
    flex-shrink: 0;
    font-size: var(--font-size-sm);
    color: var(--text-muted);
    font-variant-numeric: tabular-nums;
    min-width: 70px;
}

.category-post-title a {
    color: var(--text-primary);
    text-decoration: none;
    font-size: var(--font-size-base);
}

.category-post-title a:hover {
    color: var(--primary-color);
}

/* Categories Overview */
.categories-overview {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-sm);
    margin-bottom: var(--spacing-xl);
    padding-bottom: var(--spacing-lg);
    border-bottom: 1px solid var(--border);
}

.category-chip {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xs);
    padding: 4px 12px;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-full);
    color: var(--text-secondary);
    font-size: var(--font-size-sm);
    font-weight: 500;
    text-decoration: none;
    transition: var(--transition);
}

.category-chip:hover {
    border-color: var(--primary-color);
    color: var(--primary-color);
    text-decoration: none;
}

.category-chip .count {
    font-size: var(--font-size-xs);
    color: var(--text-muted);
}

/* ===========================
   16. TAGS PAGE
   =========================== */
.tags-container {
    max-width: 100%;
    margin: 0 auto;
    padding: var(--spacing-xl) var(--spacing-md);
}

.tags-cloud-section {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-sm);
    margin-bottom: var(--spacing-xl);
    padding-bottom: var(--spacing-lg);
    border-bottom: 1px solid var(--border);
}

.tag-chip {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 4px 10px;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-full);
    color: var(--text-secondary);
    font-size: var(--font-size-sm);
    text-decoration: none;
    transition: var(--transition);
}

.tag-chip:hover {
    border-color: var(--primary-color);
    color: var(--primary-color);
    text-decoration: none;
}

.tag-chip .tag-count {
    font-size: var(--font-size-xs);
    color: var(--text-muted);
}

.tag-section {
    margin-bottom: var(--spacing-xl);
}

.tag-section h2 {
    font-size: var(--font-size-lg);
    font-weight: 600;
    margin-bottom: var(--spacing-md);
    padding-bottom: var(--spacing-sm);
    border-bottom: 1px solid var(--border);
}

.tag-posts {
    list-style: none;
    padding: 0;
    margin: 0;
}

.tag-post-item {
    display: flex;
    align-items: baseline;
    gap: var(--spacing-md);
    padding: var(--spacing-sm) 0;
}

.tag-post-date {
    flex-shrink: 0;
    font-size: var(--font-size-sm);
    color: var(--text-muted);
    font-variant-numeric: tabular-nums;
    min-width: 70px;
}

.tag-post-title a {
    color: var(--text-primary);
    text-decoration: none;
}

.tag-post-title a:hover {
    color: var(--primary-color);
}

/* ===========================
   17. FOOTER
   =========================== */
.site-footer {
    border-top: 1px solid var(--border);
    padding: var(--spacing-xl) 0;
    margin-top: var(--spacing-2xl);
    text-align: center;
}

.footer-content {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--spacing-md);
}

.social-links {
    display: flex;
    gap: var(--spacing-md);
}

.social-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--text-muted);
    font-size: var(--font-size-sm);
    transition: var(--transition);
    text-decoration: none;
    padding: 4px;
}

.social-link:hover {
    color: var(--text-primary);
    text-decoration: none;
}

.social-link svg {
    width: 20px;
    height: 20px;
    fill: currentColor;
}

.footer-copyright {
    color: var(--text-muted);
    font-size: var(--font-size-xs);
    margin: 0;
}

/* ===========================
   18. SCROLL TO TOP
   =========================== */
.scroll-to-top {
    position: fixed;
    bottom: 24px;
    right: 24px;
    width: 36px;
    height: 36px;
    background: var(--surface);
    color: var(--text-secondary);
    border: 1px solid var(--border);
    border-radius: var(--radius-md);
    cursor: pointer;
    display: none;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    z-index: 100;
    transition: var(--transition);
}

.scroll-to-top:hover {
    border-color: var(--primary-color);
    color: var(--primary-color);
}

.scroll-to-top.visible {
    display: flex;
}

/* ===========================
   19. CODE COPY BUTTON
   =========================== */
.copy-code-btn {
    position: absolute;
    top: 0.5rem;
    right: 0.5rem;
    background: var(--surface);
    border: 1px solid var(--border);
    color: var(--text-secondary);
    padding: 0.25rem 0.5rem;
    border-radius: var(--radius-sm);
    cursor: pointer;
    opacity: 0;
    transition: opacity 0.2s ease, background 0.2s ease;
    font-size: 0.75rem;
    font-family: inherit;
}

.copy-code-btn:hover {
    background: var(--primary-color);
    color: #fff;
    border-color: var(--primary-color);
}

.copy-code-btn.copied {
    background: #1a7f37;
    color: #fff;
    border-color: #1a7f37;
}

/* ===========================
   20. READING PROGRESS BAR
   =========================== */
.reading-progress {
    position: fixed;
    top: 64px;
    left: 0;
    width: 0;
    height: 2px;
    background: var(--primary-color);
    z-index: 999;
    transition: width 0.1s ease;
}

/* ===========================
   20. RESPONSIVE
   =========================== */
@media (max-width: 768px) {
    .main-content {
        margin-top: 64px;
        min-height: calc(100vh - 64px);
    }

    .header-content {
        flex-wrap: wrap;
    }

    .main-nav {
        display: none;
        position: absolute;
        top: 100%;
        left: 0;
        right: 0;
        background: var(--background);
        border-top: 1px solid var(--border);
        border-bottom: 1px solid var(--border);
        padding: var(--spacing-md);
    }

    .main-nav.active {
        display: block;
    }

    .nav-list {
        flex-direction: column;
        gap: 0;
    }

    .nav-link {
        justify-content: flex-start;
        padding: var(--spacing-sm) var(--spacing-md);
    }

    .mobile-menu-toggle {
        display: flex;
    }

    .blog-hero {
        min-height: 300px;
    }

    .about-hero {
        min-height: 220px;
    }

    .post-hero {
        min-height: 280px;
    }

    .post-hero .hero-text {
        padding: var(--spacing-md) var(--spacing-sm);
    }

    .hero-text h1 {
        font-size: 2rem;
    }

    .post-hero .hero-text h1 {
        font-size: 1.5rem;
    }

    .section-header {
        flex-direction: column;
        align-items: flex-start;
        gap: var(--spacing-sm);
    }

    .post-header,
    .page-header {
        padding: var(--spacing-xl) 0 var(--spacing-lg);
    }

    .post-title,
    .page-title {
        font-size: var(--font-size-2xl);
    }

    .about-intro {
        flex-direction: column;
        text-align: center;
    }

    .character-image {
        width: 80px;
        height: 80px;
    }

    .about-text h2 {
        font-size: var(--font-size-lg);
    }

    .archive-post-item,
    .category-post-item,
    .tag-post-item {
        flex-direction: column;
        gap: 2px;
    }

    .archive-post-date,
    .category-post-date,
    .tag-post-date {
        min-width: auto;
    }

    .table-wrapper {
        -webkit-overflow-scrolling: touch;
    }
}

@media (max-width: 480px) {
    .blog-hero {
        min-height: 240px;
    }

    .about-hero {
        min-height: 180px;
    }

    .post-hero {
        min-height: 220px;
    }

    .post-hero .hero-text {
        padding: var(--spacing-sm);
    }

    .hero-text h1 {
        font-size: 1.5rem;
    }

    .post-hero .hero-text h1 {
        font-size: 1.25rem;
    }

    .hero-subtitle {
        font-size: var(--font-size-base);
    }

    .blog-main {
        padding: var(--spacing-lg) 0;
    }

    .post-header .post-meta {
        flex-direction: column;
        gap: var(--spacing-xs);
    }
}


    </main>

    <!-- Footer -->
    <footer class="site-footer">
    <div class="container">
        
        

        <div class="footer-content">
            <div class="social-links">
                
                
                
                <!-- RSS feed available at /feed.xml -->
            </div>
            <p class="footer-copyright">&copy; 2026 실전코딩 기술 블로그</p>
        </div>
    </div>
</footer>

    
    <!-- Highlight.js JavaScript -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js"></script>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            // Initialize Highlight.js
            hljs.highlightAll();
            
            // Dark mode toggle support for highlight.js
            const themeToggle = document.querySelector('.theme-toggle');
            if (themeToggle) {
                themeToggle.addEventListener('click', function() {
                    setTimeout(() => {
                        hljs.highlightAll();
                    }, 100);
                });
            }
        });
    </script>

    <!-- JavaScript -->
    <script src="/assets/js/main.js"></script>
    
    <!-- Mermaid 다이어그램 지원 -->
    <!-- Mermaid 다이어그램 지원 -->
<script type="module">
  import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
  
  // Mermaid 초기화
  mermaid.initialize({ 
    startOnLoad: true,
    theme: 'default',
    securityLevel: 'loose',
    fontFamily: 'Pretendard Variable, -apple-system, BlinkMacSystemFont, sans-serif',
    themeVariables: {
      primaryColor: '#0969da',
      secondaryColor: '#0550ae',
      tertiaryColor: '#ddf4ff',
    }
  });
  
  // 페이지 로드 완료 후 실행
  document.addEventListener('DOMContentLoaded', async function() {
    // .language-mermaid 클래스를 가진 코드 블록 찾기
    const mermaidBlocks = document.querySelectorAll('pre > code.language-mermaid');
    
    // 각 코드 블록을 mermaid 클래스 pre 태그로 변환
    mermaidBlocks.forEach((codeBlock) => {
      const preElement = codeBlock.parentElement;
      const mermaidContent = codeBlock.textContent;
      
      // 새로운 pre 요소 생성
      const newPre = document.createElement('pre');
      newPre.className = 'mermaid';
      newPre.textContent = mermaidContent;
      
      // 기존 요소를 새 요소로 교체
      preElement.parentNode.replaceChild(newPre, preElement);
    });
    
    // Mermaid 렌더링 실행
    await mermaid.run({
      querySelector: '.mermaid',
    });
  });
</script>
</body>
</html>
