{"product_id":"된호프-니더하우저-클람-리슬링-카비넷-2023","title":"된호프 니더하우저 클람 리슬링 카비넷 2023","description":"\u003cbody\u003e\n\n\n    \n    \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n    \u003ctitle\u003e2023 Weingut Donnhoff Niederhauser Klamm Riesling Kabinett\u003c\/title\u003e\n    \u003c!-- Tailwind CSS CDN --\u003e\u003cscript src=\"https:\/\/cdn.tailwindcss.com\"\u003e\u003c\/script\u003e\n    \u003c!-- Font Awesome for icons --\u003e\u003clink rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/5.15.3\/css\/all.min.css\"\u003e\n    \u003c!-- Chart.js for graphs --\u003e\u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@3.7.1\/dist\/chart.min.js\"\u003e\u003c\/script\u003e\n    \u003cstyle\u003e\n        \/* CRITICAL: APPLE-Inspired Minimalism - German Riesling (Bright Green\/Slate Accent) *\/\n        :root {\n            --accent-color: #9CBB6A; \/* Fresh Apple Green *\/\n            --dark-accent: #7A932E; \/* Dark Olive Green *\/\n            --product-bg: #F9FFF0; \/* Pale Greenish White *\/\n            --price-fill: rgba(156, 187, 106, 0.2);\n            --wine-color: #9CBB6A; \/* Riesling Green Color *\/\n        }\n        body {\n            \/* **FONT STACK (Inter prioritized)** *\/\n            font-family: 'Inter', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n            color: #1d1d1f; \/* Near-Black for crisp text contrast *\/\n            position: relative;\n            overflow-x: hidden;\n            line-height: 1.6; \/* Increased line-height for readability *\/\n            background-color: #f9f9f9; \/* Off-white background *\/\n        }\n        .container-box {\n            background-color: #ffffff;\n            border-radius: 12px;\n            padding: 2.5rem;\n            \/* Subtle, clean shadow *\/\n            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); \n            border: 1px solid #e5e5e5; \/* Light border for definition *\/\n        }\n        .accent-text {\n            color: var(--dark-accent); \/* Use dark green for accent text *\/\n        }\n        .text-heading {\n            color: #1d1d1f; \/* Near-Black, prominent heading *\/\n            font-weight: 700;\n        }\n        .button-link {\n            transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n            background-color: var(--dark-accent); \/* Use dark accent for button *\/\n            color: #ffffff; \n            border: 1px solid var(--dark-accent);\n            padding: 1rem 3rem; \n            border-radius: 8px; \n            font-weight: 600;\n            letter-spacing: 0.5px;\n            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); \n            display: inline-flex;\n            align-items: center;\n        }\n        .button-link:hover {\n            background-color: var(--accent-color);\n            border-color: var(--accent-color);\n            color: #ffffff;\n            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\n            transform: translateY(-1px);\n        }\n        .product-placeholder {\n            \/* Image styling for Riesling Bottle *\/\n            background-color: var(--product-bg); \n            border-color: var(--accent-color); \n            object-fit: contain;\n            width: 100%;\n            height: 350px;\n        }\n        .chart-container {\n            position: relative;\n            width: 100%;\n        }\n        \/* Expert Score Box Styling *\/\n        .expert-score-grid {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr); \n            gap: 0.75rem; \n            margin-top: 1rem;\n        }\n        .score-item {\n            background-color: #fefefe;\n            padding: 0.5rem; \n            border-radius: 8px;\n            border: 1px solid #e5e5e5;\n            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            min-height: 70px; \n            text-align: center; \/* Center content horizontally *\/\n        }\n        .score-item.highlighted {\n            background-color: var(--product-bg);\n            border: 2px solid var(--accent-color);\n            grid-column: span 1 \/ span 1;\n        }\n        .score-value {\n            font-size: 1.5rem; \n            font-weight: 800;\n            color: var(--dark-accent);\n            line-height: 1.2; \n        }\n        .critic-name {\n            font-size: 0.8rem; \n            color: #4a4a68;\n            font-weight: 600;\n            line-height: 1; \n            margin-top: 0.25rem;\n        }\n        \/* Vivino style *\/\n        .vivino-box {\n            background-color: #ffffff;\n            padding: 1.5rem; \n            border-radius: 12px; \n            border: 1px solid #e5e5e5;\n            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); \n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            text-align: center;\n        }\n        .vivino-box .score-value {\n            font-size: 2.5rem; \n            font-weight: 900;\n            color: var(--dark-accent); \n            margin-top: 0.5rem;\n        }\n        .vivino-box .critic-name {\n            font-size: 0.9rem;\n            color: #71717a;\n        }\n        \/* KRW Price Info Box *\/\n        .krw-price-box {\n            background-color: #ffffff;\n            border-radius: 12px;\n            padding: 1.5rem;\n            text-align: center;\n            border: 1px solid #e5e5e5; \n        }\n        .krw-price {\n            font-size: 2.5rem;\n            font-weight: 900;\n            color: #1d1d1f;\n            margin-top: 0.5rem;\n            line-height: 1.2;\n        }\n        .krw-note {\n            font-size: 0.8rem;\n            color: #71717a; \/* Gray-600 *\/\n            margin-top: 0.5rem;\n        }\n        \/* Wine Profile Bar *\/\n        .wine-profile-bar {\n            height: 12px;\n            background-color: #e5e5e5;\n            border-radius: 6px;\n            overflow: hidden;\n            margin-bottom: 0.5rem;\n        }\n        .wine-profile-fill {\n            background-color: var(--wine-color);\n            height: 100%;\n        }\n        \/* Tasting Note Icons Grid *\/\n        .aroma-grid {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 1rem;\n            text-align: center;\n        }\n        .aroma-item {\n            background-color: #f8f8f8;\n            border: 1px solid #ebebeb;\n            border-radius: 8px;\n            padding: 1rem 0.5rem;\n            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n            transition: transform 0.2s;\n        }\n        .aroma-item i {\n            color: #ffffff; \/* Icons should use white color on colored backgrounds *\/\n            font-size: 2rem;\n            margin-bottom: 0.5rem;\n        }\n        \/* Custom Colors for Aroma Items (Riesling Kabinett: Fruit, Mineral\/Honey, Citrus) *\/\n        .aroma-item:nth-child(1) { background-color: #9CBB6A; color: #ffffff; } \/* Pear\/Green Apple (Olive Green) *\/\n        .aroma-item:nth-child(2) { background-color: #A68A5B; color: #ffffff; } \/* Honey\/Mineral\/Stone (Brown Gold) *\/\n        .aroma-item:nth-child(3) { background-color: #E6A84F; color: #ffffff; } \/* Citrus\/Lemon\/Lime (Orange Gold) *\/\n    \u003c\/style\u003e\n\n\n\n\u003cdiv class=\"max-w-5xl mx-auto px-4 py-8 md:py-16\"\u003e\n    \u003c!-- Header \u0026 Hero Section --\u003e\n    \u003cheader class=\"text-center mb-8\"\u003e\n        \n        \u003ch1 class=\"text-4xl md:text-5xl font-bold mb-2 text-heading flex items-center justify-center\"\u003e\n            2023 Weingut Donnhoff Niederhäuser Klamm Riesling Kabinett\n        \u003c\/h1\u003e\n        \u003ch2 class=\"text-2xl md:text-3xl font-bold text-gray-800 mb-4\"\u003e\n            2023 된호프 니더하우저 클람 리슬링 카비넷\n        \u003c\/h2\u003e\n        \n        \u003c!-- Custom Highlight Emphasis (Winery Reputation) --\u003e\n        \u003cdiv class=\"mb-2\"\u003e\n            \u003cspan class=\"highlight-badge\" style=\"background-color: var(--dark-accent); color: white; font-size: 1rem; padding: 4px 10px; border-radius: 6px;\"\u003e\n                🇩🇪 **[독일 리슬링 명가]** | Vivino 4.0 (693+ 평가) | Critics Avg **94.5점** | Kabinett\n            \u003c\/span\u003e\n        \u003c\/div\u003e\n        \n        \u003c!-- Expert Score Emphasis --\u003e\n        \u003cp class=\"text-lg md:text-xl font-semibold leading-relaxed text-heading mt-4 border-b-2 border-gray-300 pb-2 inline-block\"\u003e\n            🇩🇪 독일 나헤 (Nahe) | 리슬링 (Riesling) 100% | Prädikatswein Kabinett 🇩🇪\n        \u003c\/p\u003e\n    \u003c\/header\u003e\n\n    \u003cmain class=\"grid grid-cols-1 md:grid-cols-3 gap-8\"\u003e\n        \u003c!-- Left Side: Product Image \u0026 Quick Info --\u003e\n        \u003cdiv class=\"md:col-span-1 flex flex-col items-center\"\u003e\n            \u003cdiv class=\"mb-8 w-full\"\u003e\n                \u003c!-- Product Image - Using the provided filename --\u003e\n                \u003cimg src=\"%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202025-11-19%2023.07.49.jpg\" onerror=\"this.onerror=null;this.src='https:\/\/placehold.co\/400x500\/F9FFF0\/7A932E?text=Donnhoff+Kabinett+2023';\" alt=\"2023 Weingut Donnhoff Niederhäuser Klamm Riesling Kabinett bottle\" class=\"w-full h-auto rounded-lg shadow-md product-placeholder object-contain border-4\" style=\"border-color: var(--dark-accent); background-color: var(--product-bg);\" loading=\"lazy\"\u003e\n            \u003c\/div\u003e\n            \n            \u003c!-- Vivino Score (4.0 from image) --\u003e\n            \u003cdiv class=\"vivino-box w-full mb-6\"\u003e\n                \u003ch3 class=\"text-lg font-bold text-heading\"\u003eVivino 평점\u003c\/h3\u003e\n                \u003cimg src=\"https:\/\/xwine.club\/cdn\/shop\/files\/ckyycsi9i00027b9gh6ww46da.webp\" onerror=\"this.onerror=null;this.src='https:\/\/placehold.co\/40x40\/7A932E\/ffffff?text=V';\" alt=\"Vivino Logo\" class=\"h-10 w-10 mx-auto rounded-full shadow-md mt-2\" loading=\"lazy\" data-original=\"https:\/\/xwine.club\/cdn\/shop\/files\/ckyycsi9i00027b9gh6ww46da.webp\" data-files=\"ckyycsi9i00027b9gh6ww46da.webp\"\u003e\n                \u003cp class=\"score-value\" style=\"color: var(--dark-accent);\"\u003e4.0\u003c\/p\u003e\n                \u003cp class=\"critic-name\"\u003e(693+ 평가 기준)\u003c\/p\u003e\n            \u003c\/div\u003e\n            \n            \u003cdiv class=\"w-full text-center\"\u003e\n                \u003cdiv class=\"container-box mb-6\"\u003e\n                    \u003ch3 class=\"text-xl font-semibold mb-2 text-heading\"\u003e와인 종류\u003c\/h3\u003e\n                    \u003cp class=\"text-lg text-gray-800\"\u003e화이트 와인 (잔당 있음)\u003c\/p\u003e\n                    \u003cp class=\"text-sm text-gray-600\"\u003e(품종: 리슬링 100%)\u003c\/p\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"container-box mb-6\"\u003e\n                    \u003ch3 class=\"text-xl font-semibold mb-2 text-heading\"\u003e지역 및 등급\u003c\/h3\u003e\n                    \u003cp class=\"text-lg text-gray-800\"\u003e독일, 나헤 (Nahe)\u003c\/p\u003e\n                    \u003cp class=\"text-sm text-gray-600\"\u003eKabinett (카비넷)\u003c\/p\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n            \n            \u003c!-- Price Highlight Box (Selling Price vs Market Price) --\u003e\n            \u003cdiv class=\"container-box w-full bg-yellow-50 border-yellow-200 mt-4 p-6 text-center\" style=\"background-color: var(--product-bg); border-color: #D3E0D3;\"\u003e\n                \u003cp class=\"text-base text-gray-700 font-medium\"\u003ewine-searcher 2023 빈티지 평균 가격\u003c\/p\u003e\n                \u003cp class=\"text-xl font-bold text-gray-700 mt-1 line-through\"\u003e€ 25.00\u003c\/p\u003e\n                \u003cp class=\"text-xs text-gray-500 mt-2\"\u003e**판매가:**\u003c\/p\u003e\n                \u003cp class=\"text-4xl font-extrabold accent-text mt-1\"\u003e€ 25.00\u003c\/p\u003e\n                \u003cp class=\"text-xs text-red-700 font-semibold mt-1\"\u003e✨ Critics 94.5점! 된호프의 카비넷 특가! ✨\u003c\/p\u003e\n            \u003c\/div\u003e\n\n            \u003c!-- Expert Reviews Section (2023 Scores) - EMPHASIZED --\u003e\n            \u003cdiv class=\"container-box w-full mt-6\"\u003e\n                \u003ch3 class=\"text-xl font-bold mb-4 text-heading text-center\"\u003e전문가 평점 (2023 빈티지)\u003c\/h3\u003e\n                \u003cdiv class=\"expert-score-grid\"\u003e\n                    \u003c!-- Critics Avg (94.5) - Calculated: (95+94)\/2 = 94.5 --\u003e\n                    \u003cdiv class=\"score-item highlighted\"\u003e \n                        \u003cp class=\"score-value text-4xl\" style=\"color: var(--dark-accent);\"\u003e94.5\u003c\/p\u003e\n                        \u003cp class=\"critic-name font-bold text-gray-800\"\u003eCritics Avg \/ 100\u003c\/p\u003e\n                    \u003c\/div\u003e\n                    \u003c!-- Suckling 95 --\u003e\n                    \u003cdiv class=\"score-item\"\u003e \n                        \u003cp class=\"score-value\"\u003e95\u003c\/p\u003e\n                        \u003cp class=\"critic-name\"\u003eJames Suckling\u003c\/p\u003e\n                    \u003c\/div\u003e\n                    \u003c!-- Galloni 94 --\u003e\n                    \u003cdiv class=\"score-item\"\u003e \n                        \u003cp class=\"score-value\"\u003e94\u003c\/p\u003e\n                        \u003cp class=\"critic-name\"\u003eVinous (Galloni)\u003c\/p\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003c!-- Right Side: Details \u0026 Infographic --\u003e\n        \u003cdiv class=\"md:col-span-2\"\u003e\n            \n            \u003c!-- Winery Story --\u003e\n            \u003cdiv class=\"container-box mb-8\"\u003e\n                \u003ch3 class=\"text-2xl font-bold mb-4 text-heading\"\u003e와이너리 스토리 \u0026amp; 특징\u003c\/h3\u003e\n                \u003cp class=\"mb-4 text-gray-800 leading-relaxed\"\u003e\n                    **된호프(Dönnhoff)**는 독일 나헤(Nahe) 지역의 아이콘이자 세계 최고의 리슬링 생산자로 손꼽힙니다. 클라우스 되호프와 그의 아들 코르넬리우스가 유기농법을 고수하며, 떼루아의 순수함과 섬세함을 극대화한 리슬링을 생산합니다.\n                \u003c\/p\u003e\n                \u003cp class=\"mb-4 text-gray-800 leading-relaxed font-semibold\"\u003e\n                    **'니더하우저 클람(Niederhäuser Klamm)' 카비넷 2023**은 된호프의 명문 밭 중 하나인 클람에서 생산됩니다. **카비넷(Kabinett)** 등급은 리슬링 중에서도 가장 \u003cspan class=\"font-bold accent-text\"\u003e가볍고 우아하며\u003c\/span\u003e, \u003cspan class=\"font-bold accent-text\"\u003e낮은 알코올(약 7~8%)과 잔당\u003c\/span\u003e이 높은 산도와 완벽하게 균형을 이루는 스타일입니다. 2023 빈티지는 \u003cspan class=\"font-bold accent-text\"\u003e복숭아, 청사과\u003c\/span\u003e의 과실미와 함께 \u003cspan class=\"font-bold accent-text\"\u003e꿀, 미네랄, 라임\u003c\/span\u003e의 복합미가 돋보이며, 제임스 서클링(JS) 95점, 갈로니(Vinous) 94점 등 최고 평론가들에게 극찬받은 명작입니다.                 \u003c\/p\u003e\n                \u003cdiv class=\"bg-gray-100 p-3 rounded-lg text-sm text-gray-700\"\u003e\n                    \u003cspan class=\"font-bold\"\u003e와인 제조:\u003c\/span\u003e 리슬링 100%. 화강암, 슬레이트, 화산암이 혼합된 클람 밭에서 생산. 낮은 온도에서 천천히 발효하여 섬세함을 유지.\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n\n            \u003c!-- Vintage Score Chart --\u003e\n            \u003cdiv class=\"container-box mb-8\"\u003e\n                \u003ch3 class=\"text-2xl font-bold mb-4 text-heading text-center\"\u003e빈티지 점수 비교 (Critics Avg \/ 100 기준)\u003c\/h3\u003e\n                \u003cdiv class=\"w-full flex justify-center items-center\"\u003e\n                    \u003cdiv class=\"chart-container flex-grow max-w-lg\" style=\"height: 250px;\"\u003e\n                        \u003ccanvas id=\"vintageChart\"\u003e\u003c\/canvas\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"bg-gray-100 p-4 rounded-lg mt-4 text-center border border-gray-200\"\u003e\n                    \u003cp class=\"text-sm text-gray-700\"\u003e2023 빈티지는 **94.5점**으로, 된호프의 역대 카비넷 중 최고 수준의 평가를 받고 있습니다.\u003c\/p\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n            \n            \u003chr class=\"border-t-2 border-gray-300 my-8\"\u003e\n\n            \u003c!-- Expert Tasting Notes --\u003e\n            \u003cdiv class=\"container-box mb-8\"\u003e\n                \u003ch3 class=\"text-2xl font-bold mb-4 text-heading\"\u003e와인 풍미 요약 및 테이스팅 노트\u003c\/h3\u003e\n                \n                \u003c!-- Tasting Note based on User Reviews (Riesling Kabinett) --\u003e\n                \u003cdiv class=\"space-y-4 text-left p-4 bg-gray-50 rounded-lg border border-gray-200 mb-4\"\u003e\n                    \u003cp class=\"text-base font-semibold accent-text\"\u003e주요 유저 리뷰 풍미 프로필\u003c\/p\u003e\n                    \u003cdiv class=\"aroma-grid\"\u003e\n                        \u003cdiv class=\"aroma-item\"\u003e \n                            \u003ci class=\"fas fa-apple-alt\"\u003e\u003c\/i\u003e \u003c!-- Pear, Green Apple, Apple --\u003e\n                            \u003cp class=\"mt-2 text-xs font-semibold text-gray-700\"\u003e배, 그린 애플, 사과\u003c\/p\u003e\n                            \u003cp class=\"text-xs text-gray-500\"\u003e(102 언급)\u003c\/p\u003e\n                        \u003c\/div\u003e\n                        \u003cdiv class=\"aroma-item\"\u003e \n                            \u003ci class=\"fas fa-honey-pot\"\u003e\u003c\/i\u003e \u003c!-- Honey, Minerals, Stone --\u003e\n                            \u003cp class=\"mt-2 text-xs font-semibold text-gray-700\"\u003e꿀, 미네랄, 돌\u003c\/p\u003e\n                            \u003cp class=\"text-xs text-gray-500\"\u003e(70 언급)\u003c\/p\u003e\n                        \u003c\/div\u003e\n                        \u003cdiv class=\"aroma-item\"\u003e \n                            \u003ci class=\"fas fa-lemon\"\u003e\u003c\/i\u003e \u003c!-- Citrus, Lemon, Lime --\u003e\n                            \u003cp class=\"mt-2 text-xs font-semibold text-gray-700\"\u003e레몬, 라임, 시트러스\u003c\/p\u003e\n                            \u003cp class=\"text-xs text-gray-500\"\u003e(52 언급)\u003c\/p\u003e\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n\n                \u003c!-- Wine Profile Bar Summary - Riesling Kabinett specific --\u003e\n                \u003ch4 class=\"text-xl font-bold text-heading mt-6 mb-4\"\u003e와인 풍미 프로필\u003c\/h4\u003e\n                \u003cdiv class=\"space-y-4\"\u003e\n                    \u003cdiv class=\"flex items-center\"\u003e\n                        \u003cp class=\"w-1\/4 text-sm font-semibold text-gray-600 text-left pr-4\"\u003e바디감\u003c\/p\u003e\n                        \u003cdiv class=\"wine-profile-bar w-3\/4\"\u003e\n                            \u003c!-- Light --\u003e\u003cdiv class=\"wine-profile-fill\" style=\"width: 30%;\"\u003e\u003c\/div\u003e\n                        \u003c\/div\u003e\n                        \u003cp class=\"w-1\/4 text-sm font-semibold text-gray-600 text-right pl-4\"\u003eLight\u003c\/p\u003e\n                    \u003c\/div\u003e\n                    \u003cdiv class=\"flex items-center\"\u003e\n                        \u003cp class=\"w-1\/4 text-sm font-semibold text-gray-600 text-left pr-4\"\u003e드라이함\u003c\/p\u003e\n                        \u003cdiv class=\"wine-profile-bar w-3\/4\"\u003e\n                            \u003c!-- Sweet --\u003e\u003cdiv class=\"wine-profile-fill\" style=\"width: 35%;\"\u003e\u003c\/div\u003e\n                        \u003c\/div\u003e\n                        \u003cp class=\"w-1\/4 text-sm font-semibold text-gray-600 text-right pl-4\"\u003eSweet\u003c\/p\u003e\n                    \u003c\/div\u003e\n                    \u003cdiv class=\"flex items-center\"\u003e\n                        \u003cp class=\"w-1\/4 text-sm font-semibold text-gray-600 text-left pr-4\"\u003e산도\u003c\/p\u003e\n                        \u003cdiv class=\"wine-profile-bar w-3\/4\"\u003e\n                            \u003c!-- Very High Acidity (S\u0026auml;urehaltig) --\u003e\u003cdiv class=\"wine-profile-fill\" style=\"width: 90%;\"\u003e\u003c\/div\u003e\n                        \u003c\/div\u003e\n                        \u003cp class=\"w-1\/4 text-sm font-semibold text-gray-600 text-right pl-4\"\u003eVery High\u003c\/p\u003e\n                    \u003c\/div\u003e\n                     \u003cdiv class=\"flex items-center\"\u003e\n                        \u003cp class=\"w-1\/4 text-sm font-semibold text-gray-600 text-left pr-4\"\u003e미네랄\u003c\/p\u003e\n                        \u003cdiv class=\"wine-profile-bar w-3\/4\"\u003e\n                            \u003c!-- High Minerality --\u003e\u003cdiv class=\"wine-profile-fill\" style=\"width: 80%;\"\u003e\u003c\/div\u003e\n                        \u003c\/div\u003e\n                        \u003cp class=\"w-1\/4 text-sm font-semibold text-gray-600 text-right pl-4\"\u003eHigh\u003c\/p\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"bg-gray-100 p-4 rounded-lg mt-6 text-center border border-gray-200\"\u003e\n                    \u003cp class=\"text-sm text-gray-700 font-semibold\"\u003e가볍고 달콤하지만, 강렬한 산도가 균형을 잡아주는 클래식 리슬링 카비넷입니다.\u003c\/p\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n\n            \u003chr class=\"border-t-2 border-gray-300 my-8\"\u003e\n\n            \u003c!-- Price Graph (Data updated for \u0026euro;25.00 selling price) --\u003e\n            \u003cdiv class=\"container-box mb-8\"\u003e\n                \u003ch3 class=\"text-2xl font-bold mb-4 text-heading text-center\"\u003e빈티지별 시장 가격 (wine-searcher)\u003c\/h3\u003e\n                \u003cdiv class=\"w-full flex justify-center items-center\"\u003e\n                    \u003cdiv class=\"chart-container flex-grow max-w-lg\" style=\"height: 250px;\"\u003e\n                        \u003ccanvas id=\"priceChart\"\u003e\u003c\/canvas\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"bg-yellow-50 p-4 rounded-lg mt-4 text-center border border-yellow-200\"\u003e\n                    \u003cp class=\"text-sm text-red-700 font-semibold\"\u003e2023 빈티지의 시장 평균가는 €25.00입니다. €25.00의 판매가는 현재 시장 평균과 동일한 가격입니다.\u003c\/p\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n\n            \u003chr class=\"border-t-2 border-gray-300 my-8\"\u003e\n            \n            \u003c!-- Food Pairing (Riesling Kabinett) --\u003e\n            \u003cdiv class=\"container-box mb-8\"\u003e\n                \u003ch3 class=\"text-2xl font-bold mb-4 text-heading text-center\"\u003e음식 페어링 추천\u003c\/h3\u003e\n                \u003cp class=\"text-center text-lg text-gray-700 font-semibold mb-4\"\u003e\"낮은 알코올, 높은 산도에는 아시아 요리!\"\u003c\/p\u003e\n                \u003cdiv class=\"aroma-grid\"\u003e\n                    \u003cdiv class=\"aroma-item\"\u003e\n                        \u003ci class=\"fas fa-utensils\"\u003e\u003c\/i\u003e\n                        \u003cp class=\"mt-2 text-sm font-semibold text-gray-700\"\u003e매콤한 아시아 요리 (태국, 베트남)\u003c\/p\u003e\n                    \u003c\/div\u003e\n                    \u003cdiv class=\"aroma-item\"\u003e\n                        \u003ci class=\"fas fa-fish\"\u003e\u003c\/i\u003e\n                        \u003cp class=\"mt-2 text-sm font-semibold text-gray-700\"\u003e생선 타르타르, 새우 요리\u003c\/p\u003e\n                    \u003c\/div\u003e\n                    \u003cdiv class=\"aroma-item\"\u003e\n                        \u003ci class=\"fas fa-cheese\"\u003e\u003c\/i\u003e\n                        \u003cp class=\"mt-2 text-sm font-semibold text-gray-700\"\u003e염소 치즈 (Chèvre)\u003c\/p\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n\n            \u003c!-- KRW Estimated Payment Box --\u003e\n            \u003cdiv class=\"krw-price-box mb-8\"\u003e\n                \u003ch4 class=\"text-xl font-bold text-heading mb-2\"\u003e예상 결제 금액 (원화)\u003c\/h4\u003e\n                \n                \u003cdiv class=\"flex flex-col sm:flex-row items-center justify-center gap-2 mb-4\"\u003e\n                    \u003clabel for=\"exchangeRate\" class=\"text-sm font-medium text-gray-700 whitespace-nowrap\"\u003e\n                        1 EUR = \n                    \u003c\/label\u003e\n                    \u003cinput type=\"number\" id=\"exchangeRate\" value=\"1700.88\" step=\"0.01\" class=\"w-full sm:w-32 p-2 border border-gray-300 rounded-lg text-center font-mono text-lg focus:ring-yellow-500 focus:border-yellow-500\"\u003e\n                    \u003cspan class=\"text-lg font-medium text-gray-700 whitespace-nowrap\"\u003e\n                        KRW\n                    \u003c\/span\u003e\n                    \u003cbutton id=\"updateRate\" onclick=\"fetchAndDisplayRate()\" class=\"w-full sm:w-auto px-4 py-2 bg-gray-200 text-gray-800 font-semibold rounded-lg hover:bg-gray-300 transition-colors text-sm mt-2 sm:mt-0\"\u003e\n                        환율 검색\/적용\n                    \u003c\/button\u003e\n                \u003c\/div\u003e\n\n                \u003c!-- Initial calculated based on 1700.88 * 25.00 --\u003e\n                \u003cp id=\"krwPrice\" class=\"krw-price\"\u003e₩ 42,522\u003c\/p\u003e\n                \u003cp id=\"krwNote\" class=\"krw-note\"\u003e\n                    ※ 1 EUR = 1,700.88 KRW 기준 (Google Search) - **판매가 €25.00 기준**\n                \u003c\/p\u003e\n\n                \u003c!-- Removed Discount Info --\u003e\n\n                \u003cp id=\"krwDisclaimer\" class=\"krw-note mt-2 font-semibold text-gray-700\"\u003e\n                    카드사에 따라 적용 환율이 다를 수 있으며, 판매가는 구글 환율을 토대로 임의로 설정되었으니 참고 부탁 드립니다.\n\u003c\/p\u003e\n                \u003cp id=\"loadingIndicator\" class=\"text-sm text-gray-500 mt-2 hidden\"\u003e\n                    \u003ci class=\"fas fa-spinner fa-spin mr-1\"\u003e\u003c\/i\u003e 최신 환율 검색 중...\n                \u003c\/p\u003e\n            \u003c\/div\u003e\n\n            \u003c!-- More Products Button --\u003e\n            \u003cdiv class=\"text-center mt-8\"\u003e\n                \u003ca href=\"#\" class=\"button-link\" title=\"Weingut Donnhoff 전체 상품 바로가기\" style=\"background-color: var(--dark-accent); color: #ffffff;\" aria-label=\"Weingut Donnhoff 전체 상품 바로가기\"\u003e\n                    \u003cspan class=\"text-lg\"\u003eWeingut Donnhoff 전체 상품 바로가기\u003c\/span\u003e\n                \u003c\/a\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/main\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n    \/\/ Chart.js Configuration\n    let vintageData, vintageOptions, priceData, priceOptions;\n    let vintageCtx = null;\n    let priceCtx = null;\n    let vintageChartInstance = null;\n    let priceChartInstance = null;\n    const accentColor = 'var(--accent-color)'; \n    const darkAccentColor = 'var(--dark-accent)'; \n    const SELLING_PRICE_EUR = 25.00; \/\/ \u0026#54032;\u0026#47588;\u0026#44032;: \u0026euro;25.00 (\u0026#45936;\u0026#51060;\u0026#53552; \u0026#44592;\u0026#51456;)\n    const INITIAL_RATE = 1700.88; \n\n    \/\/ Function to safely create or update a Chart instance\n    const createChart = (ctx, type, data, options, instanceRef) =\u003e {\n        if (instanceRef \u0026\u0026 instanceRef.chart) {\n            instanceRef.chart.destroy();\n        }\n        \n        options = {\n            ...options,\n            responsive: true,\n            maintainAspectRatio: false \n        };\n\n        setTimeout(() =\u003e {\n            if (ctx) {\n                instanceRef.chart = new Chart(ctx, { type, data, options });\n                instanceRef.chart.resize(); \n            }\n        }, 50); \n        return instanceRef;\n    };\n\n    \/**\n     * Calculates and updates the KRW price based on the current exchange rate input.\n     * @param {number} rate - The EUR to KRW exchange rate to use for calculation.\n     * @param {string} source - The source of the rate (e.g., 'Google Search', '\u0026#49688;\u0026#46041; \u0026#51077;\u0026#47141;').\n     *\/\n    function updateKrwPrice(rate, source) {\n        const krwPriceElement = document.getElementById('krwPrice');\n        const krwNoteElement = document.getElementById('krwNote');\n        const exchangeRateInput = document.getElementById('exchangeRate');\n\n        const finalRate = parseFloat(rate);\n\n        if (isNaN(finalRate) || finalRate \u003c= 0) {\n            krwPriceElement.textContent = '\u0026#8361; \u0026#50724;\u0026#47448;';\n            krwNoteElement.textContent = '\u0026#8251; \u0026#50976;\u0026#54952;\u0026#54620; \u0026#54872;\u0026#50984;\u0026#51012; \u0026#51077;\u0026#47141;\u0026#54644; \u0026#51452;\u0026#49464;\u0026#50836;.';\n            return;\n        }\n\n        const calculatedPrice = Math.round(SELLING_PRICE_EUR * finalRate);\n\n        const formattedPrice = new Intl.NumberFormat('ko-KR', { \n            style: 'currency', \n            currency: 'KRW', \n            minimumFractionDigits: 0,\n            maximumFractionDigits: 0\n        }).format(calculatedPrice);\n\n        krwPriceElement.textContent = formattedPrice;\n        krwNoteElement.innerHTML = `\u0026#8251; 1 EUR = ${finalRate.toFixed(2)} KRW \u0026#44592;\u0026#51456; (${source}) - **\u0026#54032;\u0026#47588;\u0026#44032; \u0026euro;${SELLING_PRICE_EUR.toFixed(2)} \u0026#44592;\u0026#51456;**`;\n        exchangeRateInput.value = finalRate.toFixed(2);\n    }\n\n    \/**\n     * Tries to fetch the real-time EUR\/KRW exchange rate using Google Search\n     * and updates the UI, or falls back to manual input.\n     *\/\n    async function fetchAndDisplayRate() {\n        const indicator = document.getElementById('loadingIndicator');\n        const updateButton = document.getElementById('updateRate');\n        \n        const manualRate = parseFloat(document.getElementById('exchangeRate').value);\n\n        updateButton.disabled = true;\n        indicator.classList.remove('hidden');\n\n        try {\n            const query = \"latest EUR to KRW exchange rate\";\n            const apiKey = \"\"; \n            const apiUrl = `https:\/\/generativelanguage.googleapis.com\/v1beta\/models\/gemini-2.5-flash-preview-09-2025:generateContent?key=${apiKey}`;\n\n            const payload = {\n                contents: [{ parts: [{ text: query }] }],\n                tools: [{ \"google_search\": {} }],\n                systemInstruction: {\n                    parts: [{ text: \"You are a financial information assistant. Find the current numerical EUR to KRW exchange rate and respond ONLY with a JSON object. Do not include any text outside the JSON block.\" }]\n                },\n                generationConfig: {\n                    responseMimeType: \"application\/json\",\n                    responseSchema: {\n                        type: \"OBJECT\",\n                        properties: {\n                            \"exchangeRate\": { \n                                \"type\": \"NUMBER\",\n                                \"description\": \"The current value of 1 EUR in KRW, as a number.\"\n                            }\n                        }\n                    }\n                }\n            };\n            \n            const MAX_RETRIES = 3;\n            let response, result;\n\n            for (let i = 0; i \u003c MAX_RETRIES; i++) {\n                response = await fetch(apiUrl, {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify(payload)\n                });\n\n                if (response.ok) {\n                    result = await response.json();\n                    break; \n                }\n                if (i \u003c MAX_RETRIES - 1) {\n                    await new Promise(resolve =\u003e setTimeout(resolve, Math.pow(2, i) * 1000));\n                }\n            }\n\n            if (result \u0026\u0026 result.candidates \u0026\u0026 result.candidates[0].content.parts[0].text) {\n                const jsonText = result.candidates[0].content.parts[0].text;\n                const parsedJson = JSON.parse(jsonText);\n                const fetchedRate = parsedJson.exchangeRate;\n\n                if (typeof fetchedRate === 'number' \u0026\u0026 fetchedRate \u003e 0) {\n                    updateKrwPrice(fetchedRate, 'Google Search');\n                    return;\n                }\n            }\n            \n            \/\/ Fallback to manual rate if API fails or returns invalid data\n            updateKrwPrice(manualRate, '\u0026#49688;\u0026#46041; \u0026#51077;\u0026#47141; \u0026#54872;\u0026#50984;');\n            \n        } catch (error) {\n            console.error(\"Error fetching rate, falling back to manual input:\", error);\n            updateKrwPrice(manualRate, '\u0026#49688;\u0026#46041; \u0026#51077;\u0026#47141; \u0026#54872;\u0026#50984;');\n        } finally {\n            indicator.classList.add('hidden');\n            updateButton.disabled = false;\n        }\n    }\n\n    document.addEventListener('DOMContentLoaded', () =\u003e {\n        \n        \/\/ --- Vintage Score Chart Configuration (Data from 23.08.10.png) ---\n        vintageData = {\n            labels: ['2021', '2022', '2023', '2024'], \n            datasets: [{\n                label: 'Critics Avg \/ 100', \n                data: [92, 91, 92, 94], \n                backgroundColor: (context) =\u003e {\n                    return context.dataIndex === 2 ? 'var(--accent-color)' : '#E7E5E4'; \/\/ Highlight 2023 (index 2)\n                },\n                borderColor: 'var(--dark-accent)', \n                borderWidth: 1,\n                borderRadius: 4,\n                fill: false,\n                type: 'bar',\n                hoverBackgroundColor: 'var(--accent-color)'\n            }]\n        };\n\n        vintageOptions = {\n            responsive: true,\n            maintainAspectRatio: false, \n            plugins: {\n                legend: { display: false },\n                title: { display: false }\n            },\n            scales: {\n                y: {\n                    beginAtZero: false,\n                    min: 90, \n                    max: 95, \n                    title: {\n                        display: true,\n                        text: 'Score', \n                        color: '#1d1d1f',\n                        font: { size: 10 } \n                    },\n                    ticks: {\n                        stepSize: 1, \n                        color: '#4a4a68',\n                        font: { size: 8 } \n                    }\n                },\n                x: {\n                    ticks: {\n                        color: '#4a4a68',\n                        font: { size: 8 }, \n                        maxRotation: 0, \n                        minRotation: 0\n                    }\n                }\n            }\n        };\n\n        vintageCtx = document.getElementById('vintageChart').getContext('2d');\n        vintageChartInstance = createChart(vintageCtx, 'bar', vintageData, vintageOptions, { chart: vintageChartInstance });\n\n        \n        \/\/ --- Price History Chart Configuration (Data from 23.08.10.png) ---\n        const priceElement = document.getElementById('priceChart');\n        if (priceElement) {\n            priceCtx = priceElement.getContext('2d');\n            \n            \/\/ Market Price data from table\n            const priceHistoryData = [24, 24, 25, 22]; \/\/ Market Avg Prices 2021, 2022, 2023, 2024\n            const priceLabels = ['2021', '2022', '2023', '2024'];\n\n            const priceData = { \n                labels: priceLabels,\n                datasets: [\n                    {\n                        \/\/ Average Market Price Line\n                        label: 'Vintage Market Avg Price (EUR)', \n                        data: priceHistoryData,\n                        backgroundColor: 'transparent', \n                        borderColor: '#71717a', \/\/ Gray line for market price\n                        borderWidth: 2,\n                        tension: 0.1, \n                        pointRadius: 4,\n                        pointBackgroundColor: '#71717a', \n                        fill: false, \n                        type: 'line',\n                        order: 1\n                    },\n                    {\n                        \/\/ Selling Price Marker (\u0026euro;25.00) - Shown against the 2023 market price\n                        label: 'Selling Price (\u0026euro;25.00 - Our Price)',\n                        data: [null, null, SELLING_PRICE_EUR, null], \/\/ Show at 2023 (index 2)\n                        borderColor: 'var(--dark-accent)',\n                        pointBackgroundColor: 'var(--dark-accent)',\n                        pointBorderColor: '#ffffff',\n                        pointBorderWidth: 2,\n                        pointRadius: 7,\n                        type: 'scatter',\n                        order: 0,\n                    }\n                ]\n            };\n\n            const priceOptions = { \n                responsive: true,\n                maintainAspectRatio: false, \n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        callbacks: {\n                            label: function(context) {\n                                let label = context.dataset.label || '';\n                                if (label) {\n                                    label += ': ';\n                                }\n                                if (context.parsed.y !== null) {\n                                    label += new Intl.NumberFormat('en-US', { style: 'currency', currency: 'EUR', minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(context.parsed.y);\n                                }\n                                return label;\n                            }\n                        }\n                    }\n                },\n                scales: {\n                    y: {\n                        beginAtZero: false, \n                        min: 20, \n                        max: 30, \n                        title: {\n                            display: true,\n                            text: 'Price (EUR)', \n                            color: '#1d1d1f',\n                            font: { size: 10 } \n                        },\n                        ticks: {\n                            callback: function(value) { return '\u0026euro;' + value; },\n                            stepSize: 2, \n                            color: '#4a4a68',\n                            font: { size: 8 } \n                        }\n                    },\n                    x: {\n                        ticks: {\n                            color: '#4a4a68',\n                            font: { size: 8 }, \n                            maxRotation: 0, \n                            minRotation: 0\n                        }\n                    }\n                }\n            };\n            \n            priceChartInstance = createChart(priceCtx, 'line', priceData, priceOptions, { chart: priceChartInstance });\n\n            \/* FINAL STABILITY FIX: Add resize listener back and update chart when window size changes *\/\n            window.addEventListener('resize', () =\u003e {\n                \n                 if (vintageChartInstance \u0026\u0026 vintageChartInstance.chart) {\n                    vintageChartInstance.chart.destroy(); \n                    vintageChartInstance = createChart(vintageCtx, 'bar', vintageData, vintageOptions, { chart: null });\n                }\n\n                if (priceChartInstance \u0026\u0026 priceChartInstance.chart) {\n                    priceChartInstance.chart.destroy(); \n                    priceChartInstance = createChart(priceCtx, 'line', priceData, priceOptions, { chart: null });\n                }\n            });\n        }\n        \n        \/\/ --- Initial Price Calculation and Event Listeners for KRW price box ---\n        const exchangeRateInput = document.getElementById('exchangeRate');\n        \n        const initialRate = INITIAL_RATE;\n        exchangeRateInput.value = initialRate.toFixed(2);\n        updateKrwPrice(initialRate, 'Google Search'); \/\/ Initial price calculation\n\n        exchangeRateInput.addEventListener('input', () =\u003e {\n            updateKrwPrice(exchangeRateInput.value, '\u0026#49688;\u0026#46041; \u0026#51077;\u0026#47141; \u0026#54872;\u0026#50984;');\n        });\n    });\n\u003c\/script\u003e\n\n\n\u003c\/body\u003e","brand":"Donnhoff","offers":[{"title":"Default Title","offer_id":53354844848457,"sku":null,"price":25.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0791\/8593\/6713\/files\/doenhopeu-nideohaujeo-keullam-liseulling-kabines-2023-hwaiteuwain-770.webp?v=1761131671","url":"https:\/\/xwine.club\/products\/%eb%90%9c%ed%98%b8%ed%94%84-%eb%8b%88%eb%8d%94%ed%95%98%ec%9a%b0%ec%a0%80-%ed%81%b4%eb%9e%8c-%eb%a6%ac%ec%8a%ac%eb%a7%81-%ec%b9%b4%eb%b9%84%eb%84%b7-2023","provider":"엑스와인","version":"1.0","type":"link"}