PageSourceSearch

https://demaf.kr/js/demaf-products.js?v=YYYYMMDD

js demaf.kr collected 2026-10-05 05:21:00 UTC 14,691 bytes, 169 lines download raw bytes

1/* ============================================================================
2 * demaf-products.js — 디마프 제품·루틴 데이터 단일 소스 (Cafe24 정적 스냅샷)
3 * ----------------------------------------------------------------------------
4 * 사용처: skin30/index_v2.html (메인 루틴), page/find-my-skin-type.html (진단 챗),
5 *         page/skin-type-test.html (피부타입 진단), page/landing-v2.html 등.
6 *         가격/이미지 변경 시 이 파일 1곳만 수정.
7 * 로드:  <script src="/js/demaf-products.js?v=YYYYMMDD"></script>
8 * 전역:  window.DEMAF_PRODUCTS = {
9 *          DATA, ITEM, COPY, get(no), url(no),
10 *          ROUTINE_TITLE, ROUTINE_MATRIX, TRIAL_KIT, routineLine(items), trialKitFor(items)
11 *        }
12 *
13 * 스냅샷 기준일: 2026-08-13 — 전 상품을 상세페이지 실제 값(og:title / 판매가 / og:image)과
14 *   대조해 갱신했다. 이전 스냅샷은 EGF 앰플이 71,200원(실제 98,000원), 세트 4종의 가격·상품명이
15 *   개편 전 값으로 남아 있었다. 가격을 바꿀 때는 상세페이지 값을 그대로 옮길 것.
16 * ========================================================================== */
17(function (w) {
18  'use strict';
19
20  /* ===== 제품 정적 매핑 (product_no → 이름/가격/이미지) =====
21   * name  = 상세페이지 노출명, short = 카드·표에 쓰는 짧은 이름
22   * sale  = 할인 판매가(있을 때만). price 는 정가. */
23  var DATA = {
24    /* 개별 상품 */
25    10202: { name: '퍼스트 세럼 만능기초 오리지널 155ml', short: '만능기초 세럼',        price: '34,000원', image: 'https://demaf.kr/web/product/big/202608/11760ab76d1ea630dc3ea2326c71920b.jpg' },
26    10241: { name: '퍼스트 세럼 만능기초 라이트 155ml',   short: '만능기초 세럼 라이트', price: '34,000원', image: 'https://demaf.kr/web/product/big/202608/b9bfdf90978a8ab7938558642d13c34d.jpg' },
27    10064: { name: '판테놀 30% 앰플 60ml',                short: '판테놀 30% 앰플',      price: '46,000원', image: 'https://demaf.kr/web/product/big/202608/b002f34dd4ab8e7cfb3f1b4f429c4147.jpg' },
28    10238: { name: '판테놀 10% 앰플 60ml',                short: '판테놀 10% 앰플',      price: '38,000원', image: 'https://demaf.kr/web/product/big/202608/7749257b2dd28dbbc906d6a52cb2fef1.jpg' },
29    10071: { name: 'EGF 펩타이드 앰플 60ml',              short: 'EGF 펩타이드 앰플',    price: '98,000원', image: 'https://demaf.kr/web/product/big/202608/eacbb837581937c9f2b11c9e573f9735.jpg' },
30    10062: { name: '크림스컴트루 장벽 크림 50ml',         short: '크림스컴트루 크림',    price: '38,000원', image: 'https://demaf.kr/web/product/big/202608/b3ccbe3f55a7273c0f36f5fdf1fdf6df.jpg' },
31    10255: { name: '크림스컴트루 장벽 크림 라이트 50ml',  short: '크림스컴트루 크림 라이트', price: '38,000원', image: 'https://demaf.kr/web/product/big/202608/6645eb4a25bde909f272802d2bea612d.jpg' },
32    10190: { name: '그린 시카 포어 앰플 50ml',            short: '그린 시카 포어 앰플',  price: '42,000원', image: 'https://demaf.kr/web/product/big/202608/8f58103b2f7bc8b4684749bb2a3b89d3.jpg' },
33    10182: { name: '마이 글로우 만능오일 20ml',           short: '만능오일',             price: '21,000원', image: 'https://demaf.kr/web/product/big/202608/5a1547826a59c1d2e646bb07c7bac38f.jpg' },
34
35    /* 루틴 세트 (본품) */
36    10218: { name: '[건성/건조복합성] 수분 진정 루틴',      short: '수분 진정 루틴',      price: '118,000원', sale: '100,300원', image: 'https://demaf.kr/web/product/big/202608/140c195dd51e23266a994475015c89a1.jpg' },
37    10247: { name: '[지성/유분복합성] 트러블 진정 루틴',    short: '트러블 진정 루틴',    price: '110,000원', sale: '93,500원',  image: 'https://demaf.kr/web/product/big/202608/2f76765f8815b14c91c5ab6f31faec64.jpg' },
38    10219: { name: '[건성/건조복합성] 탄력 광채 루틴',      short: '탄력 광채 루틴',      price: '170,000원', sale: '144,500원', image: 'https://demaf.kr/web/product/big/202608/888f65de9e59a4425ef4e6fe6cc6e58b.jpg' },
39    10246: { name: '[지성/유분복합성] 탄력 동안 케어 루틴', short: '탄력 동안 케어 루틴', price: '170,000원', sale: '144,500원', image: 'https://demaf.kr/web/product/big/202608/cb23c2da6f0291739dbd36d57d2e9eb1.jpg' },
40    10240: { name: '[지성/유분복합성] 모공 케어 루틴',      short: '모공 케어 루틴',      price: '110,000원', sale: '93,500원',  image: 'https://demaf.kr/web/product/big/202608/e90b5c781894eb7832539b40a02ec113.jpg' },
41    10242: { name: '[건성/건조복합성] 꿀광 탄력 케어 루틴', short: '꿀광 탄력 케어 루틴', price: '216,000원', sale: '183,600원', image: 'https://demaf.kr/web/product/big/202608/2fdd37c503de0decf61f11602778e29b.jpg' },
42
43    /* 체험키트 (1인 1회 한정 · 상세페이지에서 본인인증 후 구매)
44       구 웰컴키트 10151/10152 를 대체한 신규 3종. */
45    10270: { name: '[체험키트] 아기자기 장벽 키트(만능기초 50ml + 판테놀 30% 앰플 20ml + 크컴츄 15ml)', short: '건성용 체험키트', price: '54,000원', sale: '14,900원', image: 'https://demaf.kr/web/product/big/202608/aff80dea27c416df54114
4517f1f3eecf0.jpg' },
46    10271: { name: '[지성용 체험키트] 아기자기 장벽 키트 for oily skin(만능기초 라이트 50ml + 그린 시카 포어 앰플 20ml + 크컴츄 라이트 20ml)', short: '지성용 체험키트', price: '53,000원', sale: '14,900원', image: 'https://demaf.kr/web/product/big/202608/4ddb8fd6a82cb8ca5bb5876b9796ba76.jpg' },
47    10269: { name: '[체험키트] 아기자기 세안 키트(밀크클렌저 50ml + 오일클렌저 40ml + 젤 클렌저 30ml)', short: '세안 체험키트', price: '30,000원', sale: '14,900원', image: 'https://demaf.kr/web/product/big/202608/3608d0a07cb980d440a3ae2f828aecc6.jpg' }
48  };
49
50  /* ===== 아이템 별칭 → product_no =====
51   * ※ creamLight 는 오리지널(10062)이 아닌 라이트 전용 10255 로 정정.
52   * ※ oil(만능오일 10182) 신규 추가 — 건성×30-40대 루틴 업셀. */
53  var ITEM = {
54    serum:       10202,  // 만능기초 오리지널
55    serumLight:  10241,  // 만능기초 라이트(지성용)
56    panthenol30: 10064,  // 판테놀 30% 앰플
57    panthenol10: 10238,  // 판테놀 10% 앰플
58    egf:         10071,  // EGF 펩타이드 앰플
59    cream:       10062,  // 크림스컴트루 오리지널
60    creamLight:  10255,  // 크림스컴트루 라이트
61    cica:        10190,  // 그린 시카 포어 앰플
62    oil:         10182   // 마이 글로우 만능오일
63  };
64
65  /* ===== 아이템별 표시용 카피 (스텝 라벨 + 효능 한 줄) =====
66   * step = 스킨케어 순서(1 세럼 → 2 앰플 → 3 크림). 루틴을 STEP 별로 묶어 보여줄 때 쓴다. */
67  var COPY = {
68    serum:       { step: 1, n: '세럼', w: '첫 수분층을 만들어요' },
69    serumLight:  { step: 1, n: '세럼', w: '유분 없이 가벼운 수분' },
70    panthenol30: { step: 2, n: '앰플', w: '수분을 가두고 장벽을 회복해요' },
71    panthenol10: { step: 2, n: '앰플', w: '지성용 가벼운 장벽 케어' },
72    egf:         { step: 2, n: '앰플', w: '피부 재생을 자극해 노화 징후 개선' },
73    cream:       { step: 3, n: '크림', w: '밤새 모든 성분을 잠가줘요' },
74    creamLight:  { step: 3, n: '크림', w: '가벼운 마무리 — 번들거림 없이' },
75    cica:        { step: 2, n: '앰플', w: '진정하고 근본부터 유분을 조절해요' },
76    /* 오일은 메인 루틴(demaf-routines.js 의 dry_old)과 마찬가지로 STEP 1 '속 채우기'에서
77       세럼에 더해 쓴다. 단독 스텝이 아니라 세럼의 보강재다. */
78    oil:         { step: 1, n: '오일', w: '보습·광채를 한층 끌어올려요' }
79  };
80
81  /* ===== 루틴 이름 (피부타입별) ===== */
82  var ROUTINE_TITLE = { dry: '수분 진정 루틴', combo: '수분/트러블 진정 루틴', oily: '트러블 진정 루틴' };
83
84  /* ===== 루틴 매트릭스 (skinType_age_concern) =====
85   * age: 'young' = 10~20대, 'adult' = 30~40대 이상 / set: 본품 루틴 세트 product_no
86   * 상담봇(index_skin_type_chat.html)이 쓰던 24+6셀 매트릭스를 여기로 옮겨 공유한다. */
87  var ROUTINE_MATRIX = {
88    /* 10~20대 */
89    'dry_young_concern_1':   { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
90    'dry_young_concern_2':   { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
91    'dry_young_concern_3':   { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
92    'dry_young_concern_4':   { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
93    'combo_young_concern_1': { items: ['serumLight', 'panthenol10', 'creamLight'], set: 10247 },
94    'combo_young_concern_2': { items: ['serumLight', 'panthenol10', 'creamLight'], set: 10247 },
95    'combo_young_concern_3': { items: ['serumLight', 'cica', 'creamLight'],        set: 10240 },
96    'combo_young_concern_4': { items: ['serumLight', 'panthenol30', 'creamLight'], set: 10247 },
97    'oily_young_concern_1':  { items: ['serumLight', 'panthenol10', 'creamLight'], set: 10247 },
98    'oily_young_concern_2':  { items: ['serumLight', 'panthenol10', 'creamLight'], set: 10247 },
99    'oily_young_concern_3':  { items: ['serumLight', 'cica', 'creamLight'],        set: 10240 },
100    'oily_young_concern_4':  { items: ['serumLight', 'panthenol10', 'creamLight'], set: 10247 },
101    /* 30~40대 이상 */
102    'dry_adult_concern_1':   { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
103    'dry_adult_concern_2':   { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
104    'dry_adult_concern_3':   { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
105    'dry_adult_concern_4':   { items: ['serum', 'panthenol30', 'egf', 'cream'],    set: 10242 },
106    'combo_adult_concern_1': { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
107    'combo_adult_concern_2': { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
108    'combo_adult_concern_3': { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
109    'combo_adult_concern_4': { items: ['serum', 'panthenol30', 'egf', 'cream'],    set: 10242 },
110    'oily_adult_concern_1':  { items: ['serumLight', 'panthenol10', 'creamLight'], set: 10247 },
111    'oily_adult_concern_2':  { items: ['serumLight', 'panthenol10', 'creamLight'], set: 10247 },
112    'oily_adult_concern_3':  { items: ['serumLight', 'cica', 'creamLight'],        set: 10240 },
113    'oily_adult_concern_4':  { items: ['serumLight', 'egf', 'creamLight'],         set: 10246 },
114    /* concern_5 = 별다른 고민 없음 → 피부타입·나이 기준 대표 루틴 */
115    'dry_young_concern_5':   { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
116    'dry_adult_concern_5':   { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
117    'combo_young_concern_5': { items: ['serum', 'panthenol30', 'cream'],           set: 10218 },
118    'combo_adult_concern_5': { items: ['serumLight', 'cica', 'creamLight'],        set: 10240 },
119    'oily_young_concern_5':  { items: ['serumLight', 'cica', 'creamLight'],        set: 10240 },
120    'oily_adult_concern_5':  { items: ['serumLight', 'panthenol10', 'creamLight'], set: 10247 }
121  };
122
123  /* ===== 체험키트 (루틴 라인별) =====
124   * 본품 세트가 부담스러운 사람에게 제안하는 1인 1회 한정 키트.
125   * 판정 기준은 세럼·크림의 라인(오리지널/라이트)이다. 키트에 든 앰플까지 루틴과 똑같지는 않다
126   *   — 예: 지성 EGF 루틴에도 그린 시카가 든 지성용 키트를 붙인다. 라인만 맞으면 체험 목적에는 충분하고,
127   *     키트 종류가 2개뿐이라 앰플까지 맞추는 조합은 존재하지 않는다.
128   * video          = 키트별 사용법 영상(YouTube ID)
129   * reviews        = 체험키트 SKU 자체의 리뷰 개수(2026-08-13에 만든 신상품이라 아직 적다).
130   * formulaReviews = 키트 안에 든 본품 성분 3종의 리뷰 수를 합친 값(2026-08-24 스크래핑,
131   *   출처: 상세페이지 "리뷰 개수 전체" 텍스트 + Product JSON-LD aggregateRating.reviewCount
132   *   교차검증). ★ 현재 page/start.html 은 이 값을 안 쓴다 — 같은 제품이 과거에 다른
133   *   상품ID로 재등록된 이력까지 알파리뷰가 합쳐서 보여주는 값일 수 있어 "카페24 자사몰
134   *   리뷰 수만" 요구를 만족하는지 확신할 수 없었다. 대신 진열 56(체험키트 3종 전용, 신규
135   *   생성)을 만들어 카페24가 그 자리에서 실제로 렌더한 알파리뷰 위젯 노드를 그대로 옮겨
136   *   쓰는 방식으로 바꿨다(page/start.html 의 poolReviewWidget() 참고) — 스코프가 확실한
137   *   진짜 값이라 이쪽이 우선이다. 이 필드는 그 방식이 막힐 때의 참고용으로 남겨 둔다.
138   *   오리지널 라인 = 만능기초 오리지널(10202) 13,828 + 판테놀30%(10064) 22,514 + 크컴츄(10062) 12,653 = 48,995
139   *   라이트 라인   = 만능기초 라이트(10241)  3,288 + 그린시카포어(10190)  3,000 + 크컴츄라이트(10255)  697 =  6,985 */
140  var TRIAL_KIT = {
141    original:  { no: 10270, video: 'DDOzO5UKqtY', reviews: 105, formulaReviews: 48995 },
142    light:     { no: 10271, video: 'dYmbvDJB2dI', reviews: 77,  formulaReviews: 6985 },
143    cleansing: { no: 10269, video: 'DDOzO5UKqtY', reviews: 33  }   /* 세안 키트 (루틴 매칭 대상 아님, formulaReviews 미측정) */
144  };
145
146  /* 루틴 아이템 구성이 오리지널 라인인지 라이트 라인인지 */
147  function routineLine(items) {
148    if (!items || !items.length) return null;
149    if (items.indexOf('serumLight') !== -1 || items.indexOf('creamLight') !== -1) return 'light';
150    if (items.indexOf('serum') !== -1 || items.indexOf('cream') !== -1) return 'original';
151    return null;
152  }
153
154  /* 루틴 구성에 맞는 체험키트 { no, video } (없으면 null) */
155  function trialKitFor(items) {
156    var line = routineLine(items);
157    return line ? (TRIAL_KIT[line] || null) : null;
158  }
159
160  /* ===== 헬퍼 ===== */
161  function url(no) { return '/product/detail.html?product_no=' + no; }
162  function get(no) { return DATA[no] || null; }
163
164  w.DEMAF_PRODUCTS = {
165    DATA: DATA, ITEM: ITEM, COPY: COPY, get: get, url: url,
166    ROUTINE_TITLE: ROUTINE_TITLE, ROUTINE_MATRIX: ROUTINE_MATRIX, TRIAL_KIT: TRIAL_KIT,
167    routineLine: routineLine, trialKitFor: trialKitFor
168  };
169})(window);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.