{"roots":["478:1385"],"nodeById":{"3:533":{"id":"3:533","assetId":"VariableCollectionId:94d5d923c4571b18981ae42850d2846fefd1782b/84:168","type":"VARIABLE_COLLECTION","name":"Variable collection","defaultModeId":"2:0","modes":[{"modeId":"2:0","name":"Ondemand"}]},"2:2":{"id":"2:2","assetId":"VariableCollectionId:dc345dddf4ae0a83e7b2f70e54ddc86c3952cbad/11:0","type":"VARIABLE_COLLECTION","name":"Collection 1","defaultModeId":"11:0","modes":[{"modeId":"11:0","name":"Mode 1"}]},"3:571":{"id":"3:571","type":"VARIABLE","assetId":"VariableID:c7fea77d2a3d7d56746b876b871b60353b9d13d4/84:150","name":"Number/Padding/Number 4","resolvedType":"FLOAT","variableCollectionId":"VariableCollectionId:94d5d923c4571b18981ae42850d2846fefd1782b/84:168","codeSyntax":{},"valuesByMode":{"2:0":16.0}},"3:570":{"id":"3:570","type":"VARIABLE","assetId":"VariableID:c4c6e710a0d7b66a3915a97cf560ddda2bd8f2dc/84:167","name":"Color/Icon/Primary","resolvedType":"COLOR","variableCollectionId":"VariableCollectionId:94d5d923c4571b18981ae42850d2846fefd1782b/84:168","codeSyntax":{},"valuesByMode":{"2:0":{"r":0.886274516582489,"g":0.152941182255745,"b":0.211764708161354,"a":1.0}}},"3:523":{"type":"COMPONENT_SET","id":"3:523","name":"bx-qr","absoluteBoundingBox":{"x":1477.0,"y":7000.0,"width":88.0,"height":156.0},"isolatedAbsoluteRenderBounds":{"x":1477.0,"y":7000.0,"width":88.0,"height":156.0},"relativeTransform":[[1.0,0.0,1477.0],[0.0,1.0,7000.0]],"size":{"x":88.0,"y":156.0},"fills":[],"strokeAlign":"INSIDE","strokeDashes":[10.0,5.0],"strokes":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.592156887054443,"g":0.278431385755539,"b":1.0,"a":1.0},"visible":true,"opacity":1.0}],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"children":["3:524"],"componentPropertyDefinitions":{"Property 1":{"type":"VARIANT","defaultValue":"Default","variantOptions":["Default","bx-credit-card"]}}},"3:573":{"type":"COMPONENT","id":"3:573","name":"Property 1=M, Property 2=Default","overrideKey":"883:1212","absoluteBoundingBox":{"x":428.0,"y":1898.0,"width":142.0,"height":40.0},"isolatedAbsoluteRenderBounds":{"x":428.0,"y":1898.0,"width":142.0,"height":40.0},"relativeTransform":[[1.0,0.0,26.0],[0.0,1.0,16.0]],"size":{"x":142.0,"y":40.0},"fills":[],"constraintValues":{"left":{"pixelOffset":26.0,"sizeFraction":0.0},"top":{"pixelOffset":16.0,"sizeFraction":0.0}},"strokeAlign":"INSIDE","strokes":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.886274516582489,"g":0.152941182255745,"b":0.211764708161354,"a":1.0},"boundVariables":{"color":{"type":"VARIABLE_ALIAS","id":"VariableID:c4c6e710a0d7b66a3915a97cf560ddda2bd8f2dc/84:167"}},"visible":true,"opacity":1.0}],"boundVariables":{"strokes":[{"type":"VARIABLE_ALIAS","id":"VariableID:c4c6e710a0d7b66a3915a97cf560ddda2bd8f2dc/84:167"}]},"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"rectangleCornerRadii":[8.0,8.0,8.0,8.0],"cornerRadius":8.0,"paddingTop":10.0,"paddingBottom":10.0,"clipsContent":true,"layoutMode":"VERTICAL","itemSpacing":8.0,"counterAxisAlignItems":"CENTER","primaryAxisSizingMode":"FIXED","isInAnimateTree":true,"children":["3:574"],"componentSetId":"3:572"},"3:576":{"type":"TEXT","id":"3:576","name":"label-text","overrideKey":"883:1215","absoluteBoundingBox":{"x":472.0,"y":1908.0,"width":82.0,"height":20.0},"isolatedAbsoluteRenderBounds":{"x":473.246002197266,"y":1908.63598632812,"width":79.6559753417969,"height":13.531982421875},"relativeTransform":[[1.0,0.0,44.0],[0.0,1.0,0.0]],"size":{"x":82.0,"y":20.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.886274516582489,"g":0.152941182255745,"b":0.211764708161354,"a":1.0},"boundVariables":{"color":{"type":"VARIABLE_ALIAS","id":"VariableID:c4c6e710a0d7b66a3915a97cf560ddda2bd8f2dc/84:167"}},"visible":true,"opacity":1.0}],"constraints":{"vertical":"SCALE","horizontal":"LEFT_RIGHT"},"strokeAlign":"OUTSIDE","strokes":[],"boundVariables":{"fills":[{"type":"VARIABLE_ALIAS","id":"VariableID:c4c6e710a0d7b66a3915a97cf560ddda2bd8f2dc/84:167"}]},"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"เพิ่มลงตระกร้า","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","textAlignVertical":"CENTER","style":{"styleIdForText":"StyleId:5b63843fb27f109d178eb747f36a34417ce1d568/2:19","fontFamily":"Noto Sans Thai","fontPostScriptName":null,"fontStyle":"SemiBold","textAutoResize":"WIDTH_AND_HEIGHT","boundVariables":{"paints":[{"type":"VARIABLE_ALIAS","id":"VariableID:c4c6e710a0d7b66a3915a97cf560ddda2bd8f2dc/84:167"}]},"fontVariantPosition":"NORMAL","fontSize":14.0,"textAlignHorizontal":"LEFT","textAlignVertical":"CENTER","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":20.0,"lineHeightPercent":94.5447616577148,"lineHeightPercentFontSize":142.857147216797,"lineHeightUnit":"PIXELS","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"3:575":{"mainComponentId":"3:524","type":"INSTANCE","id":"3:575","name":"bx-qr","overrideKey":"883:1214","absoluteBoundingBox":{"x":444.0,"y":1908.0,"width":20.0,"height":20.0},"isolatedAbsoluteRenderBounds":{"x":444.0,"y":1908.0,"width":20.0,"height":20.0},"relativeTransform":[[1.0,0.0,16.0],[0.0,1.0,0.0]],"size":{"x":20.0,"y":20.0},"fills":[],"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.833333313465118,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"clipsContent":true,"children":["I3:575;26:1379"],"componentSetId":"3:523","componentProperties":{"Property 1":{"value":"Default","type":"VARIANT","boundVariables":{}}},"uniformScaleFactor":0.416666656732559,"overrides":[{"key":["Vector0"],"value":{"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.886274516582489,"g":0.152941182255745,"b":0.211764708161354,"a":1.0},"boundVariables":{"color":{"type":"VARIABLE_ALIAS","id":"VariableID:c4c6e710a0d7b66a3915a97cf560ddda2bd8f2dc/84:167"}},"visible":true,"opacity":1.0}]},"componentId":"3:524"},{"key":[],"value":{"size":{"x":20.0,"y":20.0}},"componentId":"3:524"}]},"3:535":{"id":"3:535","type":"VARIABLE","assetId":"VariableID:5e0b51054665ce9b4d622d13700cbdf3b8193326/84:158","name":"Color/Icon/Secondary","resolvedType":"COLOR","variableCollectionId":"VariableCollectionId:94d5d923c4571b18981ae42850d2846fefd1782b/84:168","codeSyntax":{},"valuesByMode":{"2:0":{"r":0.137254908680916,"g":0.121568627655506,"b":0.125490203499794,"a":1.0}}},"483:1764":{"type":"COMPONENT","id":"483:1764","name":"Header 2","absoluteBoundingBox":{"x":-3206.0,"y":-677.0,"width":1280.0,"height":71.0},"isolatedAbsoluteRenderBounds":{"x":-3206.0,"y":-677.0,"width":1280.0,"height":71.0},"relativeTransform":[[1.0,0.0,-3206.0],[0.0,1.0,-677.0]],"size":{"x":1280.0,"y":71.0},"fills":[],"strokeAlign":"INSIDE","strokes":[],"accessibleHTMLTag":"HEADER","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"paddingTop":12.0,"paddingRight":64.0,"paddingBottom":12.0,"paddingLeft":64.0,"layoutMode":"HORIZONTAL","itemSpacing":16.0,"counterAxisAlignItems":"CENTER","primaryAxisAlignItems":"SPACE_BETWEEN","primaryAxisSizingMode":"FIXED","children":["483:1284","483:1323"]},"483:1326":{"type":"TEXT","id":"483:1326","name":"ดูสินค้าอื่น ๆ ของเรา","absoluteBoundingBox":{"x":-2084.0,"y":-653.0,"width":129.0,"height":23.0},"isolatedAbsoluteRenderBounds":{"x":-2084.0,"y":-653.0,"width":129.0,"height":23.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":129.0,"y":23.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"OUTSIDE","strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"behaviors":{"hover":{"transition":{"easingType":"OUT_CUBIC","easingFunction":[0.215000003576279,0.610000014305115,0.354999989271164,1.0],"transitionDuration":0.300000011920929,"delay":0.0},"state":{"transform":{"m00":1.01999998092651,"m01":0.0,"m02":0.0,"m10":0.0,"m11":1.01999998092651,"m12":0.0},"opacity":1.0},"behaviorType":"hover"}},"characterStyleOverrides":[],"characters":"ดูสินค้าอื่น ๆ ของเรา","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":16.0}},"textAutoResize":"WIDTH_AND_HEIGHT","textAlignHorizontal":"CENTER","textAlignVertical":"CENTER","paragraphSpacing":16.0,"fallbackFonts":[{"fontFamily":"Noto Sans Thai","fontStyle":"Medium"}],"style":{"fontFamily":"Inter","fontPostScriptName":"Inter-Medium","fontStyle":"Medium","fallbackFonts":[{"fontFamily":"Noto Sans Thai","fontStyle":"Medium"}],"hyperlink":{"type":"URL","url":"https://shoponline.ondemand.in.th/","openInNewTab":true},"paragraphSpacing":16.0,"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","textDecoration":"UNDERLINE","textDecorationSkipInk":true,"fontSize":16.0,"textAlignHorizontal":"CENTER","textAlignVertical":"CENTER","letterSpacing":-0.08,"letterSpacingValue":-0.5,"letterSpacingUnit":"PERCENT","lineHeightPx":23.2000007629395,"lineHeightPercent":119.812210083008,"lineHeightPercentFontSize":145.0,"lineHeightUnit":"FONT_SIZE_%","paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"483:1325":{"type":"TEXT","id":"483:1325","name":"ดูสินค้าอื่น ๆ ของเรา","absoluteBoundingBox":{"x":-2084.0,"y":-653.0,"width":129.0,"height":23.0},"isolatedAbsoluteRenderBounds":{"x":-2084.0,"y":-653.0,"width":129.0,"height":23.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":129.0,"y":23.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"OUTSIDE","strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"behaviors":{"hover":{"transition":{"easingType":"OUT_CUBIC","easingFunction":[0.215000003576279,0.610000014305115,0.354999989271164,1.0],"transitionDuration":0.300000011920929,"delay":0.0},"state":{"transform":{"m00":1.01999998092651,"m01":0.0,"m02":0.0,"m10":0.0,"m11":1.01999998092651,"m12":0.0},"opacity":1.0},"behaviorType":"hover"}},"characterStyleOverrides":[],"characters":"ดูสินค้าอื่น ๆ ของเรา","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":16.0}},"textAutoResize":"WIDTH_AND_HEIGHT","textAlignHorizontal":"CENTER","textAlignVertical":"CENTER","paragraphSpacing":16.0,"fallbackFonts":[{"fontFamily":"Noto Sans Thai","fontStyle":"Medium"}],"style":{"fontFamily":"Inter","fontPostScriptName":"Inter-Medium","fontStyle":"Medium","fallbackFonts":[{"fontFamily":"Noto Sans Thai","fontStyle":"Medium"}],"hyperlink":{"type":"URL","url":"https://shoponline.ondemand.in.th/","openInNewTab":true},"paragraphSpacing":16.0,"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","textDecoration":"UNDERLINE","textDecorationSkipInk":true,"fontSize":16.0,"textAlignHorizontal":"CENTER","textAlignVertical":"CENTER","letterSpacing":-0.08,"letterSpacingValue":-0.5,"letterSpacingUnit":"PERCENT","lineHeightPx":23.2000007629395,"lineHeightPercent":119.812210083008,"lineHeightPercentFontSize":145.0,"lineHeightUnit":"FONT_SIZE_%","paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"483:1324":{"type":"TEXT","id":"483:1324","name":"ดูคอร์สทั้งหมด","absoluteBoundingBox":{"x":-2084.0,"y":-653.0,"width":94.0,"height":23.0},"isolatedAbsoluteRenderBounds":{"x":-2082.841796875,"y":-650.903991699219,"width":91.3460693359375,"height":20.1439819335938},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":94.0,"y":23.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"strokeAlign":"OUTSIDE","strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"behaviors":{"hover":{"transition":{"easingType":"OUT_CUBIC","easingFunction":[0.215000003576279,0.610000014305115,0.354999989271164,1.0],"transitionDuration":0.300000011920929,"delay":0.0},"state":{"transform":{"m00":1.01999998092651,"m01":0.0,"m02":0.0,"m10":0.0,"m11":1.01999998092651,"m12":0.0},"opacity":1.0},"behaviorType":"hover"}},"characterStyleOverrides":[],"characters":"ดูคอร์สทั้งหมด","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":16.0}},"textAutoResize":"WIDTH_AND_HEIGHT","textAlignHorizontal":"CENTER","textAlignVertical":"CENTER","paragraphSpacing":16.0,"style":{"fontFamily":"Noto Sans Thai UI","fontPostScriptName":"NotoSansThaiUI-Medium","fontStyle":"Medium","paragraphSpacing":16.0,"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":16.0,"textAlignHorizontal":"CENTER","textAlignVertical":"CENTER","letterSpacing":-0.08,"letterSpacingValue":-0.5,"letterSpacingUnit":"PERCENT","lineHeightPx":23.2000007629395,"lineHeightPercent":106.461090087891,"lineHeightPercentFontSize":145.0,"lineHeightUnit":"FONT_SIZE_%","paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"3:572":{"type":"COMPONENT_SET","id":"3:572","name":"Button - Outline","absoluteBoundingBox":{"x":402.0,"y":1882.0,"width":394.0,"height":264.0},"isolatedAbsoluteRenderBounds":{"x":402.0,"y":1882.0,"width":394.0,"height":264.0},"relativeTransform":[[1.0,0.0,402.0],[0.0,1.0,1882.0]],"size":{"x":394.0,"y":264.0},"fills":[],"strokeAlign":"INSIDE","strokeDashes":[10.0,5.0],"strokes":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.592156887054443,"g":0.278431385755539,"b":1.0,"a":1.0},"visible":true,"opacity":1.0}],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"children":["3:573"],"componentPropertyDefinitions":{"Property 1":{"type":"VARIANT","defaultValue":"M","variantOptions":["M","S"]},"Property 2":{"type":"VARIANT","defaultValue":"Default","variantOptions":["Default","hover","active","disable"]}}},"483:1285":{"type":"GROUP","id":"483:1285","name":"Group","absoluteBoundingBox":{"x":-3139.12255859375,"y":-659.587280273438,"width":120.248077392578,"height":36.0},"isolatedAbsoluteRenderBounds":{"x":-3139.12255859375,"y":-659.587280273438,"width":120.248077392578,"height":36.0},"relativeTransform":[[1.0,0.0,2.87738037109375],[0.0,1.0,5.41275024414062]],"size":{"x":120.248077392578,"y":36.0},"fills":[],"constraints":{"vertical":"SCALE","horizontal":"SCALE"},"constraintValues":{"left":{"pixelOffset":0.0,"sizeFraction":0.0226565383550689},"right":{"pixelOffset":0.0,"sizeFraction":0.969491793414739},"top":{"pixelOffset":0.0,"sizeFraction":0.115164898811503},"bottom":{"pixelOffset":0.0,"sizeFraction":0.881122345620013}},"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.74744576215744,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"children":["483:1286"]},"483:1286":{"type":"GROUP","id":"483:1286","name":"Layer_1","absoluteBoundingBox":{"x":-3139.12255859375,"y":-659.587280273438,"width":120.248077392578,"height":36.0},"isolatedAbsoluteRenderBounds":{"x":-3139.12255859375,"y":-659.587280273438,"width":120.248077392578,"height":36.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":120.248077392578,"y":36.0},"fills":[],"constraints":{"vertical":"SCALE","horizontal":"SCALE"},"constraintValues":{"left":{"pixelOffset":0.0,"sizeFraction":0.0226565383550689},"right":{"pixelOffset":0.0,"sizeFraction":0.969491793414739},"top":{"pixelOffset":0.0,"sizeFraction":0.115164898811503},"bottom":{"pixelOffset":0.0,"sizeFraction":0.881122345620013}},"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.74744576215744,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"children":["483:1287"]},"483:1287":{"type":"GROUP","id":"483:1287","name":"Group","absoluteBoundingBox":{"x":-3139.12255859375,"y":-659.587280273438,"width":120.248077392578,"height":36.0},"isolatedAbsoluteRenderBounds":{"x":-3139.12255859375,"y":-659.587280273438,"width":120.248077392578,"height":36.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":120.248077392578,"y":36.0},"fills":[],"constraints":{"vertical":"SCALE","horizontal":"SCALE"},"constraintValues":{"left":{"pixelOffset":0.0,"sizeFraction":0.0226565383550689},"right":{"pixelOffset":0.0,"sizeFraction":0.969491793414739},"top":{"pixelOffset":0.0,"sizeFraction":0.115164898811503},"bottom":{"pixelOffset":0.0,"sizeFraction":0.881122345620013}},"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.74744576215744,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"children":["483:1288","483:1317"]},"483:1319":{"type":"SVG","id":"483:1319","name":"Vector","absoluteBoundingBox":{"x":-3138.11328125,"y":-658.340209960938,"width":33.7860984802246,"height":17.3078346252441},"isolatedAbsoluteRenderBounds":{"x":-3138.11328125,"y":-658.340209960938,"width":33.7861328125,"height":17.307861328125},"relativeTransform":[[1.0,0.0,1.00916051864624],[0.0,1.0,1.24704539775848]],"size":{"x":33.7860984802246,"y":17.3078346252441},"blendMode":"SCREEN","fills":[{"blendMode":"SCREEN","type":"GRADIENT_LINEAR","transform":[[0.0,-0.506418764591217,1.0],[0.99181056022644,0.0,0.00409473199397326]],"gradientStops":[{"color":{"r":1.0,"g":1.0,"b":1.0,"a":0.800000011920929},"position":0.200000002980232},{"color":{"r":1.0,"g":1.0,"b":1.0,"a":0.0},"position":0.779999971389771}],"visible":true,"opacity":1.0}],"constraints":{"vertical":"SCALE","horizontal":"SCALE"},"constraintValues":{"left":{"pixelOffset":0.0,"sizeFraction":0.030602684171181},"right":{"pixelOffset":0.0,"sizeFraction":0.296634955669013},"top":{"pixelOffset":8.88178419700125e-16,"sizeFraction":0.141697779614875},"bottom":{"pixelOffset":0.0,"sizeFraction":0.509949580151984}},"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.74744576215744,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"hash":"34c4952bf19afff3551da2435060b2fd1c8dc593"},"478:1385":{"type":"WEBPAGE","id":"478:1385","name":"/","absoluteBoundingBox":{"x":-2881.0,"y":428.0,"width":2711.0,"height":1244.0},"isolatedAbsoluteRenderBounds":{"x":-2881.0,"y":428.0,"width":2711.0,"height":1244.0},"relativeTransform":[[1.0,0.0,-2881.0],[0.0,1.0,428.0]],"size":{"x":2711.0,"y":1244.0},"fills":[{"opacity":0.298039227724075,"blendMode":"NORMAL","type":"SOLID","color":{"r":1.0,"g":1.0,"b":1.0,"a":1.0},"visible":true}],"strokeAlign":"INSIDE","strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"children":["478:1386","478:4021","478:6656"]},"478:6656":{"type":"FRAME","id":"478:6656","name":"Mobile","absoluteBoundingBox":{"x":-609.0,"y":528.0,"width":375.0,"height":1080.0},"isolatedAbsoluteRenderBounds":{"x":-609.0,"y":528.0,"width":375.0,"height":1080.0},"relativeTransform":[[1.0,0.0,2272.0],[0.0,1.0,100.0]],"size":{"x":375.0,"y":1080.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":1.0,"g":1.0,"b":1.0,"a":1.0},"visible":true,"opacity":1.0}],"strokeAlign":"INSIDE","minHeight":1080.0,"strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"clipsContent":true,"overflowDirection":"VERTICAL_SCROLLING","layoutMode":"VERTICAL","counterAxisAlignItems":"CENTER","counterAxisSizingMode":"FIXED","isBreakpointFrame":true,"children":["483:1856","478:6788"]},"478:6788":{"type":"FRAME","id":"478:6788","name":"Hero 2","absoluteBoundingBox":{"x":-609.0,"y":599.0,"width":375.0,"height":383.0},"isolatedAbsoluteRenderBounds":{"x":-609.0,"y":599.0,"width":375.0,"height":383.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,71.0]],"size":{"x":375.0,"y":383.0},"fills":[],"strokeAlign":"INSIDE","layoutAlign":"STRETCH","strokes":[],"accessibleHTMLTag":"MAIN","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"paddingTop":80.0,"paddingRight":16.0,"paddingBottom":60.0,"paddingLeft":16.0,"layoutMode":"VERTICAL","itemSpacing":48.0,"counterAxisAlignItems":"CENTER","primaryAxisAlignItems":"CENTER","counterAxisSizingMode":"FIXED","children":["840:9061","478:6789"]},"478:6789":{"type":"FRAME","id":"478:6789","name":"Text","absoluteBoundingBox":{"x":-593.0,"y":847.0,"width":343.0,"height":75.0},"isolatedAbsoluteRenderBounds":{"x":-593.0,"y":844.856018066406,"width":343.0,"height":77.1439819335938},"relativeTransform":[[1.0,0.0,16.0],[0.0,1.0,248.0]],"size":{"x":343.0,"y":75.0},"fills":[],"strokeAlign":"INSIDE","layoutAlign":"STRETCH","strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"layoutMode":"VERTICAL","itemSpacing":16.0,"counterAxisAlignItems":"CENTER","counterAxisSizingMode":"FIXED","children":["478:6790","483:1254"]},"3:536":{"key":"5b63843fb27f109d178eb747f36a34417ce1d568","name":"Subtitle 2","styleType":"TEXT","remote":true,"description":"","id":"3:536","assetId":"StyleId:5b63843fb27f109d178eb747f36a34417ce1d568/2:19","type":"STYLE","style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":null,"fontStyle":"SemiBold","textAutoResize":"WIDTH_AND_HEIGHT","fontSize":14.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":20.0,"lineHeightPercent":94.5447616577148,"lineHeightPercentFontSize":142.857147216797,"lineHeightUnit":"PIXELS"}},"483:1856":{"mainComponentId":"483:1764","type":"INSTANCE","id":"483:1856","name":"Header 2","absoluteBoundingBox":{"x":-609.0,"y":528.0,"width":375.0,"height":71.0},"isolatedAbsoluteRenderBounds":{"x":-609.0,"y":528.0,"width":375.0,"height":71.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":375.0,"y":71.0},"fills":[],"strokeAlign":"INSIDE","layoutAlign":"STRETCH","strokes":[],"accessibleHTMLTag":"HEADER","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"paddingTop":12.0,"paddingRight":16.0,"paddingBottom":12.0,"paddingLeft":16.0,"layoutMode":"HORIZONTAL","itemSpacing":16.0,"counterAxisAlignItems":"CENTER","primaryAxisAlignItems":"SPACE_BETWEEN","primaryAxisSizingMode":"FIXED","children":["I483:1856;483:1284","I483:1856;483:1323"],"componentProperties":{},"overrides":[{"key":[],"value":{"paddingLeft":16.0,"paddingRight":16.0,"size":{"x":375.0,"y":71.0}},"componentId":"483:1764"},{"key":["Nav0","ดูสินค้าอื่น ๆ ของเรา0"],"value":{"visible":false},"componentId":"483:1764"}]},"3:524":{"type":"COMPONENT","id":"3:524","name":"Property 1=Default","overrideKey":"26:1380","absoluteBoundingBox":{"x":1477.0,"y":7000.0,"width":48.0,"height":48.0},"isolatedAbsoluteRenderBounds":{"x":1477.0,"y":7000.0,"width":48.0,"height":48.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":48.0,"y":48.0},"fills":[],"constraintValues":{"left":{"pixelOffset":0.0,"sizeFraction":0.0},"top":{"pixelOffset":0.0,"sizeFraction":0.0}},"strokeAlign":"INSIDE","strokes":[],"strokeWeight":2.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"clipsContent":true,"children":["3:525"],"componentSetId":"3:523"},"840:7746":{"type":"SVG","id":"840:7746","name":"404","absoluteBoundingBox":{"x":-3644.0,"y":702.0,"width":255.051818847656,"height":111.417297363281},"isolatedAbsoluteRenderBounds":{"x":-3644.0,"y":702.0,"width":255.0517578125,"height":111.417297363281},"relativeTransform":[[1.0,0.0,-0.000114917755126953],[0.0,1.0,0.0]],"size":{"x":255.051818847656,"y":111.417297363281},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0941176488995552,"g":0.0941176488995552,"b":0.105882354080677,"a":1.0},"boundVariables":{"color":{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}},"visible":true,"opacity":1.0}],"constraints":{"vertical":"SCALE","horizontal":"SCALE"},"constraintValues":{"left":{"pixelOffset":0.0,"sizeFraction":-4.50566303138556e-07},"right":{"pixelOffset":0.0,"sizeFraction":0.999999549433697},"top":{"pixelOffset":0.0,"sizeFraction":0.0},"bottom":{"pixelOffset":0.0,"sizeFraction":0.928477359965342}},"strokeAlign":"OUTSIDE","strokes":[],"strokeWeight":4.45847511291504,"boundVariables":{"fills":[{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}]},"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"hash":"cbc663d7eccb0558bff93ca2904a8859fcfab795"},"840:7747":{"type":"SVG","id":"840:7747","name":"Group 1000006436","absoluteBoundingBox":{"x":-3514.609375,"y":750.0,"width":83.177619934082,"height":72.0000152587891},"isolatedAbsoluteRenderBounds":{"x":-3514.609375,"y":750.0,"width":83.177619934082,"height":72.0000152587891},"relativeTransform":[[1.0,0.0,129.390747070312],[0.0,1.0,48.0]],"size":{"x":83.177619934082,"y":72.0000152587891},"fills":[],"constraints":{"vertical":"SCALE","horizontal":"SCALE"},"constraintValues":{"left":{"pixelOffset":0.0,"sizeFraction":0.50731160301036},"right":{"pixelOffset":0.0,"sizeFraction":0.8334320765278},"top":{"pixelOffset":0.0,"sizeFraction":0.399999949137376},"bottom":{"pixelOffset":0.0,"sizeFraction":1.0}},"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0603743232786655,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"hash":"d2d93fb1186797455d58f47dae2a5e02cc5c1493"},"3:574":{"type":"FRAME","id":"3:574","name":"state-layer","overrideKey":"883:1213","absoluteBoundingBox":{"x":428.0,"y":1908.0,"width":142.0,"height":20.0},"isolatedAbsoluteRenderBounds":{"x":428.0,"y":1908.0,"width":142.0,"height":20.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,10.0]],"size":{"x":142.0,"y":20.0},"fills":[],"strokeAlign":"INSIDE","layoutAlign":"STRETCH","layoutGrow":1.0,"strokes":[],"boundVariables":{"paddingLeft":{"type":"VARIABLE_ALIAS","id":"VariableID:c7fea77d2a3d7d56746b876b871b60353b9d13d4/84:150"},"paddingRight":{"type":"VARIABLE_ALIAS","id":"VariableID:c7fea77d2a3d7d56746b876b871b60353b9d13d4/84:150"}},"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"paddingRight":16.0,"paddingLeft":16.0,"layoutMode":"HORIZONTAL","itemSpacing":8.0,"counterAxisAlignItems":"CENTER","primaryAxisAlignItems":"CENTER","primaryAxisSizingMode":"FIXED","counterAxisSizingMode":"FIXED","isInAnimateTree":true,"children":["3:575","3:576"]},"840:8979":{"type":"COMPONENT","id":"840:8979","name":"Group 1000006437","absoluteBoundingBox":{"x":-3644.0,"y":702.0,"width":255.051818847656,"height":120.000015258789},"isolatedAbsoluteRenderBounds":{"x":-3644.0,"y":702.0,"width":255.051818847656,"height":120.000015258789},"relativeTransform":[[1.0,0.0,-3644.0],[0.0,1.0,702.0]],"size":{"x":255.051818847656,"y":120.000015258789},"fills":[],"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.74917608499527,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"children":["840:7746","840:7747"]},"3:525":{"type":"SVG","id":"3:525","name":"Vector","overrideKey":"26:1379","absoluteBoundingBox":{"x":1482.599609375,"y":7005.6015625,"width":36.0200004577637,"height":36.0},"isolatedAbsoluteRenderBounds":{"x":1482.599609375,"y":7005.6015625,"width":36.02001953125,"height":36.0},"relativeTransform":[[1.0,0.0,5.599609375],[0.0,1.0,5.6015625]],"size":{"x":36.0200004577637,"y":36.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.137254908680916,"g":0.121568627655506,"b":0.125490203499794,"a":1.0},"boundVariables":{"color":{"type":"VARIABLE_ALIAS","id":"VariableID:5e0b51054665ce9b4d622d13700cbdf3b8193326/84:158"}},"visible":true,"opacity":1.0}],"constraintValues":{"left":{"pixelOffset":5.599609375,"sizeFraction":0.0},"top":{"pixelOffset":5.6015625,"sizeFraction":0.0}},"strokeAlign":"INSIDE","strokes":[],"strokeWeight":2.0,"boundVariables":{"fills":[{"type":"VARIABLE_ALIAS","id":"VariableID:5e0b51054665ce9b4d622d13700cbdf3b8193326/84:158"}]},"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"hash":"9872c2c8e77db306fe83d5be6c54acd2741f5f88"},"478:4021":{"type":"FRAME","id":"478:4021","name":"Tablet","absoluteBoundingBox":{"x":-1473.0,"y":528.0,"width":800.0,"height":1080.0},"isolatedAbsoluteRenderBounds":{"x":-1473.0,"y":528.0,"width":800.0,"height":1080.0},"relativeTransform":[[1.0,0.0,1408.0],[0.0,1.0,100.0]],"size":{"x":800.0,"y":1080.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":1.0,"g":1.0,"b":1.0,"a":1.0},"visible":true,"opacity":1.0}],"strokeAlign":"INSIDE","minHeight":1080.0,"strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"clipsContent":true,"overflowDirection":"VERTICAL_SCROLLING","layoutMode":"VERTICAL","counterAxisAlignItems":"CENTER","counterAxisSizingMode":"FIXED","isBreakpointFrame":true,"children":["483:1857","478:4153"]},"673:2047":{"type":"TEXT","id":"673:2047","name":"H3","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":27.0,"height":24.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":27.0,"height":24.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":27.0,"y":24.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Bold","fontStyle":"Bold","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":20.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":24.0,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"478:1604":{"type":"FRAME","id":"478:1604","name":"Hero 2","absoluteBoundingBox":{"x":-2817.0,"y":599.0,"width":1280.0,"height":402.0},"isolatedAbsoluteRenderBounds":{"x":-2817.0,"y":599.0,"width":1280.0,"height":402.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,71.0]],"size":{"x":1280.0,"y":402.0},"fills":[],"strokeAlign":"INSIDE","layoutAlign":"STRETCH","strokes":[],"accessibleHTMLTag":"MAIN","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"paddingTop":80.0,"paddingRight":64.0,"paddingBottom":60.0,"paddingLeft":64.0,"layoutMode":"VERTICAL","itemSpacing":48.0,"counterAxisAlignItems":"CENTER","primaryAxisAlignItems":"CENTER","counterAxisSizingMode":"FIXED","children":["840:8980","478:1605"]},"478:4153":{"type":"FRAME","id":"478:4153","name":"Hero 2","absoluteBoundingBox":{"x":-1473.0,"y":599.0,"width":800.0,"height":402.0},"isolatedAbsoluteRenderBounds":{"x":-1473.0,"y":599.0,"width":800.0,"height":402.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,71.0]],"size":{"x":800.0,"y":402.0},"fills":[],"strokeAlign":"INSIDE","layoutAlign":"STRETCH","strokes":[],"accessibleHTMLTag":"MAIN","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"paddingTop":80.0,"paddingRight":64.0,"paddingBottom":60.0,"paddingLeft":64.0,"layoutMode":"VERTICAL","itemSpacing":48.0,"counterAxisAlignItems":"CENTER","primaryAxisAlignItems":"CENTER","counterAxisSizingMode":"FIXED","children":["840:9060","478:4154"]},"840:8980":{"mainComponentId":"840:8979","type":"INSTANCE","id":"840:8980","name":"Group 1000006438","absoluteBoundingBox":{"x":-2304.52587890625,"y":679.0,"width":255.051818847656,"height":120.000015258789},"isolatedAbsoluteRenderBounds":{"x":-2304.52587890625,"y":679.0,"width":255.051818847656,"height":120.000015258789},"relativeTransform":[[1.0,0.0,512.47412109375],[0.0,1.0,80.0]],"size":{"x":255.051818847656,"y":120.000015258789},"fills":[],"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.74917608499527,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"children":["I840:8980;840:7746","I840:8980;840:7747"],"componentProperties":{},"overrides":[{"key":[],"value":{"name":"Group 1000006438"},"componentId":"840:8979"}]},"478:4154":{"type":"FRAME","id":"478:4154","name":"Text","absoluteBoundingBox":{"x":-1409.0,"y":847.0,"width":672.0,"height":94.0},"isolatedAbsoluteRenderBounds":{"x":-1409.0,"y":843.711975097656,"width":672.0,"height":97.2880249023438},"relativeTransform":[[1.0,0.0,64.0],[0.0,1.0,248.0]],"size":{"x":672.0,"y":94.0},"fills":[],"strokeAlign":"INSIDE","layoutAlign":"STRETCH","strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"layoutMode":"VERTICAL","itemSpacing":16.0,"counterAxisAlignItems":"CENTER","counterAxisSizingMode":"FIXED","children":["478:4155","483:1252"]},"483:1252":{"mainComponentId":"483:1248","type":"INSTANCE","id":"483:1252","name":"Frame 2147224255","absoluteBoundingBox":{"x":-1126.5,"y":901.0,"width":107.0,"height":40.0},"isolatedAbsoluteRenderBounds":{"x":-1126.5,"y":901.0,"width":107.0,"height":40.0},"relativeTransform":[[1.0,0.0,282.5],[0.0,1.0,54.0]],"size":{"x":107.0,"y":40.0},"fills":[],"strokeAlign":"INSIDE","strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[{"id":{"sessionID":483,"localID":1249},"event":{"interactionType":"ON_CLICK"},"actions":[{"connectionType":"URL","connectionURL":"https://shop.ondemand.in.th/","openUrlInNewTab":true}],"isDeleted":false,"stateManagementVersion":1}],"children":["I483:1252;478:39661"],"componentProperties":{},"overrides":[]},"483:1248":{"type":"COMPONENT","id":"483:1248","name":"Frame 2147224255","absoluteBoundingBox":{"x":-3140.0,"y":-8.0,"width":107.0,"height":40.0},"isolatedAbsoluteRenderBounds":{"x":-3140.0,"y":-8.0,"width":107.0,"height":40.0},"relativeTransform":[[1.0,0.0,-3140.0],[0.0,1.0,-8.0]],"size":{"x":107.0,"y":40.0},"fills":[],"strokeAlign":"INSIDE","strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[{"id":{"sessionID":483,"localID":1249},"event":{"interactionType":"ON_CLICK"},"actions":[{"connectionType":"URL","connectionURL":"https://shop.ondemand.in.th/","openUrlInNewTab":true}],"isDeleted":false,"stateManagementVersion":1}],"children":["478:39661"]},"478:4155":{"type":"TEXT","id":"478:4155","name":"ขออภัย ไม่พบหน้าเว็บไซต์ที่คุณต้องการ","absoluteBoundingBox":{"x":-1409.0,"y":847.0,"width":672.0,"height":38.0},"isolatedAbsoluteRenderBounds":{"x":-1314.67822265625,"y":843.711975097656,"width":483.827453613281,"height":40.6400146484375},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":672.0,"y":38.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0941176488995552,"g":0.0941176488995552,"b":0.105882354080677,"a":1.0},"boundVariables":{"color":{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}},"visible":true,"opacity":1.0}],"strokeAlign":"OUTSIDE","layoutAlign":"STRETCH","strokes":[],"boundVariables":{"fills":[{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}]},"accessibleHTMLTag":"H1","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"characters":"ขออภัย ไม่พบหน้าเว็บไซต์ที่คุณต้องการ","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"HEIGHT","textAlignHorizontal":"CENTER","textAlignVertical":"CENTER","style":{"styleIdForText":"StyleId:e0179060c310ca6c7e1f9942e1a4fe1cc3fa4bd4/2188:323","fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Bold","fontStyle":"Bold","textAutoResize":"HEIGHT","boundVariables":{"paints":[{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}]},"fontVariantPosition":"NORMAL","fontSize":24.0,"textAlignHorizontal":"CENTER","textAlignVertical":"CENTER","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":28.8000011444092,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{"1":{"styleIdForText":"StyleId:e0179060c310ca6c7e1f9942e1a4fe1cc3fa4bd4/2188:323","fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Regular","fontStyle":"Regular","textAutoResize":"WIDTH_AND_HEIGHT","boundVariables":{"paints":[{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}]},"fontVariantPosition":"NORMAL","isOverrideOverTextStyle":true,"semanticWeight":"NORMAL","fontSize":32.0,"letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":38.4000015258789,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","inheritTextStyleId":"478:39654","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"}}},"3:819":{"id":"3:819","type":"VARIABLE","assetId":"VariableID:e9e4864d178ee73a144ae474941cfec3cef8ca74/2189:1054","name":"colors/common/grey/900","resolvedType":"COLOR","variableCollectionId":"VariableCollectionId:91c6f1ca9d3edcad5938983fc82e25cae2d60ed0/2169:127","codeSyntax":{},"valuesByMode":{"84:0":{"r":0.0941176488995552,"g":0.0941176488995552,"b":0.105882354080677,"a":1.0}}},"49:63":{"type":"TEXT","id":"49:63","name":"Text","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":12.0,"height":15.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":12.0,"height":15.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":12.0,"y":15.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Bold","fontStyle":"Bold","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":10.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PERCENT","lineHeightPx":15.1100006103516,"lineHeightPercent":100.0,"lineHeightUnit":"INTRINSIC_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED","lineHeightPercentFontSize":100},"styleOverrideTable":{}},"840:9060":{"mainComponentId":"840:8979","type":"INSTANCE","id":"840:9060","name":"Group 1000006437","absoluteBoundingBox":{"x":-1200.52587890625,"y":679.0,"width":255.051818847656,"height":120.000015258789},"isolatedAbsoluteRenderBounds":{"x":-1200.52600097656,"y":679.0,"width":255.051940917969,"height":120.000015258789},"relativeTransform":[[1.0,0.0,272.474090576172],[0.0,1.0,80.0]],"size":{"x":255.051818847656,"y":120.000015258789},"fills":[],"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.74917608499527,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"children":["I840:9060;840:7746","I840:9060;840:7747"],"componentProperties":{},"overrides":[]},"478:6790":{"type":"TEXT","id":"478:6790","name":"ขออภัย ไม่พบหน้าเว็บไซต์ที่คุณต้องการ","absoluteBoundingBox":{"x":-593.0,"y":847.0,"width":343.0,"height":19.0},"isolatedAbsoluteRenderBounds":{"x":-542.339111328125,"y":844.856018066406,"width":241.913726806641,"height":20.3200073242188},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":343.0,"y":19.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0941176488995552,"g":0.0941176488995552,"b":0.105882354080677,"a":1.0},"boundVariables":{"color":{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}},"visible":true,"opacity":1.0}],"strokeAlign":"OUTSIDE","layoutAlign":"STRETCH","strokes":[],"boundVariables":{"fills":[{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}]},"accessibleHTMLTag":"H1","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],"characters":"ขออภัย ไม่พบหน้าเว็บไซต์ที่คุณต้องการ","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"HEIGHT","textAlignHorizontal":"CENTER","textAlignVertical":"CENTER","style":{"styleIdForText":"StyleId:75e9c91432c28d312c082b866f6c32a6abf5106f/2188:328","fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Regular","fontStyle":"Regular","textAutoResize":"HEIGHT","boundVariables":{"paints":[{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}]},"fontVariantPosition":"NORMAL","fontSize":16.0,"textAlignHorizontal":"CENTER","textAlignVertical":"CENTER","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":19.2000007629395,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{"3":{"styleIdForText":"StyleId:75e9c91432c28d312c082b866f6c32a6abf5106f/2188:328","fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Regular","fontStyle":"Regular","textAutoResize":"WIDTH_AND_HEIGHT","boundVariables":{"paints":[{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}]},"fontVariantPosition":"NORMAL","isOverrideOverTextStyle":true,"fontSize":16.0,"letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":19.2000007629395,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","inheritTextStyleId":"2:6","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"}}},"2:7":{"id":"2:7","type":"VARIABLE","assetId":"VariableID:7380c1d23f9624a539f683ae36a25057efcbfa55/11:37","name":"color/white","resolvedType":"COLOR","variableCollectionId":"VariableCollectionId:dc345dddf4ae0a83e7b2f70e54ddc86c3952cbad/11:0","codeSyntax":{},"valuesByMode":{"11:0":{"r":1.0,"g":1.0,"b":1.0,"a":1.0}}},"483:1317":{"type":"GROUP","id":"483:1317","name":"Group","absoluteBoundingBox":{"x":-3139.12255859375,"y":-659.587280273438,"width":35.8821716308594,"height":36.0},"isolatedAbsoluteRenderBounds":{"x":-3139.12255859375,"y":-659.587280273438,"width":35.8821716308594,"height":36.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":35.8821716308594,"y":36.0},"fills":[],"constraints":{"vertical":"SCALE","horizontal":"SCALE"},"constraintValues":{"left":{"pixelOffset":0.0,"sizeFraction":0.0226565383550689},"right":{"pixelOffset":0.0,"sizeFraction":0.305193322850025},"top":{"pixelOffset":0.0,"sizeFraction":0.115164898811503},"bottom":{"pixelOffset":0.0,"sizeFraction":0.881122345620013}},"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.74744576215744,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"children":["483:1318","483:1319","483:1320"]},"3:526":{"id":"3:526","assetId":"VariableCollectionId:91c6f1ca9d3edcad5938983fc82e25cae2d60ed0/2169:127","type":"VARIABLE_COLLECTION","name":"Theme_BU","defaultModeId":"84:0","modes":[{"modeId":"84:0","name":"Ondemand"}]},"33:1512":{"type":"TEXT","id":"33:1512","name":"Text","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":12.0,"height":15.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":12.0,"height":15.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":12.0,"y":15.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"SemiBold"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-SemiBold","fontStyle":"SemiBold","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"SemiBold"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":10.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PERCENT","lineHeightPx":15.1100006103516,"lineHeightPercent":100.0,"lineHeightUnit":"INTRINSIC_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED","lineHeightPercentFontSize":100},"styleOverrideTable":{}},"484:5962":{"type":"TEXT","id":"484:5962","name":"H4","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":24.0,"height":22.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":24.0,"height":22.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":24.0,"y":22.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Bold","fontStyle":"Bold","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":18.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":21.6000003814697,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"483:1318":{"type":"SVG","id":"483:1318","name":"Vector","absoluteBoundingBox":{"x":-3139.12255859375,"y":-659.587280273438,"width":35.8821716308594,"height":36.0},"isolatedAbsoluteRenderBounds":{"x":-3139.12255859375,"y":-659.587280273438,"width":35.882080078125,"height":36.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":35.8821716308594,"y":36.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.843137264251709,"g":0.156862750649452,"b":0.184313729405403,"a":1.0},"visible":true,"opacity":1.0}],"constraints":{"vertical":"SCALE","horizontal":"SCALE"},"constraintValues":{"left":{"pixelOffset":0.0,"sizeFraction":0.0226565383550689},"right":{"pixelOffset":0.0,"sizeFraction":0.305193322850025},"top":{"pixelOffset":0.0,"sizeFraction":0.115164898811503},"bottom":{"pixelOffset":0.0,"sizeFraction":0.881122345620013}},"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.74744576215744,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"hash":"07a936800c527ebbc6ff1597b46c0a29590ddbe0"},"478:1386":{"type":"FRAME","id":"478:1386","name":"Desktop","absoluteBoundingBox":{"x":-2817.0,"y":528.0,"width":1280.0,"height":1080.0},"isolatedAbsoluteRenderBounds":{"x":-2817.0,"y":528.0,"width":1280.0,"height":1080.0},"relativeTransform":[[1.0,0.0,64.0],[0.0,1.0,100.0]],"size":{"x":1280.0,"y":1080.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":1.0,"g":1.0,"b":1.0,"a":1.0},"visible":true,"opacity":1.0}],"strokeAlign":"INSIDE","minHeight":1080.0,"strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"clipsContent":true,"overflowDirection":"VERTICAL_SCROLLING","layoutMode":"VERTICAL","counterAxisAlignItems":"CENTER","counterAxisSizingMode":"FIXED","isBreakpointFrame":true,"children":["483:1811","478:1604"]},"836:3993":{"type":"TEXT","id":"836:3993","name":"Heading 3","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":47.0,"height":43.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":47.0,"height":43.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":47.0,"y":43.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"style":{"fontFamily":"Noto Sans Thai UI","fontPostScriptName":"NotoSansThaiUI-Bold","fontStyle":"Bold","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":36.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":-0.72,"letterSpacingValue":-2.0,"letterSpacingUnit":"PERCENT","lineHeightPx":43.2000007629395,"lineHeightPercent":88.1057357788086,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"29:6924":{"type":"TEXT","id":"29:6924","name":"Headline/H1","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":43.0,"height":44.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":43.0,"height":44.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":43.0,"y":44.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"SemiBold"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-SemiBold","fontStyle":"SemiBold","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"SemiBold"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":32.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":44.0,"lineHeightPercent":90.9993362426758,"lineHeightPercentFontSize":137.5,"lineHeightUnit":"PIXELS","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"478:1606":{"type":"TEXT","id":"478:1606","name":"ขออภัย ไม่พบหน้าเว็บไซต์ที่คุณต้องการ","absoluteBoundingBox":{"x":-2753.0,"y":847.0,"width":1152.0,"height":38.0},"isolatedAbsoluteRenderBounds":{"x":-2418.67822265625,"y":843.711975097656,"width":483.827514648438,"height":40.6400146484375},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":1152.0,"y":38.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0941176488995552,"g":0.0941176488995552,"b":0.105882354080677,"a":1.0},"boundVariables":{"color":{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}},"visible":true,"opacity":1.0}],"strokeAlign":"OUTSIDE","layoutAlign":"STRETCH","strokes":[],"boundVariables":{"fills":[{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}]},"accessibleHTMLTag":"H1","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"characters":"ขออภัย ไม่พบหน้าเว็บไซต์ที่คุณต้องการ","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"HEIGHT","textAlignHorizontal":"CENTER","textAlignVertical":"CENTER","style":{"styleIdForText":"StyleId:7776a2e614d8245954b5bb38a1677f16b5064ec2/2188:322","fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Bold","fontStyle":"Bold","textAutoResize":"HEIGHT","boundVariables":{"paints":[{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}]},"fontVariantPosition":"NORMAL","fontSize":32.0,"textAlignHorizontal":"CENTER","textAlignVertical":"CENTER","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":38.4000015258789,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{"1":{"styleIdForText":"StyleId:7776a2e614d8245954b5bb38a1677f16b5064ec2/2188:322","fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Regular","fontStyle":"Regular","textAutoResize":"WIDTH_AND_HEIGHT","boundVariables":{"paints":[{"type":"VARIABLE_ALIAS","id":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066"}]},"fontVariantPosition":"NORMAL","isOverrideOverTextStyle":true,"semanticWeight":"NORMAL","fontSize":32.0,"letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":38.4000015258789,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","inheritTextStyleId":"478:39654","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"}}},"483:1323":{"type":"FRAME","id":"483:1323","name":"Nav","absoluteBoundingBox":{"x":-2084.0,"y":-653.0,"width":94.0,"height":23.0},"isolatedAbsoluteRenderBounds":{"x":-2084.0,"y":-653.0,"width":94.0,"height":23.0},"relativeTransform":[[1.0,0.0,1122.0],[0.0,1.0,24.0]],"size":{"x":94.0,"y":23.0},"fills":[],"strokeAlign":"INSIDE","strokes":[],"accessibleHTMLTag":"NAV","isDecorativeImage":false,"ariaAttributes":{},"interactions":[{"id":{"sessionID":483,"localID":3784},"event":{"interactionType":"ON_CLICK"},"actions":[{"connectionType":"URL","connectionURL":"https://shop.ondemand.in.th/","openUrlInNewTab":true}],"isDeleted":false,"stateManagementVersion":1}],"layoutMode":"HORIZONTAL","itemSpacing":32.0,"counterAxisAlignItems":"CENTER","children":["483:1324","483:1325","483:1326"]},"483:1288":{"type":"SVG","id":"483:1288","name":"Group","absoluteBoundingBox":{"x":-3099.65942382812,"y":-650.956481933594,"width":80.7848587036133,"height":21.0361175537109},"isolatedAbsoluteRenderBounds":{"x":-3099.65942382812,"y":-650.956604003906,"width":80.784912109375,"height":21.0362396240234},"relativeTransform":[[1.0,0.0,39.4632148742676],[0.0,1.0,8.63078117370605]],"size":{"x":80.7848587036133,"y":21.0361175537109},"fills":[],"constraints":{"vertical":"SCALE","horizontal":"SCALE"},"constraintValues":{"left":{"pixelOffset":0.0,"sizeFraction":0.333390513743003},"right":{"pixelOffset":0.0,"sizeFraction":0.969491763377753},"top":{"pixelOffset":1.77635683940025e-15,"sizeFraction":0.298798540805248},"bottom":{"pixelOffset":0.0,"sizeFraction":0.746375510033141}},"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.74744576215744,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"hash":"e4e46c8f9ffe50aca2a503faa12ebe7099d849e8"},"29:6930":{"type":"TEXT","id":"29:6930","name":"Body/Body 1","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":21.0,"height":24.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":21.0,"height":24.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":21.0,"y":24.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Regular"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Regular","fontStyle":"Regular","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Regular"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":16.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":24.0,"lineHeightPercent":99.2720031738281,"lineHeightPercentFontSize":150.0,"lineHeightUnit":"PIXELS","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"478:1605":{"type":"FRAME","id":"478:1605","name":"Text","absoluteBoundingBox":{"x":-2753.0,"y":847.0,"width":1152.0,"height":94.0},"isolatedAbsoluteRenderBounds":{"x":-2753.0,"y":843.711975097656,"width":1152.0,"height":97.2880249023438},"relativeTransform":[[1.0,0.0,64.0],[0.0,1.0,248.000015258789]],"size":{"x":1152.0,"y":94.0},"fills":[],"strokeAlign":"INSIDE","layoutAlign":"STRETCH","strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"layoutMode":"VERTICAL","itemSpacing":16.0,"counterAxisAlignItems":"CENTER","counterAxisSizingMode":"FIXED","children":["478:1606","483:1250"]},"483:1284":{"type":"FRAME","id":"483:1284","name":"Learncorp_Logo_Pack_2021_OnDemand_OnDemand_Primary 1","absoluteBoundingBox":{"x":-3142.0,"y":-665.0,"width":127.0,"height":47.0},"isolatedAbsoluteRenderBounds":{"x":-3142.0,"y":-665.0,"width":127.0,"height":47.0},"relativeTransform":[[1.0,0.0,64.0],[0.0,1.0,12.0]],"size":{"x":127.0,"y":47.0},"fills":[],"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.466288566589355,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[{"id":{"sessionID":483,"localID":3785},"event":{"interactionType":"ON_CLICK"},"actions":[{"connectionType":"URL","connectionURL":"https://shop.ondemand.in.th/","openUrlInNewTab":true}],"isDeleted":false,"stateManagementVersion":1}],"clipsContent":true,"children":["483:1285"]},"2:6":{"key":"75e9c91432c28d312c082b866f6c32a6abf5106f","name":"Body 1","styleType":"TEXT","remote":true,"description":"","id":"2:6","assetId":"StyleId:75e9c91432c28d312c082b866f6c32a6abf5106f/2188:328","type":"STYLE","style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Regular","fontStyle":"Regular","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Regular"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontSize":16.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":19.2000007629395,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%"}},"483:1857":{"mainComponentId":"483:1764","type":"INSTANCE","id":"483:1857","name":"Header 2","absoluteBoundingBox":{"x":-1473.0,"y":528.0,"width":800.0,"height":71.0},"isolatedAbsoluteRenderBounds":{"x":-1473.0,"y":528.0,"width":800.0,"height":71.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":800.0,"y":71.0},"fills":[],"strokeAlign":"INSIDE","layoutAlign":"STRETCH","strokes":[],"accessibleHTMLTag":"HEADER","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"paddingTop":12.0,"paddingRight":24.0,"paddingBottom":12.0,"paddingLeft":24.0,"layoutMode":"HORIZONTAL","itemSpacing":16.0,"counterAxisAlignItems":"CENTER","primaryAxisAlignItems":"SPACE_BETWEEN","primaryAxisSizingMode":"FIXED","children":["I483:1857;483:1284","I483:1857;483:1323"],"componentProperties":{},"overrides":[{"key":[],"value":{"paddingLeft":24.0,"paddingRight":24.0,"size":{"x":800.0,"y":71.0}},"componentId":"483:1764"}]},"3:830":{"type":"TEXT","id":"3:830","name":"Subtitle 2","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":19.0,"height":17.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":19.0,"height":17.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":19.0,"y":17.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Bold","fontStyle":"Bold","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":14.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":16.8000011444092,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"483:1254":{"mainComponentId":"483:1248","type":"INSTANCE","id":"483:1254","name":"Frame 2147224255","absoluteBoundingBox":{"x":-475.0,"y":882.0,"width":107.0,"height":40.0},"isolatedAbsoluteRenderBounds":{"x":-475.0,"y":882.0,"width":107.0,"height":40.0},"relativeTransform":[[1.0,0.0,118.0],[0.0,1.0,35.0]],"size":{"x":107.0,"y":40.0},"fills":[],"strokeAlign":"INSIDE","strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[{"id":{"sessionID":483,"localID":1249},"event":{"interactionType":"ON_CLICK"},"actions":[{"connectionType":"URL","connectionURL":"https://shop.ondemand.in.th/","openUrlInNewTab":true}],"isDeleted":false,"stateManagementVersion":1}],"children":["I483:1254;478:39661"],"componentProperties":{},"overrides":[]},"483:1811":{"mainComponentId":"483:1764","type":"INSTANCE","id":"483:1811","name":"Header 2","absoluteBoundingBox":{"x":-2817.0,"y":528.0,"width":1280.0,"height":71.0},"isolatedAbsoluteRenderBounds":{"x":-2817.0,"y":528.0,"width":1280.0,"height":71.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":1280.0,"y":71.0},"fills":[],"strokeAlign":"INSIDE","strokes":[],"accessibleHTMLTag":"HEADER","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"paddingTop":12.0,"paddingRight":64.0,"paddingBottom":12.0,"paddingLeft":64.0,"layoutMode":"HORIZONTAL","itemSpacing":16.0,"counterAxisAlignItems":"CENTER","primaryAxisAlignItems":"SPACE_BETWEEN","primaryAxisSizingMode":"FIXED","children":["I483:1811;483:1284","I483:1811;483:1323"],"componentProperties":{},"overrides":[]},"3:832":{"type":"TEXT","id":"3:832","name":"Subtitle 1","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":22.0,"height":19.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":22.0,"height":19.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":22.0,"y":19.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Bold","fontStyle":"Bold","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":16.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":19.2000007629395,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"478:39654":{"key":"7776a2e614d8245954b5bb38a1677f16b5064ec2","name":"H1","styleType":"TEXT","remote":true,"description":"","id":"478:39654","assetId":"StyleId:7776a2e614d8245954b5bb38a1677f16b5064ec2/2188:322","type":"STYLE","style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Bold","fontStyle":"Bold","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontSize":32.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":38.4000015258789,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%"}},"3:831":{"id":"3:831","type":"VARIABLE","assetId":"VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066","name":"Text/Primary","resolvedType":"COLOR","variableCollectionId":"VariableCollectionId:91c6f1ca9d3edcad5938983fc82e25cae2d60ed0/2169:127","codeSyntax":{},"valuesByMode":{"84:0":{"type":"VARIABLE_ALIAS","id":"VariableID:e9e4864d178ee73a144ae474941cfec3cef8ca74/2189:1054"}}},"33:1514":{"type":"TEXT","id":"33:1514","name":"Text","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":12.0,"height":15.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":12.0,"height":15.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":12.0,"y":15.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Regular"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Regular","fontStyle":"Regular","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Regular"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":10.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PERCENT","lineHeightPx":15.1100006103516,"lineHeightPercent":100.0,"lineHeightUnit":"INTRINSIC_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED","lineHeightPercentFontSize":100},"styleOverrideTable":{}},"483:1250":{"mainComponentId":"483:1248","type":"INSTANCE","id":"483:1250","name":"Frame 2147224255","absoluteBoundingBox":{"x":-2230.5,"y":901.0,"width":107.0,"height":40.0},"isolatedAbsoluteRenderBounds":{"x":-2230.5,"y":901.0,"width":107.0,"height":40.0},"relativeTransform":[[1.0,0.0,522.5],[0.0,1.0,54.0]],"size":{"x":107.0,"y":40.0},"fills":[],"strokeAlign":"INSIDE","strokes":[],"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[{"id":{"sessionID":483,"localID":1249},"event":{"interactionType":"ON_CLICK"},"actions":[{"connectionType":"URL","connectionURL":"https://shop.ondemand.in.th/","openUrlInNewTab":true}],"isDeleted":false,"stateManagementVersion":1}],"children":["I483:1250;478:39661"],"componentProperties":{},"overrides":[]},"435:35323":{"key":"e0179060c310ca6c7e1f9942e1a4fe1cc3fa4bd4","name":"H2","styleType":"TEXT","remote":true,"description":"","id":"435:35323","assetId":"StyleId:e0179060c310ca6c7e1f9942e1a4fe1cc3fa4bd4/2188:323","type":"STYLE","style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Bold","fontStyle":"Bold","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Bold"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontSize":24.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":28.8000011444092,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%"}},"33:131":{"type":"TEXT","id":"33:131","name":"Headline/H4","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":24.0,"height":26.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":24.0,"height":26.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":24.0,"y":26.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"SemiBold"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-SemiBold","fontStyle":"SemiBold","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"SemiBold"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":18.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":26.0,"lineHeightPercent":95.5952606201172,"lineHeightPercentFontSize":144.444442749023,"lineHeightUnit":"PIXELS","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"208:3742":{"type":"TEXT","id":"208:3742","name":"Body 3","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":20.0,"height":19.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":20.0,"height":19.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":20.0,"y":19.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Regular"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Regular","fontStyle":"Regular","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Regular"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":16.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":-0.32,"letterSpacingValue":-2.0,"letterSpacingUnit":"PERCENT","lineHeightPx":19.2000007629395,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"836:3997":{"type":"TEXT","id":"836:3997","name":"Caption","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":18.0,"height":17.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":18.0,"height":17.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":18.0,"y":17.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Regular"}],"style":{"fontFamily":"Noto Sans Thai UI","fontPostScriptName":"NotoSansThaiUI-Regular","fontStyle":"Regular","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Regular"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":14.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":-0.28,"letterSpacingValue":-2.0,"letterSpacingUnit":"PERCENT","lineHeightPx":16.8000011444092,"lineHeightPercent":88.1057357788086,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"840:9061":{"mainComponentId":"840:8979","type":"INSTANCE","id":"840:9061","name":"Group 1000006437","absoluteBoundingBox":{"x":-549.02587890625,"y":679.0,"width":255.051818847656,"height":120.000015258789},"isolatedAbsoluteRenderBounds":{"x":-549.026000976562,"y":679.0,"width":255.051940917969,"height":120.000015258789},"relativeTransform":[[1.0,0.0,59.9740905761719],[0.0,1.0,80.0]],"size":{"x":255.051818847656,"y":120.000015258789},"fills":[],"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.74917608499527,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"children":["I840:9061;840:7746","I840:9061;840:7747"],"componentProperties":{},"overrides":[]},"483:1320":{"type":"SVG","id":"483:1320","name":"Group","absoluteBoundingBox":{"x":-3134.36499023438,"y":-655.701965332031,"width":26.3706436157227,"height":28.0230960845947},"isolatedAbsoluteRenderBounds":{"x":-3134.36499023438,"y":-655.701965332031,"width":26.3706436157227,"height":28.0230960845947},"relativeTransform":[[1.0,0.0,4.75749349594116],[0.0,1.0,3.88529515266418]],"size":{"x":26.3706436157227,"y":28.0230960845947},"fills":[],"constraints":{"vertical":"SCALE","horizontal":"SCALE"},"constraintValues":{"left":{"pixelOffset":0.0,"sizeFraction":0.060117117063267},"right":{"pixelOffset":0.0,"sizeFraction":0.267759980179193},"top":{"pixelOffset":0.0,"sizeFraction":0.197830753123507},"bottom":{"pixelOffset":0.0,"sizeFraction":0.794066840029777}},"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.74744576215744,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"hash":"101ec97ada7290c6c9195972b5ee2e93ed54e9a6"},"478:39661":{"mainComponentId":"3:573","type":"INSTANCE","id":"478:39661","name":"Button - Outline","absoluteBoundingBox":{"x":-3140.0,"y":-8.0,"width":107.0,"height":40.0},"isolatedAbsoluteRenderBounds":{"x":-3140.0,"y":-8.0,"width":107.0,"height":40.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":107.0,"y":40.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":1.0,"g":1.0,"b":1.0,"a":1.0},"boundVariables":{"color":{"type":"VARIABLE_ALIAS","id":"VariableID:7380c1d23f9624a539f683ae36a25057efcbfa55/11:37"}},"visible":true,"opacity":1.0}],"constraintValues":{"left":{"pixelOffset":0.0,"sizeFraction":0.0},"top":{"pixelOffset":0.0,"sizeFraction":0.0}},"strokeAlign":"INSIDE","strokes":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.886274516582489,"g":0.152941182255745,"b":0.211764708161354,"a":1.0},"boundVariables":{"color":{"type":"VARIABLE_ALIAS","id":"VariableID:c4c6e710a0d7b66a3915a97cf560ddda2bd8f2dc/84:167"}},"visible":true,"opacity":1.0}],"boundVariables":{"fills":[{"type":"VARIABLE_ALIAS","id":"VariableID:7380c1d23f9624a539f683ae36a25057efcbfa55/11:37"}],"strokes":[{"type":"VARIABLE_ALIAS","id":"VariableID:c4c6e710a0d7b66a3915a97cf560ddda2bd8f2dc/84:167"}]},"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"rectangleCornerRadii":[8.0,8.0,8.0,8.0],"cornerRadius":8.0,"paddingTop":10.0,"paddingBottom":10.0,"clipsContent":true,"layoutMode":"VERTICAL","itemSpacing":8.0,"counterAxisAlignItems":"CENTER","primaryAxisSizingMode":"FIXED","children":["I478:39661;883:1213"],"componentSetId":"3:572","componentProperties":{"Property 1":{"value":"M","type":"VARIANT","boundVariables":{}},"Property 2":{"value":"Default","type":"VARIANT","boundVariables":{}}},"overrides":[{"key":[],"value":{"behaviors":null,"counterAxisSizingMode":null,"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":1.0,"g":1.0,"b":1.0,"a":1.0},"boundVariables":{"color":{"type":"VARIABLE_ALIAS","id":"VariableID:7380c1d23f9624a539f683ae36a25057efcbfa55/11:37"}},"visible":true,"opacity":1.0}],"size":{"x":107.0,"y":40.0},"interactions":[{"id":{"sessionID":59,"localID":24076},"event":{"interactionType":"ON_CLICK"},"actions":[{"connectionType":"URL","connectionURL":"https://shop.ondemand.in.th/","openUrlInNewTab":true}],"isDeleted":true,"stateManagementVersion":1},{"id":{"sessionID":480,"localID":1252},"event":{"interactionType":"ON_CLICK"},"actions":[{"connectionType":"URL","connectionURL":"https://shop.ondemand.in.th/","openUrlInNewTab":true}],"isDeleted":true,"stateManagementVersion":1}]},"componentId":"3:573"},{"key":["state-layer0","bx-qr0"],"value":{"overrides":[{"key":[],"value":{"visible":false},"componentId":"3:524"}]},"componentId":"3:573"},{"key":["state-layer0","label-text0"],"value":{"characterStyleOverrides":[],"characters":"กลับหน้าหลัก","lineIndentations":[0],"lineStyleOverrides":[0],"lineTypes":["NONE"],"styleOverrideTable":{}},"componentId":"3:573"}]},"3:741":{"type":"TEXT","id":"3:741","name":"Body 2","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":18.0,"height":17.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":18.0,"height":17.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":18.0,"y":17.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Regular"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-Regular","fontStyle":"Regular","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"Regular"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":14.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":16.8000011444092,"lineHeightPercent":79.417610168457,"lineHeightPercentFontSize":120.000007629395,"lineHeightUnit":"FONT_SIZE_%","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}},"29:6927":{"type":"TEXT","id":"29:6927","name":"Headline/H3","absoluteBoundingBox":{"x":0.0,"y":0.0,"width":27.0,"height":28.0},"isolatedAbsoluteRenderBounds":{"x":0.0,"y":0.0,"width":27.0,"height":28.0},"relativeTransform":[[1.0,0.0,0.0],[0.0,1.0,0.0]],"size":{"x":27.0,"y":28.0},"fills":[{"blendMode":"NORMAL","type":"SOLID","color":{"r":0.0,"g":0.0,"b":0.0,"a":1.0},"visible":true,"opacity":1.0}],"visible":false,"strokeAlign":"INSIDE","strokes":[],"strokeWeight":0.0,"accessibleHTMLTag":"AUTO","isDecorativeImage":false,"ariaAttributes":{},"interactions":[],"characterStyleOverrides":[],"characters":"Ag","lineIndentations":[0],"lineTypes":["NONE"],"listStartOffsets":[],"lineStyleOverrides":[0],"lineTextDirections":null,"resolvedParagraphValues":{"0":{"listSpacing":0.0,"paragraphIndent":0.0,"paragraphSpacing":0.0}},"textAutoResize":"WIDTH_AND_HEIGHT","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"SemiBold"}],"style":{"fontFamily":"Noto Sans Thai","fontPostScriptName":"NotoSansThai-SemiBold","fontStyle":"SemiBold","fallbackFonts":[{"fontFamily":"Noto Sans","fontStyle":"SemiBold"}],"textAutoResize":"WIDTH_AND_HEIGHT","fontVariantPosition":"NORMAL","fontSize":20.0,"textAlignHorizontal":"LEFT","textAlignVertical":"TOP","letterSpacing":0.0,"letterSpacingValue":0.0,"letterSpacingUnit":"PIXELS","lineHeightPx":28.0,"lineHeightPercent":92.6538696289062,"lineHeightPercentFontSize":140.0,"lineHeightUnit":"PIXELS","paragraphSpacing":0,"paragraphIndent":0,"listSpacing":0,"italic":false,"textCase":"ORIGINAL","textDecoration":"NONE","textDecorationSkipInk":false,"textDecorationStyle":"solid","textTruncation":"DISABLED"},"styleOverrideTable":{}}},"assetIdToGuid":{"VariableCollectionId:94d5d923c4571b18981ae42850d2846fefd1782b/84:168":"3:533","VariableID:5e0b51054665ce9b4d622d13700cbdf3b8193326/84:158":"3:535","VariableCollectionId:dc345dddf4ae0a83e7b2f70e54ddc86c3952cbad/11:0":"2:2","StyleId:5b63843fb27f109d178eb747f36a34417ce1d568/2:19":"3:536","VariableCollectionId:91c6f1ca9d3edcad5938983fc82e25cae2d60ed0/2169:127":"3:526","VariableID:c4c6e710a0d7b66a3915a97cf560ddda2bd8f2dc/84:167":"3:570","VariableID:305b9062a2c359ee812b1ca7600751c637410376/2189:1066":"3:831","StyleId:7776a2e614d8245954b5bb38a1677f16b5064ec2/2188:322":"478:39654","VariableID:7380c1d23f9624a539f683ae36a25057efcbfa55/11:37":"2:7","StyleId:75e9c91432c28d312c082b866f6c32a6abf5106f/2188:328":"2:6","VariableID:c7fea77d2a3d7d56746b876b871b60353b9d13d4/84:150":"3:571","VariableID:e9e4864d178ee73a144ae474941cfec3cef8ca74/2189:1054":"3:819","StyleId:e0179060c310ca6c7e1f9942e1a4fe1cc3fa4bd4/2188:323":"435:35323"},"guidToUrl":{"1025:11703":"/tpat1allcourses","478:1385":"/","386:14227":"/tgat","969:45731":"/tpat3allcourses","834:3105":"/triamudom","387:44955":"/tpat3","0:3":"/tpat1","647:1712":"/tcasupskills","894:55757":"/mwitkvis"},"fonts":{"Inter:Medium":{"id":"Inter_1","url":"/_woff/v2/Inter_1/Inter_1.woff2","source":1,"italic":false,"weight":500,"variationAxes":[{"tag":"wght","value":500.0,"name":"Weight"},{"tag":"slnt","value":0.0,"name":"Slant"}],"subsets":{"baseUrl":"/_woff/v2/Inter_1/","subsetMappings":[{"unicodeRange":"U+0000-00A0,U+00A2-00A9,U+00AC-00AE,U+00B0-00B7,U+00B9-00BA,U+00BC-00BE,U+00D7,U+00F7,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+2215,U+F8FF,U+FEFF,U+FFFD","file":"Inter_1-english.woff2"},{"unicodeRange":"U+00A1,U+00AA-00AB,U+00AF,U+00B8,U+00BB,U+00BF-00D6,U+00D8-00F6,U+00F8-00FF,U+0131,U+0152-0153,U+02B0-02FF","file":"Inter_1-rest-latin.woff2"},{"unicodeRange":"U+0100-0130,U+0132-0151,U+0154-017F","file":"Inter_1-latin-extended-a.woff2"},{"unicodeRange":"U+0180-024F","file":"Inter_1-latin-extended-b.woff2"},{"unicodeRange":"U+1E00-1EFF","file":"Inter_1-latin-extended-additional.woff2"},{"unicodeRange":"U+0250-02AF,U+0300-1DFF,U+1F00-1FFF,U+2070-2073,U+2075-20AB,U+20AD-2121,U+2123-218F,U+21BC-2211,U+2213-2214,U+2216-F8FE,U+F900-FEFE,U+FF00-FFFC,U+FFFE-FFFF","file":"Inter_1-rest.woff2"}]}},"Noto Sans Thai:Medium":{"id":"NotoSansThai-VF_2","url":"/_woff/v2/NotoSansThai-VF_2/NotoSansThai-VF_2.woff2","source":1,"italic":false,"weight":500,"variationAxes":[{"tag":"wght","value":500.0,"name":"Weight"},{"tag":"wdth","value":100.0,"name":"Width"}],"subsets":{"baseUrl":"/_woff/v2/NotoSansThai-VF_2/","subsetMappings":[{"unicodeRange":"U+0000-00A0,U+00A2-00A9,U+00AC-00AE,U+00B0-00B7,U+00B9-00BA,U+00BC-00BE,U+00D7,U+00F7,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+2215,U+F8FF,U+FEFF,U+FFFD","file":"NotoSansThai-VF_2-english.woff2"},{"unicodeRange":"U+00A1,U+00AA-00AB,U+00AF,U+00B8,U+00BB,U+00BF-00D6,U+00D8-00F6,U+00F8-00FF,U+0131,U+0152-0153,U+02B0-02FF","file":"NotoSansThai-VF_2-rest-latin.woff2"},{"unicodeRange":"U+0100-0130,U+0132-0151,U+0154-017F","file":"NotoSansThai-VF_2-latin-extended-a.woff2"},{"unicodeRange":"U+0180-024F","file":"NotoSansThai-VF_2-latin-extended-b.woff2"},{"unicodeRange":"U+1E00-1EFF","file":"NotoSansThai-VF_2-latin-extended-additional.woff2"},{"unicodeRange":"U+0250-02AF,U+0300-1DFF,U+1F00-1FFF,U+2070-2073,U+2075-20AB,U+20AD-2121,U+2123-218F,U+21BC-2211,U+2213-2214,U+2216-F8FE,U+F900-FEFE,U+FF00-FFFC,U+FFFE-FFFF","file":"NotoSansThai-VF_2-rest.woff2"}]}},"Noto Sans Thai UI:Medium":{"id":"NotoSansThaiUI-VF_2","url":"/_woff/v2/NotoSansThaiUI-VF_2/NotoSansThaiUI-VF_2.woff2","source":1,"italic":false,"weight":500,"variationAxes":[{"tag":"wght","value":500.0,"name":"Weight"},{"tag":"wdth","value":100.0,"name":"Width"}],"subsets":{"baseUrl":"/_woff/v2/NotoSansThaiUI-VF_2/","subsetMappings":[{"unicodeRange":"U+0000-00A0,U+00A2-00A9,U+00AC-00AE,U+00B0-00B7,U+00B9-00BA,U+00BC-00BE,U+00D7,U+00F7,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+2215,U+F8FF,U+FEFF,U+FFFD","file":"NotoSansThaiUI-VF_2-english.woff2"},{"unicodeRange":"U+00A1,U+00AA-00AB,U+00AF,U+00B8,U+00BB,U+00BF-00D6,U+00D8-00F6,U+00F8-00FF,U+0131,U+0152-0153,U+02B0-02FF","file":"NotoSansThaiUI-VF_2-rest-latin.woff2"},{"unicodeRange":"U+0100-0130,U+0132-0151,U+0154-017F","file":"NotoSansThaiUI-VF_2-latin-extended-a.woff2"},{"unicodeRange":"U+0180-024F","file":"NotoSansThaiUI-VF_2-latin-extended-b.woff2"},{"unicodeRange":"U+1E00-1EFF","file":"NotoSansThaiUI-VF_2-latin-extended-additional.woff2"},{"unicodeRange":"U+0250-02AF,U+0300-1DFF,U+1F00-1FFF,U+2070-2073,U+2075-20AB,U+20AD-2121,U+2123-218F,U+21BC-2211,U+2213-2214,U+2216-F8FE,U+F900-FEFE,U+FF00-FFFC,U+FFFE-FFFF","file":"NotoSansThaiUI-VF_2-rest.woff2"}]}},"Noto Sans:Regular":{"id":"NotoSans-VF_3","url":"/_woff/v2/NotoSans-VF_3/NotoSans-VF_3.woff2","source":1,"italic":false,"weight":400,"variationAxes":[{"tag":"wght","value":400.0,"name":"Weight"},{"tag":"wdth","value":100.0,"name":"Width"},{"tag":"CTGR","value":0.0,"name":"CTGR"}],"subsets":{"baseUrl":"/_woff/v2/NotoSans-VF_3/","subsetMappings":[{"unicodeRange":"U+0000-00A0,U+00A2-00A9,U+00AC-00AE,U+00B0-00B7,U+00B9-00BA,U+00BC-00BE,U+00D7,U+00F7,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+2215,U+F8FF,U+FEFF,U+FFFD","file":"NotoSans-VF_3-english.woff2"},{"unicodeRange":"U+00A1,U+00AA-00AB,U+00AF,U+00B8,U+00BB,U+00BF-00D6,U+00D8-00F6,U+00F8-00FF,U+0131,U+0152-0153,U+02B0-02FF","file":"NotoSans-VF_3-rest-latin.woff2"},{"unicodeRange":"U+0100-0130,U+0132-0151,U+0154-017F","file":"NotoSans-VF_3-latin-extended-a.woff2"},{"unicodeRange":"U+0180-024F","file":"NotoSans-VF_3-latin-extended-b.woff2"},{"unicodeRange":"U+1E00-1EFF","file":"NotoSans-VF_3-latin-extended-additional.woff2"},{"unicodeRange":"U+0250-02AF,U+0300-1DFF,U+1F00-1FFF,U+2070-2073,U+2075-20AB,U+20AD-2121,U+2123-218F,U+21BC-2211,U+2213-2214,U+2216-F8FE,U+F900-FEFE,U+FF00-FFFC,U+FFFE-FFFF","file":"NotoSans-VF_3-rest.woff2"}]}},"Noto Sans Thai:Regular":{"id":"NotoSansThai-VF_2","url":"/_woff/v2/NotoSansThai-VF_2/NotoSansThai-VF_2.woff2","source":1,"italic":false,"weight":400,"variationAxes":[{"tag":"wght","value":400.0,"name":"Weight"},{"tag":"wdth","value":100.0,"name":"Width"}],"subsets":{"baseUrl":"/_woff/v2/NotoSansThai-VF_2/","subsetMappings":[{"unicodeRange":"U+0000-00A0,U+00A2-00A9,U+00AC-00AE,U+00B0-00B7,U+00B9-00BA,U+00BC-00BE,U+00D7,U+00F7,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+2215,U+F8FF,U+FEFF,U+FFFD","file":"NotoSansThai-VF_2-english.woff2"},{"unicodeRange":"U+00A1,U+00AA-00AB,U+00AF,U+00B8,U+00BB,U+00BF-00D6,U+00D8-00F6,U+00F8-00FF,U+0131,U+0152-0153,U+02B0-02FF","file":"NotoSansThai-VF_2-rest-latin.woff2"},{"unicodeRange":"U+0100-0130,U+0132-0151,U+0154-017F","file":"NotoSansThai-VF_2-latin-extended-a.woff2"},{"unicodeRange":"U+0180-024F","file":"NotoSansThai-VF_2-latin-extended-b.woff2"},{"unicodeRange":"U+1E00-1EFF","file":"NotoSansThai-VF_2-latin-extended-additional.woff2"},{"unicodeRange":"U+0250-02AF,U+0300-1DFF,U+1F00-1FFF,U+2070-2073,U+2075-20AB,U+20AD-2121,U+2123-218F,U+21BC-2211,U+2213-2214,U+2216-F8FE,U+F900-FEFE,U+FF00-FFFC,U+FFFE-FFFF","file":"NotoSansThai-VF_2-rest.woff2"}]}},"Noto Sans Thai:SemiBold":{"id":"NotoSansThai-VF_2","url":"/_woff/v2/NotoSansThai-VF_2/NotoSansThai-VF_2.woff2","source":1,"italic":false,"weight":600,"variationAxes":[{"tag":"wght","value":600.0,"name":"Weight"},{"tag":"wdth","value":100.0,"name":"Width"}],"subsets":{"baseUrl":"/_woff/v2/NotoSansThai-VF_2/","subsetMappings":[{"unicodeRange":"U+0000-00A0,U+00A2-00A9,U+00AC-00AE,U+00B0-00B7,U+00B9-00BA,U+00BC-00BE,U+00D7,U+00F7,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+2215,U+F8FF,U+FEFF,U+FFFD","file":"NotoSansThai-VF_2-english.woff2"},{"unicodeRange":"U+00A1,U+00AA-00AB,U+00AF,U+00B8,U+00BB,U+00BF-00D6,U+00D8-00F6,U+00F8-00FF,U+0131,U+0152-0153,U+02B0-02FF","file":"NotoSansThai-VF_2-rest-latin.woff2"},{"unicodeRange":"U+0100-0130,U+0132-0151,U+0154-017F","file":"NotoSansThai-VF_2-latin-extended-a.woff2"},{"unicodeRange":"U+0180-024F","file":"NotoSansThai-VF_2-latin-extended-b.woff2"},{"unicodeRange":"U+1E00-1EFF","file":"NotoSansThai-VF_2-latin-extended-additional.woff2"},{"unicodeRange":"U+0250-02AF,U+0300-1DFF,U+1F00-1FFF,U+2070-2073,U+2075-20AB,U+20AD-2121,U+2123-218F,U+21BC-2211,U+2213-2214,U+2216-F8FE,U+F900-FEFE,U+FF00-FFFC,U+FFFE-FFFF","file":"NotoSansThai-VF_2-rest.woff2"}]}},"Noto Sans Thai:Bold":{"id":"NotoSansThai-VF_2","url":"/_woff/v2/NotoSansThai-VF_2/NotoSansThai-VF_2.woff2","source":1,"italic":false,"weight":700,"variationAxes":[{"tag":"wght","value":700.0,"name":"Weight"},{"tag":"wdth","value":100.0,"name":"Width"}],"subsets":{"baseUrl":"/_woff/v2/NotoSansThai-VF_2/","subsetMappings":[{"unicodeRange":"U+0000-00A0,U+00A2-00A9,U+00AC-00AE,U+00B0-00B7,U+00B9-00BA,U+00BC-00BE,U+00D7,U+00F7,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+2215,U+F8FF,U+FEFF,U+FFFD","file":"NotoSansThai-VF_2-english.woff2"},{"unicodeRange":"U+00A1,U+00AA-00AB,U+00AF,U+00B8,U+00BB,U+00BF-00D6,U+00D8-00F6,U+00F8-00FF,U+0131,U+0152-0153,U+02B0-02FF","file":"NotoSansThai-VF_2-rest-latin.woff2"},{"unicodeRange":"U+0100-0130,U+0132-0151,U+0154-017F","file":"NotoSansThai-VF_2-latin-extended-a.woff2"},{"unicodeRange":"U+0180-024F","file":"NotoSansThai-VF_2-latin-extended-b.woff2"},{"unicodeRange":"U+1E00-1EFF","file":"NotoSansThai-VF_2-latin-extended-additional.woff2"},{"unicodeRange":"U+0250-02AF,U+0300-1DFF,U+1F00-1FFF,U+2070-2073,U+2075-20AB,U+20AD-2121,U+2123-218F,U+21BC-2211,U+2213-2214,U+2216-F8FE,U+F900-FEFE,U+FF00-FFFC,U+FFFE-FFFF","file":"NotoSansThai-VF_2-rest.woff2"}]}},"Noto Sans:Bold":{"id":"NotoSans-VF_3","url":"/_woff/v2/NotoSans-VF_3/NotoSans-VF_3.woff2","source":1,"italic":false,"weight":700,"variationAxes":[{"tag":"wght","value":700.0,"name":"Weight"},{"tag":"wdth","value":100.0,"name":"Width"},{"tag":"CTGR","value":0.0,"name":"CTGR"}],"subsets":{"baseUrl":"/_woff/v2/NotoSans-VF_3/","subsetMappings":[{"unicodeRange":"U+0000-00A0,U+00A2-00A9,U+00AC-00AE,U+00B0-00B7,U+00B9-00BA,U+00BC-00BE,U+00D7,U+00F7,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+2215,U+F8FF,U+FEFF,U+FFFD","file":"NotoSans-VF_3-english.woff2"},{"unicodeRange":"U+00A1,U+00AA-00AB,U+00AF,U+00B8,U+00BB,U+00BF-00D6,U+00D8-00F6,U+00F8-00FF,U+0131,U+0152-0153,U+02B0-02FF","file":"NotoSans-VF_3-rest-latin.woff2"},{"unicodeRange":"U+0100-0130,U+0132-0151,U+0154-017F","file":"NotoSans-VF_3-latin-extended-a.woff2"},{"unicodeRange":"U+0180-024F","file":"NotoSans-VF_3-latin-extended-b.woff2"},{"unicodeRange":"U+1E00-1EFF","file":"NotoSans-VF_3-latin-extended-additional.woff2"},{"unicodeRange":"U+0250-02AF,U+0300-1DFF,U+1F00-1FFF,U+2070-2073,U+2075-20AB,U+20AD-2121,U+2123-218F,U+21BC-2211,U+2213-2214,U+2216-F8FE,U+F900-FEFE,U+FF00-FFFC,U+FFFE-FFFF","file":"NotoSans-VF_3-rest.woff2"}]}},"Noto Sans Thai UI:Regular":{"id":"NotoSansThaiUI-VF_2","url":"/_woff/v2/NotoSansThaiUI-VF_2/NotoSansThaiUI-VF_2.woff2","source":1,"italic":false,"weight":400,"variationAxes":[{"tag":"wght","value":400.0,"name":"Weight"},{"tag":"wdth","value":100.0,"name":"Width"}],"subsets":{"baseUrl":"/_woff/v2/NotoSansThaiUI-VF_2/","subsetMappings":[{"unicodeRange":"U+0000-00A0,U+00A2-00A9,U+00AC-00AE,U+00B0-00B7,U+00B9-00BA,U+00BC-00BE,U+00D7,U+00F7,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+2215,U+F8FF,U+FEFF,U+FFFD","file":"NotoSansThaiUI-VF_2-english.woff2"},{"unicodeRange":"U+00A1,U+00AA-00AB,U+00AF,U+00B8,U+00BB,U+00BF-00D6,U+00D8-00F6,U+00F8-00FF,U+0131,U+0152-0153,U+02B0-02FF","file":"NotoSansThaiUI-VF_2-rest-latin.woff2"},{"unicodeRange":"U+0100-0130,U+0132-0151,U+0154-017F","file":"NotoSansThaiUI-VF_2-latin-extended-a.woff2"},{"unicodeRange":"U+0180-024F","file":"NotoSansThaiUI-VF_2-latin-extended-b.woff2"},{"unicodeRange":"U+1E00-1EFF","file":"NotoSansThaiUI-VF_2-latin-extended-additional.woff2"},{"unicodeRange":"U+0250-02AF,U+0300-1DFF,U+1F00-1FFF,U+2070-2073,U+2075-20AB,U+20AD-2121,U+2123-218F,U+21BC-2211,U+2213-2214,U+2216-F8FE,U+F900-FEFE,U+FF00-FFFC,U+FFFE-FFFF","file":"NotoSansThaiUI-VF_2-rest.woff2"}]}},"Noto Sans Thai UI:Bold":{"id":"NotoSansThaiUI-VF_2","url":"/_woff/v2/NotoSansThaiUI-VF_2/NotoSansThaiUI-VF_2.woff2","source":1,"italic":false,"weight":700,"variationAxes":[{"tag":"wght","value":700.0,"name":"Weight"},{"tag":"wdth","value":100.0,"name":"Width"}],"subsets":{"baseUrl":"/_woff/v2/NotoSansThaiUI-VF_2/","subsetMappings":[{"unicodeRange":"U+0000-00A0,U+00A2-00A9,U+00AC-00AE,U+00B0-00B7,U+00B9-00BA,U+00BC-00BE,U+00D7,U+00F7,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+2215,U+F8FF,U+FEFF,U+FFFD","file":"NotoSansThaiUI-VF_2-english.woff2"},{"unicodeRange":"U+00A1,U+00AA-00AB,U+00AF,U+00B8,U+00BB,U+00BF-00D6,U+00D8-00F6,U+00F8-00FF,U+0131,U+0152-0153,U+02B0-02FF","file":"NotoSansThaiUI-VF_2-rest-latin.woff2"},{"unicodeRange":"U+0100-0130,U+0132-0151,U+0154-017F","file":"NotoSansThaiUI-VF_2-latin-extended-a.woff2"},{"unicodeRange":"U+0180-024F","file":"NotoSansThaiUI-VF_2-latin-extended-b.woff2"},{"unicodeRange":"U+1E00-1EFF","file":"NotoSansThaiUI-VF_2-latin-extended-additional.woff2"},{"unicodeRange":"U+0250-02AF,U+0300-1DFF,U+1F00-1FFF,U+2070-2073,U+2075-20AB,U+20AD-2121,U+2123-218F,U+21BC-2211,U+2213-2214,U+2216-F8FE,U+F900-FEFE,U+FF00-FFFC,U+FFFE-FFFF","file":"NotoSansThaiUI-VF_2-rest.woff2"}]}}},"assets":{"860ce4a7d7a39af99c2c30b69717f6435f5c529d":{"type":"GENERATED_ASSET","url":"860ce4a7d7a39af99c2c30b69717f6435f5c529d.svg","size":{"x":83.177619934082,"y":72.0000152587891},"offsets":{"left":{"value":0.0,"unit":"PERCENT"},"right":{"value":0.0,"unit":"PERCENT"},"top":{"value":0.0,"unit":"PERCENT"},"bottom":{"value":0.0,"unit":"PERCENT"}},"format":"SVG"},"d2d93fb1186797455d58f47dae2a5e02cc5c1493":{"type":"GENERATED_ASSET","url":"d2d93fb1186797455d58f47dae2a5e02cc5c1493.svg","size":{"x":83.177619934082,"y":72.0000152587891},"offsets":{"left":{"value":0.0,"unit":"PERCENT"},"right":{"value":0.0,"unit":"PERCENT"},"top":{"value":0.0,"unit":"PERCENT"},"bottom":{"value":0.0,"unit":"PERCENT"}},"format":"SVG"},"368060ebaf853c2c1d11c48deb27548362f77d76":{"type":"GENERATED_ASSET","url":"368060ebaf853c2c1d11c48deb27548362f77d76.svg","size":{"x":83.1779251098633,"y":72.0000152587891},"offsets":{"left":{"value":0.0,"unit":"PERCENT"},"right":{"value":0.0,"unit":"PERCENT"},"top":{"value":0.0,"unit":"PERCENT"},"bottom":{"value":0.0,"unit":"PERCENT"}},"format":"SVG"},"34c4952bf19afff3551da2435060b2fd1c8dc593":{"type":"GENERATED_ASSET","url":"34c4952bf19afff3551da2435060b2fd1c8dc593.svg","size":{"x":33.7860984802246,"y":17.3078346252441},"offsets":{"left":{"value":0.0,"unit":"PERCENT"},"right":{"value":0.0,"unit":"PERCENT"},"top":{"value":0.0,"unit":"PERCENT"},"bottom":{"value":0.0,"unit":"PERCENT"}},"format":"SVG"},"9872c2c8e77db306fe83d5be6c54acd2741f5f88":{"type":"GENERATED_ASSET","url":"9872c2c8e77db306fe83d5be6c54acd2741f5f88.svg","size":{"x":36.0200004577637,"y":36.0},"offsets":{"left":{"value":0.0,"unit":"PERCENT"},"right":{"value":0.0,"unit":"PERCENT"},"top":{"value":0.0,"unit":"PERCENT"},"bottom":{"value":0.0,"unit":"PERCENT"}},"format":"SVG"},"3803a84e694bba4142bd24ba467584c5f0f222e7":{"type":"GENERATED_ASSET","url":"3803a84e694bba4142bd24ba467584c5f0f222e7.svg","size":{"x":15.0083332061768,"y":15.0},"offsets":{"left":{"value":0.0,"unit":"PERCENT"},"right":{"value":0.0,"unit":"PERCENT"},"top":{"value":0.0,"unit":"PERCENT"},"bottom":{"value":0.0,"unit":"PERCENT"}},"format":"SVG"},"07a936800c527ebbc6ff1597b46c0a29590ddbe0":{"type":"GENERATED_ASSET","url":"07a936800c527ebbc6ff1597b46c0a29590ddbe0.svg","size":{"x":35.8821716308594,"y":36.0},"offsets":{"left":{"value":0.0,"unit":"PERCENT"},"right":{"value":0.0,"unit":"PERCENT"},"top":{"value":0.0,"unit":"PERCENT"},"bottom":{"value":0.0,"unit":"PERCENT"}},"format":"SVG"},"101ec97ada7290c6c9195972b5ee2e93ed54e9a6":{"type":"GENERATED_ASSET","url":"101ec97ada7290c6c9195972b5ee2e93ed54e9a6.svg","size":{"x":26.370735988392,"y":28.0230960845947},"offsets":{"left":{"value":-0.0003502859871779,"unit":"PERCENT"},"right":{"value":0.0,"unit":"PERCENT"},"top":{"value":0.0,"unit":"PERCENT"},"bottom":{"value":0.0,"unit":"PERCENT"}},"format":"SVG"},"cbc663d7eccb0558bff93ca2904a8859fcfab795":{"type":"GENERATED_ASSET","url":"cbc663d7eccb0558bff93ca2904a8859fcfab795.svg","size":{"x":255.051834106445,"y":111.417297363281},"offsets":{"left":{"value":0.0,"unit":"PERCENT"},"right":{"value":-5.98262311221319e-06,"unit":"PERCENT"},"top":{"value":0.0,"unit":"PERCENT"},"bottom":{"value":0.0,"unit":"PERCENT"}},"format":"SVG"},"e4e46c8f9ffe50aca2a503faa12ebe7099d849e8":{"type":"GENERATED_ASSET","url":"e4e46c8f9ffe50aca2a503faa12ebe7099d849e8.svg","size":{"x":80.7849254608154,"y":21.0362014770508},"offsets":{"left":{"value":0.0,"unit":"PERCENT"},"right":{"value":-8.26357849969869e-05,"unit":"PERCENT"},"top":{"value":-0.000398948806163832,"unit":"PERCENT"},"bottom":{"value":0.0,"unit":"PERCENT"}},"format":"SVG"},"dd1ed48f7bd4f77710b395b9897c968b0338c831":{"type":"GENERATED_ASSET","url":"dd1ed48f7bd4f77710b395b9897c968b0338c831.png","size":{"x":47.0,"y":47.0},"offsets":{"top":{"value":0,"unit":"PIXELS"},"right":{"value":0,"unit":"PIXELS"},"bottom":{"value":0,"unit":"PIXELS"},"left":{"value":0,"unit":"PIXELS"}},"format":"PNG"}},"stablePathToAssetInfo":{"3:525":{"hash":"9872c2c8e77db306fe83d5be6c54acd2741f5f88"},"I478:39661;883:1214;26:1379":{"hash":"3803a84e694bba4142bd24ba467584c5f0f222e7"},"483:1320":{"hash":"101ec97ada7290c6c9195972b5ee2e93ed54e9a6"},"I840:9061;840:7747":{"hash":"860ce4a7d7a39af99c2c30b69717f6435f5c529d"},"I483:1252;478:39661;883:1214;26:1379":{"hash":"3803a84e694bba4142bd24ba467584c5f0f222e7"},"I840:9061;840:7746":{"hash":"cbc663d7eccb0558bff93ca2904a8859fcfab795"},"840:7746":{"hash":"cbc663d7eccb0558bff93ca2904a8859fcfab795"},"I483:1856;483:1319":{"hash":"34c4952bf19afff3551da2435060b2fd1c8dc593"},"I483:1856;483:1288":{"hash":"e4e46c8f9ffe50aca2a503faa12ebe7099d849e8"},"I483:1856;483:1320":{"hash":"101ec97ada7290c6c9195972b5ee2e93ed54e9a6"},"I483:1254;478:39661;883:1214;26:1379":{"hash":"3803a84e694bba4142bd24ba467584c5f0f222e7"},"I483:1857;483:1320":{"hash":"101ec97ada7290c6c9195972b5ee2e93ed54e9a6"},"I3:575;26:1379":{"hash":"3803a84e694bba4142bd24ba467584c5f0f222e7"},"I483:1857;483:1319":{"hash":"34c4952bf19afff3551da2435060b2fd1c8dc593"},"483:1318":{"hash":"07a936800c527ebbc6ff1597b46c0a29590ddbe0"},"I483:1250;478:39661;883:1214;26:1379":{"hash":"3803a84e694bba4142bd24ba467584c5f0f222e7"},"I483:1857;483:1288":{"hash":"e4e46c8f9ffe50aca2a503faa12ebe7099d849e8"},"I840:8980;840:7747":{"hash":"368060ebaf853c2c1d11c48deb27548362f77d76"},"I483:1857;483:1318":{"hash":"07a936800c527ebbc6ff1597b46c0a29590ddbe0"},"I840:9060;840:7747":{"hash":"860ce4a7d7a39af99c2c30b69717f6435f5c529d"},"I840:8980;840:7746":{"hash":"cbc663d7eccb0558bff93ca2904a8859fcfab795"},"483:1319":{"hash":"34c4952bf19afff3551da2435060b2fd1c8dc593"},"I840:9060;840:7746":{"hash":"cbc663d7eccb0558bff93ca2904a8859fcfab795"},"I483:1811;483:1319":{"hash":"34c4952bf19afff3551da2435060b2fd1c8dc593"},"I483:1811;483:1320":{"hash":"101ec97ada7290c6c9195972b5ee2e93ed54e9a6"},"I483:1811;483:1318":{"hash":"07a936800c527ebbc6ff1597b46c0a29590ddbe0"},"483:1288":{"hash":"e4e46c8f9ffe50aca2a503faa12ebe7099d849e8"},"840:7747":{"hash":"d2d93fb1186797455d58f47dae2a5e02cc5c1493"},"I483:1856;483:1318":{"hash":"07a936800c527ebbc6ff1597b46c0a29590ddbe0"},"I483:1811;483:1288":{"hash":"e4e46c8f9ffe50aca2a503faa12ebe7099d849e8"},"66:661":{"hash":"dd1ed48f7bd4f77710b395b9897c968b0338c831"}},"animateRootIds":[],"siteSettings":{"title":"ติว TGAT TPAT1 TPAT3 ครบทุกพาร์ท | OnDemand","description":"รวมคอร์สติว TGAT, TPAT1 ความถนัดแพทย์ และ TPAT3 ความถนัดวิศวะ กับ OnDemand เลือกเรียนแยกพาร์ทหรือแพ็กรวม ครบทุกสนามสอบ TCAS พร้อมตะลุยโจทย์แนวสนามจริง","scalingMode":"REFLOW","customCodeHeadStart":"<script>\n  /* =========================================================================\n   * Landing campaign analytics — HEAD slot (site-wide).\n   * Owns: config registry, path resolution, campaign attribution, GA4 boot,\n   *       shared context, page_view, outbound URL decoration, route detection.\n   * Publishes window.LP for the BODY slot. Performs no DOM queries.\n   * Reference: docs/architecture/landing-campaign-analytics.md\n   * ====================================================================== */\n  (() => {\n    if (window.LP) return;\n\n    /* ======================= CONFIG =======================\n     * Adding a landing path = one PAGES entry. Nothing else.\n     * ==================================================== */\n\n    /* ---- environment ----------------------------------------------------\n     There is ONE site and ONE environment. Both values below are constants and\n     there is no way to reach any other target from this build.\n\n     History, because the shape here is the result of it and not a default:\n     these were once two published files (`head-prod.html` / `head-uat.html`)\n     swapped by hand, and the swap-back was forgotten twice — 2026-08-21 and\n     2026-08-26 — each time sending real buyers to `uat-shop` and production\n     analytics to the staging GA4 property. That was replaced on 2026-08-27 by a\n     single build with a `?lp_env=uat` override, which removed the forgetting but\n     kept a code path that could still point live traffic at a staging target.\n     Retired 2026-09-02: the campaign site has no UAT twin to test against, so\n     the override protected nothing and only kept that risk alive. A constant\n     cannot be switched by a query string, a stale sessionStorage entry, or a\n     paste of the wrong file. */\n    const MEASUREMENT_ID = \"G-9Y0NJCZ9TZ\";\n    const SHOP_ORIGIN = \"https://shop.ondemand.in.th\";\n\n    /* Meta base Pixel — deliberately left inert, and out of scope of the\n     single-environment change above. There is still no production Meta Dataset,\n     so this stays empty and the pixel never loads: the same fail-closed choice\n     as CONST - Meta Pixel IDs in GTM-WDN9HRJ8. Fill it when a production Dataset\n     exists (SHOP-R25). Note the consent gate below is a SECOND, independent\n     reason it will not fire (SHOP-R31) — filling this id alone does not start\n     sending. */\n    const META_PIXEL_ID = \"\";\n\n    /* Advertising consent. There is no consent mechanism yet (SHOP-R31), so this\n     returns false and the pixel never fires — deliberately. Default DENY: an\n     absent signal is not consent. When R31 lands it sets the flag this reads;\n     nothing else here changes. */\n    function hasAdvertisingConsent() {\n      try {\n        return window.LP_CONSENT && window.LP_CONSENT.ad_storage === \"granted\";\n      } catch (e) {\n        return false;\n      }\n    }\n\n    const BASE_CONTEXT = {\n      app_name: \"marketing_landing\",\n      business_unit: \"ondemand\",\n      tenant_code: \"ondemand\",\n      user_type: \"guest\",\n      page_type: \"landing_page\",\n    };\n\n    /* {exam} / {exam_lc} in the rule tables are substituted from the matched\n     page entry, so one shared table serves every path and keeps the GA4 ids\n     already in use for TPAT1. */\n    const PAGES = [\n      {\n        path: \"/tpat1\",\n        exam: \"TPAT1\",\n        landing_page_id: \"tpat1_2026\",\n        /* Analytics page_title. Kept in the registry because the document title\n         is empty when this script runs and identical on every path — keep this\n         string equal to the page's Figma SEO title. See doc §1 and §9. */\n        title: \"TPAT1 _ Landing Page\",\n        products: [\n          /* array order = product_position.\n           `slug` is the PDP's own rel=\"canonical\" slug, decoded — see the note\n           on `url` in buildPage(). Re-copy it if a product is renamed in the\n           shop; a stale one still resolves, it just stops matching canonical. */\n          {\n            no: \"9997\",\n            name: \"ติวเข้ม TPAT1 ความถนัดแพทย์\",\n            match: \"ติวเข้ม TPAT1\",\n            slug: \"ติวเข้ม-tpat1-ความถนัดแพทย์-ปูพื้นครบ-4-พาร์ท-พร้อมลุยสนามจริง\",\n          },\n          {\n            no: \"9998\",\n            name: \"UpSkill TPAT1 ความถนัดแพทย์\",\n            match: \"UpSkill TPAT1\",\n            slug: \"upskill-tpat1-ความถนัดแพทย์-ตะลุยโจทย์เก็บคะแนนทุกพาร์ท-dek70\",\n          },\n          {\n            no: \"9996\",\n            name: \"The Ultimate TPAT1 Pack\",\n            match: \"The Ultimate TPAT1 Pack\",\n            slug: \"the-ultimate-tpat1-pack-คอร์สเดียวจบ-ครบทั้งติวเข้ม-ตะลุยโจทย์ความถนัดแพทย์-dek7\",\n          },\n        ],\n      },\n      {\n        path: \"/tpat3\",\n        exam: \"TPAT3\",\n        landing_page_id: \"tpat3_2026\",\n        title: \"TPAT3 _ Landing Page\",\n        products: [\n          {\n            no: \"9108\",\n            name: \"ติวเข้ม TPAT3 ความถนัดวิศวะ\",\n            match: \"ติวเข้ม TPAT3\",\n            slug: \"ติวเข้ม-tpat3-ความถนัดวิศวะ-ปูพื้นครบ-พร้อมตะลุยโจทย์เข้มข้น-dek70\",\n          },\n          /* 9112 was NOT sellable on production and its Figma link was removed\n           on 2026-08-21. Re-verified 2026-08-26: p.9112 returns 200, shows no\n           \"สินค้านี้ไม่พร้อมจำหน่าย\" and has working buy controls, and the\n           card was re-linked in Figma the same day. Entry retained (§9). */\n          {\n            no: \"9112\",\n            name: \"ตะลุยโจทย์ CU-ENT สอบตรงวิศวะจุฬาฯ\",\n            match: \"ตะลุยโจทย์ CU-ENT\",\n            slug: \"ตะลุยโจทย์-cu-ent-สอบตรงวิศวะจุฬาฯ-เจาะข้อสอบครบ-5-พาร์ท-ยื่นรอบ-1-dek70\",\n          },\n          /* card shows SKU 9196-S01L; PDP id is 9196.\n           2026-09-02: the card→PDP wording drift in §9 P2 was resolved in Figma\n           — the card now reads \"The Ultimate วิศวะจุฬาฯ Pack\", like the PDP.\n           Which broke the registry, whose match was still the old \"Engineer\n           Pack\": the live self-check reported \"configured product not found in\n           DOM\", meaning that card had gone untracked and undecorated and its\n           clicks were falling through to Figma's own link. Renaming a card is\n           the highest-frequency way to break this file, and it breaks it\n           silently on the page rather than here. */\n          {\n            no: \"9196\",\n            name: \"The Ultimate วิศวะจุฬาฯ Pack\",\n            match: \"The Ultimate วิศวะจุฬาฯ Pack\",\n            slug: \"the-ultimate-วิศวะจุฬาฯ-pack-ครบทั้ง-tpat3-cu-ent-ในแพ็กเดียว-dek70\",\n          },\n        ],\n      },\n      {\n        path: \"/tgat\",\n        exam: \"TGAT\",\n        landing_page_id: \"tgat_2026\",\n        title: \"TGAT _ Landing Page\",\n        /* /tgat words its \"why OnDemand\" heading differently from /tpat1 and\n         /tpat3, so the shared test missed it and landing_section_viewed for\n         why_ondemand had silently stopped firing on this path — no error, just\n         a section that stopped reporting.\n\n         Which heading it is was MEASURED, not guessed, because guessing would\n         either mis-name the section or attach it to the wrong block: the three\n         pages are structurally identical down to the pixel, and the\n         why_ondemand heading sits at scroll offset 735 on all three —\n         \"ว่าที่หมอเลือกเรียนกับ OnDemand\" (/tpat1), \"ว่าที่เด็กวิศวะเลือกเรียนกับ\n         OnDemand\" (/tpat3), \"เพิ่มทางเลือกในการยื่นคณะที่ใช่\" (/tgat). The\n         heading at 776 is the \"เตรียม…\" sub-heading on all three and is not a\n         tracked section on any of them. Verified 2026-09-02. */\n        sections: [\n          { id: \"why_ondemand\", test: /เพิ่มทางเลือกในการยื่นคณะที่ใช่/ },\n        ],\n        products: [\n          {\n            no: \"P2030\",\n            name: \"ติวเข้ม English TGAT1\",\n            match: \"ติวเข้ม English TGAT1\",\n            slug: \"ติวเข้ม-english-tgat1-พิชิตข้อสอบ-tgat1-ภาษาอังกฤษ-ครบทุก-skill-dek70\",\n          },\n          {\n            no: \"9421\",\n            name: \"ติวเข้ม TGAT2 & TGAT3\",\n            match: \"ติวเข้ม TGAT2\",\n            slug: \"ติวเข้ม-tgat2-tgat3-สรุปเนื้อหาครบทั้ง-2-พาร์ท-พร้อมลุยสนาม-tcas-dek70\",\n          },\n          /* card shows SKU 9483-S05L; PDP id is 9483 */\n          {\n            no: \"9483\",\n            name: \"Pack All TGAT 3 Part\",\n            match: \"Pack All TGAT\",\n            slug: \"pack-all-tgat-3-part-ครบจบ-tgat1-tgat2-tgat3-ในแพ็กเดียว-dek70\",\n          },\n        ],\n      },\n      {\n        /* Added 2026-09-02. Unlike the three above this is not one exam — it is\n         the UpSkill (ตะลุยโจทย์) line across A-Level and TPAT1 — so `exam` here\n         is only the token that derives section/CTA ids, not an exam name. The\n         readable identity is `title` and `landing_page_id`. */\n        path: \"/tcasupskills\",\n        exam: \"TCAS_UPSKILL\",\n        landing_page_id: \"tcas_upskill_2026\",\n        /* This page DOES have a real Figma SEO title, unlike the other three\n         which all still read \"Shop Landing Page\". Kept in the registry anyway\n         because document.title is still empty when this script runs. */\n        title: \"คอร์ส UpSkill TCAS ตะลุยโจทย์ A-Level และ TPAT1 | OnDemand\",\n        /* Two products blocks (packs and per-subject), and its own wording for\n         the \"why OnDemand\" heading. `{exam_lc}_packs` deliberately does NOT end\n         in \"_courses\": PAGE.courses is resolved with .find(/_courses$/), so a\n         second matching id would silently relabel every product on the page.\n\n         `position: 5` is a stable identifier, not DOM order. On the page this\n         block renders between learning_support (2) and _courses (3), but the\n         three older paths have months of landing_section_viewed rows at 1–4 and\n         renumbering to slot this in would break every comparison across dates.\n\n         The why_ondemand test must not also match the HERO heading\n         \"ตะลุยโจทย์เน้น ๆ กับ OnDemand\" — hence no wildcard between the two\n         words; \"ตะลุยโจทย์กับ\" is contiguous only in the section heading. */\n        sections: [\n          { id: \"why_ondemand\", test: /ตะลุยโจทย์กับ ?OnDemand/ },\n          {\n            id: \"{exam_lc}_packs\",\n            test: /เลือกแพ็ก UpSkill/,\n            name: \"{exam} packs\",\n            position: 5,\n          },\n        ],\n        /* The two mid-page chooser buttons.\n\n         Anchored at the END with `max` raised, because the label sits inside a\n         WRAPPER div[role=button] whose own text is the whole 70-char card\n         (\"อยากเก็บหลายวิชา … ดูแพ็ก UpSkill\"). ctaFor only walks UP, so at the\n         default 60-char cap a click on the wrapper's padding matched nothing\n         and fired NO event, while a click on the inner label fired correctly —\n         two outcomes for what a visitor experiences as one button. Measured\n         2026-09-02, when 9 of 33 interactive elements were firing nothing.\n\n         Why `X$` and not `^X$`: `$` matches both the 14-char label and the\n         70-char wrapper, which is exactly the set we want. Why not unanchored:\n         ctaFor runs BEFORE product matching and returns early, so a test that\n         could match a pack CARD would convert that click into a CTA event and\n         lose the product click AND its decorated destination. Card text ends in\n         \"ดูรายละเอียด\" and runs to hundreds of characters, so it can match\n         neither the `$` anchor nor `max` (asserted in verify.sh). */\n        ctas: [\n          {\n            cta_id: \"choose_packs\",\n            test: /ดูแพ็ก UpSkill$/,\n            max: 100,\n            cta_destination: \"{exam_lc}_packs\",\n          },\n          {\n            cta_id: \"choose_subject_courses\",\n            test: /ดูคอร์สรายวิชา$/,\n            max: 100,\n            cta_destination: \"{exam_lc}_courses\",\n          },\n        ],\n        products: [\n          /* --- pack cards (real <a href>, section {exam_lc}_packs) ---\n           These two are recommended-SETS, not products, and that distinction is\n           a trap: the number the card displays (9381 / 9395) is NOT a PDP id.\n           `/product/p.9381` returns HTTP 200 with \"สินค้านี้ไม่พร้อมจำหน่าย\"\n           and no rel=canonical — so a registry entry written the usual way\n           would send buyers to a dead page that looks like a real one.\n           `set:` carries the set's uuid and switches the path segment to\n           /recommended-set/. Verified 2026-09-02: both resolve, and the\n           trailing uuid alone resolves (slug decorative, same as products). */\n          {\n            no: \"9381\",\n            name: \"Pack UpSkill TCAS 4 วิชา (ฟิสิกส์, เคมี, ชีวะ, คณิต)\",\n            match: \"Pack UpSkill TCAS 4 วิชา\",\n            set: \"01a04260-aba9-71d2-a4f5-b8cdc426b0e9\",\n            section: \"{exam_lc}_packs\",\n            slug: \"upskill-tcas-a-level-4-วิชา-ฟิสิกส์-เคมี-ชีวะ-คณิต\",\n          },\n          {\n            no: \"9395\",\n            name: \"Pack UpSkill TCAS 5 วิชา (คณิต ฟิสิกส์ เคมี ชีวะ อังกฤษ)\",\n            match: \"Pack UpSkill TCAS 5 วิชา\",\n            set: \"01a05c7c-8ad1-71a7-8901-cded74e77a13\",\n            section: \"{exam_lc}_packs\",\n            slug: \"upskill-tcas-a-level-5-วิชา-ฟิสิกส์-เคมี-ชีวะ-คณิต-อังกฤษ\",\n          },\n          /* --- per-subject cards (div[role=link], no href — registry supplies\n           the URL). All six verified 2026-09-02: HTTP 200, no\n           \"ไม่พร้อมจำหน่าย\", slugs copied from each PDP's rel=canonical. */\n          {\n            no: \"1316\",\n            name: \"UpSkill Physics TCAS\",\n            match: \"UpSkill Physics TCAS\",\n            /* note: canonical is upskill-physics-…, with no \"-tcas-\" segment,\n             unlike the other five. Copied as the shop has it. */\n            slug: \"upskill-physics-ตะลุยโจทย์อัปคะแนน-a-level-เน้นจุดออกสอบบ่อย-dek70\",\n          },\n          {\n            no: \"8309\",\n            name: \"UpSkill Math TCAS\",\n            match: \"UpSkill Math TCAS\",\n            slug: \"upskill-math-tcas-ตะลุยโจทย์อัปคะแนน-a-level-เน้นจุดออกสอบบ่อย-dek70\",\n          },\n          {\n            no: \"3307\",\n            name: \"UpSkill Chemistry TCAS\",\n            match: \"UpSkill Chemistry TCAS\",\n            slug: \"upskill-chemistry-tcas-ตะลุยโจทย์อัปคะแนน-a-level-เน้นจุดออกสอบบ่อย-dek70\",\n          },\n          {\n            no: \"2307\",\n            name: \"UpSkill Biology TCAS\",\n            match: \"UpSkill Biology TCAS\",\n            slug: \"upskill-biology-tcas-ตะลุยโจทย์อัปคะแนน-a-level-เน้นจุดออกสอบบ่อย-dek70\",\n          },\n          {\n            no: \"P2033\",\n            name: \"UpSkill English A-Level\",\n            match: \"UpSkill English A-Level\",\n            slug: \"upskill-english-a-level-ตะลุยข้อสอบจริง-practice-test-2-ชุด-เก็บคะแนนก่อนสอบ-dek\",\n          },\n          /* Same product as /tpat1's 9998 — products are page-scoped, so the two\n           entries cannot bleed into each other. Position differs by page, which\n           is the point of scoping rather than sharing. */\n          {\n            no: \"9998\",\n            name: \"UpSkill TPAT1 ความถนัดแพทย์\",\n            match: \"UpSkill TPAT1\",\n            slug: \"upskill-tpat1-ความถนัดแพทย์-ตะลุยโจทย์เก็บคะแนนทุกพาร์ท-dek70\",\n          },\n        ],\n      },\n      {\n        /* Added 2026-09-07. This page is organised by the four subjects for\n           the Triam Udom entrance exam, with three offerings in each block.\n           The first two cards in each block are Figma role-links (no href), so\n           the registry URL is essential; the complete-pack card is a real\n           anchor and body.html deliberately prefers that live href. */\n        path: \"/triamudom\",\n        exam: \"TRIAMUDOM\",\n        landing_page_id: \"triamudom_2026\",\n        title: \"คอร์สติวเข้มเนื้อหาและตะลุยข้อสอบเข้า ม.4 เตรียมอุดมฯ | OnDemand\",\n        /* The shared section wording belongs to the TCAS pages, not this\n           school-entrance page. Pin each measured heading here so section\n           events do not silently disappear after a shared-rule change. */\n        sections: [\n          /* Fragment, not the whole line: at 390 px this heading splits into\n             \"สอบติดเตรียมอุดมฯ\" + \"แบบยืน 1 ที่ OnDemand\" as two h1s, so the\n             full-line test matched nothing on mobile — where most of this\n             traffic is — while passing at 900 and 1440. Measured 2026-09-15.\n             \"สอบติดเตรียมอุดมฯ\" is in both forms and is NOT in the hero\n             (\"เตรียมติดเตรียมอุดมฯ\"), which is the only near miss on the page. */\n          { id: \"why_ondemand\", test: /สอบติดเตรียมอุดมฯ/ },\n          /* This page has NO learning_support block. Measured 2026-09-15 at\n             390 / 900 / 1440 px: what the registry called learning_support was\n             the SECOND LINE of the why_ondemand heading, above the same three\n             benefit cards — one visual block. Desktop reads\n             \"สอบติดเตรียมอุดมฯ แบบยืน 1 ที่ OnDemand\" + \"รู้จุดอ่อน แก้ได้ทัน ก่อนสอบจริง\";\n             tablet and mobile read \"พิชิตโรงเรียนในฝัน ปลดล็อกทุกข้อจำกัด\" +\n             \"สอบติดเตรียมอุดมฯ แบบยืน 1 ที่ OnDemand\". So the block reported as\n             TWO sections on desktop and ONE below it, which is why the section\n             only ever went missing at the narrow widths.\n\n             Removed rather than reworded (site owner, 2026-09-15): the honest\n             model is one block, one section. Consequence for reporting —\n             triamudom_2026 has desktop-only learning_support rows between\n             2026-09-07 and this publish; treat them as spurious, not as a drop. */\n          { id: \"learning_support\", remove: true },\n          /* Widened 2026-09-15 from /พิชิตรั้วเตรียมอุดมฯ/. The heading was\n             reworded to \"...ให้พร้อมพิชิตรั้วโรงเรียนในฝัน\", so the old test\n             matched nothing and landing_section_viewed for triamudom_courses\n             had silently gone to zero — found by the live ?lp_debug=1 sweep,\n             not by verify.sh, which can only check this test against a string\n             someone typed into it. Products were unaffected: they take their\n             section from the registry, not from a heading match. \"พิชิตรั้ว\"\n             is the part both wordings share and nothing else on the page\n             contains it. */\n          { id: \"{exam_lc}_courses\", test: /พิชิตรั้ว/ },\n        ],\n        /* These controls scroll within the page. They use the existing\n           landing_cta_clicked event: new CTA ids are values, not a new GA4\n           event schema. Product-card detail buttons are intentionally absent;\n           body.html classifies them as product_clicked through their card. */\n        ctas: [\n          {\n            cta_id: \"hero_buy_triamudom\",\n            test: /^เลือกคอร์สเตรียมอุดมฯ$/,\n            cta_destination: \"{exam_lc}_courses\",\n          },\n          {\n            cta_id: \"choose_physics_course\",\n            test: /^Physics\\s*ดูคอร์ส$/,\n            cta_destination: \"{exam_lc}_courses_physics\",\n          },\n          {\n            cta_id: \"choose_math_course\",\n            test: /^Math\\s*ดูคอร์ส$/,\n            cta_destination: \"{exam_lc}_courses_math\",\n          },\n          {\n            cta_id: \"choose_chemistry_course\",\n            test: /^Chemistry\\s*ดูคอร์ส$/,\n            cta_destination: \"{exam_lc}_courses_chemistry\",\n          },\n          {\n            cta_id: \"choose_biology_course\",\n            test: /^Biology\\s*ดูคอร์ส$/,\n            cta_destination: \"{exam_lc}_courses_biology\",\n          },\n          {\n            cta_id: \"choose_another_subject\",\n            test: /^เลือกวิชาอื่น$/,\n            cta_destination: \"{exam_lc}_courses\",\n          },\n        ],\n        products: [\n          {\n            no: \"1106\",\n            name: \"Intensive Physics for TU\",\n            match: \"Intensive Physics for TU\",\n            slug: \"intensive-physics-for-tu-ติวเข้มเนื้อหาฟิสิกส์-พร้อมสอบเข้าเตรียมอุดมฯ\",\n          },\n          {\n            no: \"1112\",\n            name: \"UpSkill Physics for TU\",\n            match: \"UpSkill Physics for TU\",\n            slug: \"upskill-physics-for-tu-ตะลุยโจทย์ฟิสิกส์สอบเข้าเตรียมอุดมฯ\",\n          },\n          {\n            no: \"1185\",\n            name: \"Physics for TU Complete Pack\",\n            match: \"Physics for TU Complete Pack\",\n            slug: \"physics-for-tu-complete-pack-คอร์สเดียวจบ-ครบทั้งเนื้อหา-ตะลุยโจทย์ฟิสิกส์เข้าเต\",\n          },\n          {\n            no: \"8114\",\n            name: \"Intensive Math for TU\",\n            match: \"Intensive Math for TU\",\n            slug: \"intensive-math-for-tu-ติวเข้มเนื้อหาคณิต-พร้อมสอบเข้าเตรียมอุดมฯ\",\n          },\n          {\n            no: \"8116\",\n            name: \"UpSkill Math for TU\",\n            match: \"UpSkill Math for TU\",\n            slug: \"upskill-math-for-tu-ตะลุยโจทย์คณิตศาสตร์สอบเข้าเตรียมอุดมฯ\",\n          },\n          {\n            no: \"8192\",\n            name: \"Math for TU Complete Pack\",\n            match: \"Math for TU Complete Pack\",\n            slug: \"math-for-tu-complete-pack-คอร์สเดียวจบ-ครบทั้งเนื้อหา-ตะลุยโจทย์คณิตศาสตร์เข้าเต\",\n          },\n          {\n            no: \"3112\",\n            name: \"Intensive Chemistry for TU/MWIT/KVIS\",\n            match: \"Intensive Chemistry for TU/MWIT/KVIS\",\n            slug: \"intensive-chemistry-for-tumwitkvis-ติวเข้มเนื้อหาเคมี-พร้อมสอบเข้าเตรียมอุดมฯ-มห\",\n          },\n          {\n            no: \"3114\",\n            name: \"UpSkill Chemistry for TU\",\n            match: \"UpSkill Chemistry for TU\",\n            slug: \"upskill-chemistry-for-tu-ตะลุยโจทย์เคมีสอบเข้าเตรียมอุดมฯ\",\n          },\n          {\n            no: \"3191\",\n            name: \"Chemistry for TU Complete Pack\",\n            match: \"Chemistry for TU Complete Pack\",\n            slug: \"chemistry-for-tu-complete-pack-คอร์สเดียวจบ-ครบทั้งเนื้อหา-ตะลุยโจทย์เคมีเข้าเตร\",\n          },\n          {\n            no: \"2114\",\n            name: \"Intensive Biology for TU/MWIT/KVIS\",\n            match: \"Intensive Biology for TU/MWIT/KVIS\",\n            slug: \"intensive-biology-for-tumwitkvis-ติวเข้มเนื้อหาชีววิทยา-พร้อมสอบเข้าเตรียมอุดมฯ\",\n          },\n          {\n            no: \"2116\",\n            name: \"UpSkill Biology for TU\",\n            match: \"UpSkill Biology for TU\",\n            slug: \"upskill-biology-for-tu-ตะลุยโจทย์ชีววิทยาสอบเข้าเตรียมอุดมฯ\",\n          },\n          {\n            no: \"2190\",\n            name: \"Biology for TU Complete Pack\",\n            match: \"Biology for TU Complete Pack\",\n            slug: \"biology-for-tu-complete-pack-คอร์สเดียวจบ-ครบทั้งเนื้อหา-ตะลุยโจทย์ชีววิทยาเข้าเ\",\n          },\n        ],\n      },\n      {\n        /* Added 2026-09-07. Four subject blocks, each with intensive,\n           UpSkill and complete-pack cards. The intensive and UpSkill cards are\n           href-less Figma role-links, so their registered URLs are required\n           for both navigation and campaign attribution. */\n        path: \"/mwitkvis\",\n        exam: \"MWIT_KVIS\",\n        landing_page_id: \"mwitkvis_2026\",\n        title: \"คอร์สติวเข้มเนื้อหาและตะลุยข้อสอบเข้า ม.4 มหิดล/กำเนิดวิทย์ (MWIT/KVIS) จุฬาภรณ์ฯ วมว. | OnDemand\",\n        /* This page has neither the shared TCAS section copy nor a course\n           heading before its first subject block. Physics is the reliable,\n           measured start of the course catalogue. */\n        sections: [\n          /* Fragments, for the same reason as /triamudom above: at 390 px both\n             headings split in two (\"ปูพื้นฐานให้แน่น\" + \"โจทย์ยากแค่ไหน ก็พร้อมลุย\",\n             and \"พิชิต MWIT & KVIS\" + \"ไปกับ OnDemand\"), so the full-line tests\n             matched nothing on mobile while passing at 900 and 1440. Measured\n             2026-09-15. Note \"ไปกับ OnDemand\" is NOT usable as the fragment —\n             it is also a hero line on this page, so it would match twice. */\n          { id: \"why_ondemand\", test: /ปูพื้นฐานให้แน่น/ },\n          /* Same shape as /triamudom, and removed for the same reason: this\n             page has no learning_support block. \"พิชิต MWIT & KVIS ไปกับ\n             OnDemand\" is the SECOND LINE of the why_ondemand title, above the\n             same sub-line and the same three benefit cards — verified by\n             screenshot and by the gap between the two headings, 38 px here\n             (39 px on /triamudom) against 418–867 px on every page that really\n             does have two blocks. That gap is the cheap test when the wording\n             gives no clue: adjacent means one title, hundreds of pixels apart\n             means two sections.\n\n             The code follows the design — a page that does not have the block\n             does not report the section. Reporting consequence: mwitkvis_2026\n             has learning_support rows from 2026-09-07 to this publish; they\n             describe the why_ondemand block, not a support block. */\n          { id: \"learning_support\", remove: true },\n          { id: \"{exam_lc}_courses\", test: /^Physics$/ },\n        ],\n        ctas: [\n          {\n            cta_id: \"hero_buy_mwit_kvis\",\n            test: /^เลือกคอร์ส MWIT & KVIS$/,\n            cta_destination: \"{exam_lc}_courses\",\n          },\n          {\n            cta_id: \"choose_physics_course\",\n            test: /^Physics\\s*ดูคอร์ส$/,\n            cta_destination: \"{exam_lc}_courses_physics\",\n          },\n          {\n            cta_id: \"choose_math_course\",\n            test: /^Math\\s*ดูคอร์ส$/,\n            cta_destination: \"{exam_lc}_courses_math\",\n          },\n          {\n            cta_id: \"choose_chemistry_course\",\n            test: /^Chemistry\\s*ดูคอร์ส$/,\n            cta_destination: \"{exam_lc}_courses_chemistry\",\n          },\n          {\n            cta_id: \"choose_biology_course\",\n            test: /^Biology\\s*ดูคอร์ส$/,\n            cta_destination: \"{exam_lc}_courses_biology\",\n          },\n          {\n            cta_id: \"choose_another_subject\",\n            test: /^เลือกวิชาอื่น$/,\n            cta_destination: \"{exam_lc}_courses\",\n          },\n        ],\n        products: [\n          { no: \"1107\", name: \"Intensive Physics for MWIT/KVIS\", match: \"Intensive Physics for MWIT/KVIS\", slug: \"intensive-physics-for-mwitkvis-ติวเข้มเนื้อหาฟิสิกส์-พร้อมสอบเข้ามหิดลฯ-กำเนิดวิ\" },\n          { no: \"1113\", name: \"UpSkill Physics for MWIT/KVIS\", match: \"UpSkill Physics for MWIT/KVIS\", slug: \"upskill-physics-for-mwitkvis-ตะลุยโจทย์ฟิสิกส์สอบเข้ามหิดลฯ-กำเนิดวิทย์-จุฬาภรณ์\" },\n          { no: \"1186\", name: \"Physics for MWIT/KVIS Complete Pack\", match: \"Physics for MWIT/KVIS Complete Pack\", slug: \"physics-for-mwitkvis-complete-pack-คอร์สเดียวจบ-ครบทั้งเนื้อหา-ตะลุยโจทย์ฟิสิกส์\" },\n          { no: \"8113\", name: \"Intensive Math for MWIT/KVIS\", match: \"Intensive Math for MWIT/KVIS\", slug: \"intensive-math-for-mwitkvis-ติวเข้มเนื้อหาคณิต-พร้อมสอบเข้ามหิดลฯ-กำเนิดวิทย์-จุ\" },\n          { no: \"8117\", name: \"UpSkill Math for MWIT/KVIS\", match: \"UpSkill Math for MWIT/KVIS\", slug: \"upskill-math-for-mwitkvis-ตะลุยโจทย์คณิตศาสตร์สอบเข้ามหิดลฯ-กำเนิดวิทย์-จุฬาภรณ์\" },\n          { no: \"8193\", name: \"Math for MWIT/KVIS Complete Pack\", match: \"Math for MWIT/KVIS Complete Pack\", slug: \"math-for-mwitkvis-complete-pack-คอร์สเดียวจบ-ครบทั้งเนื้อหา-ตะลุยโจทย์คณิตศาสตร์\" },\n          { no: \"3112\", name: \"Intensive Chemistry for TU/MWIT/KVIS\", match: \"Intensive Chemistry for TU/MWIT/KVIS\", slug: \"intensive-chemistry-for-tumwitkvis-ติวเข้มเนื้อหาเคมี-พร้อมสอบเข้าเตรียมอุดมฯ-มห\" },\n          { no: \"3113\", name: \"UpSkill Chemistry for MWIT/KVIS\", match: \"UpSkill Chemistry for MWIT/KVIS\", slug: \"upskill-chemistry-for-mwitkvis-ตะลุยโจทย์เคมีสอบเข้ามหิดลฯ-กำเนิดวิทย์-จุฬาภรณ์ฯ\" },\n          { no: \"3190\", name: \"Chemistry for MWIT/KVIS Complete Pack\", match: \"Chemistry for MWIT/KVIS Complete Pack\", slug: \"chemistry-for-mwitkvis-complete-pack-คอร์สเดียวจบ-ครบทั้งเนื้อหา-ตะลุยโจทย์เคมีเ\" },\n          { no: \"2114\", name: \"Intensive Biology for TU/MWIT/KVIS\", match: \"Intensive Biology for TU/MWIT/KVIS\", slug: \"intensive-biology-for-tumwitkvis-ติวเข้มเนื้อหาชีววิทยา-พร้อมสอบเข้าเตรียมอุดมฯ\" },\n          { no: \"2115\", name: \"UpSkill Biology for MWIT/KVIS\", match: \"UpSkill Biology for MWIT/KVIS\", slug: \"upskill-biology-for-mwitkvis-ตะลุยโจทย์ชีววิทยาสอบเข้ามหิดลฯ-กำเนิดวิทย์-จุฬาภรณ\" },\n          { no: \"2189\", name: \"Biology for MWIT/KVIS Complete Pack\", match: \"Biology for MWIT/KVIS Complete Pack\", slug: \"biology-for-mwitkvis-complete-pack-ครบทั้งเนื้อหา-ตะลุยโจทย์ชีววิทยา-สอบเข้ามหิด\" },\n        ],\n      },\n      {\n        /* Added 2026-09-15, after it turned up in sitemap.xml with no entry —\n           i.e. it had ALREADY been live and dark, like /tcasupskills on\n           2026-09-02. Measured that day in degraded mode: landing_page_id\n           \"tpat3allcourses\", products 0, so all EIGHT cards were untracked and\n           every outbound click left without campaign params. Reporting note:\n           rows before this publish carry landing_page_id \"tpat3allcourses\";\n           afterwards \"tpat3_all_2026\". Do not union them without saying so.\n\n           Like /tcasupskills, `exam` here is only the token that derives\n           section and CTA ids — this page is not one exam. It is the combined\n           engineering-prep catalogue (TPAT3, CU-ENT, คณิต, ฟิสิกส์, เคมี, TGAT).\n           The readable identity is `title` and `landing_page_id`. */\n        path: \"/tpat3allcourses\",\n        exam: \"TPAT3_ALL\",\n        landing_page_id: \"tpat3_all_2026\",\n        /* This page has a real Figma SEO title AND real og:title/og:description\n           (unlike /tpat1|/tpat3|/tgat, still on \"Shop Landing Page\"). Kept in\n           the registry anyway: document.title is empty when this script runs. */\n        title:\n          \"รวมคอร์สเตรียมสอบวิศวะ TPAT3, CU-ENT, คณิต, ฟิสิกส์, เคมี และ TGAT | OnDemand\",\n        /* Not one of the shared TCAS headings matches this page except the FAQ,\n           so all four are pinned here. Which heading is which was MEASURED by\n           layout offset against /tpat3, not read off the Thai — the wording\n           diverges far enough that reading it gives the wrong answer:\n\n             slot          /tpat3 (offset)                    this page (offset)\n             why_ondemand  ว่าที่เด็กวิศวะเลือกเรียนกับ OnDemand (735)  วางแผนให้ถูกจุด… (697)\n             learning_…    เรียนกับ OnDemand / สบายใจ หายห่วง (1562)  เรียนกับ OnDemand ครบ จบ มั่นใจ (1115)\n\n           The second row is corroborated twice over: same layout slot AND the\n           same \"เรียนกับ OnDemand ___\" heading form. Semantically this page's\n           block lists value props rather than support services, and it carries\n           none of the learning_support outbound links (no YouTube, no\n           anywhere.learn.co.th, no /about-us — this page has NO outbound link\n           except the header shop link), so nothing joins on it either way.\n\n           Every test matches a FRAGMENT, deliberately: the headings split\n           differently per breakpoint, and two of them are different STRINGS per\n           breakpoint rather than a split. Measured at 390 / 900 / 1440 px:\n             - \"เรียนกับ OnDemand ครบ จบ มั่นใจ\" is one h1 at 1440, two at 390/900\n             - \"คอร์สสำหรับน้อง ๆ ที่เน้น TPAT3 และ CU-ENT\" is one h1 at 900/1440,\n               two at 390\n             - the packs heading is \"พร้อมมากกว่าเดิม ด้วย Pack N-Gineering\" at\n               1440 but \"คอร์สสำหรับน้อง ๆ ที่อยากเก็บหลายวิชา\" at 390/900 —\n               NOT a split, a different string, hence the alternation below.\n           A whole-heading test would have gone silently to zero on mobile,\n           which is most of this traffic. */\n        sections: [\n          { id: \"why_ondemand\", test: /วางแผนให้ถูกจุด/ },\n          { id: \"learning_support\", test: /ครบ จบ มั่นใจ/ },\n          { id: \"{exam_lc}_courses\", test: /ที่เน้น TPAT3 และ CU-ENT/ },\n          {\n            /* Second products block. Must NOT end in \"_courses\": PAGE.courses\n               is resolved with .find(/_courses$/) and a second match would\n               silently relabel every product on the page. position 5 is the\n               stable identifier already used by /tcasupskills' packs block —\n               not DOM order, which here is between learning_support (2) and\n               _courses (3). */\n            id: \"{exam_lc}_packs\",\n            test: /Pack N-Gineering|อยากเก็บหลายวิชา/,\n            name: \"{exam} packs\",\n            position: 5,\n          },\n        ],\n        /* Hero CTA. The shared rule is /^เลือกซื้อคอร์ส/ and this page has\n           never said \"ซื้อ\", so the shared rule matched nothing and hero_buy_*\n           could never fire. Same cta_id as the shared rule, so this OVERRIDES\n           it rather than adding a second hero CTA.\n\n           TWO labels, because the copy was reworded mid-day on 2026-09-15 from\n           \"เลือกคอร์สเตรียมสอบวิศวะ\" to \"คลิกที่นี่เพื่อดูคอร์สเรียน\". Nothing\n           reported that: a CTA rule that stops matching produces no error and\n           no warning — selfCheck checks sections and products against the DOM,\n           never CTAs — so landing_cta_clicked simply goes to zero. Matching\n           both is the same defence LINK_RULES uses for the \"other products\"\n           reword, and it means an older publish of the page keeps working.\n\n           Measured at all three breakpoints, before AND after the reword: the\n           label is a bare <p> with hasInteractiveAncestor FALSE — the §1 shape\n           that ctaFor's pre-gate matching exists for. It is also, separately, a\n           Figma defect that the reword did NOT fix: a real click still moves\n           scrollY 0 → 0, and the new wording actively tells the visitor to\n           click. See the doc's Figma-side defects section. */\n        ctas: [\n          {\n            cta_id: \"hero_buy_{exam_lc}\",\n            test: /^(คลิกที่นี่เพื่อดูคอร์สเรียน|เลือกคอร์สเตรียมสอบวิศวะ)$/,\n            cta_destination: \"{exam_lc}_courses\",\n          },\n        ],\n        /* All eight ids verified against PRODUCTION 2026-09-15: HTTP 200, no\n           \"ไม่พร้อมจำหน่าย\", and every slug copied from that PDP's own\n           rel=\"canonical\" (decoded). None is a recommended-set — all eight are\n           real products with numeric PDP ids — so no `set:` is needed here.\n\n           NOTE ON `match`: none of these matches the number the card displays,\n           and that is deliberate rather than stylistic. The 9190 card shows\n           \"9190\" at 900/1440 px but \"9196\" at 390 px — the same card, two\n           different numbers, and 9196 is a DIFFERENT product (the two-course\n           Ultimate pack in the block above). Matching on text routes that card\n           to the right PDP at every breakpoint; matching on the number would\n           have sent mobile buyers to the wrong pack. The Figma copy defect is\n           still worth fixing — see the doc. The apostrophe forms are avoided\n           for the same reason: the cards carry both DEK’70 (curly) and Dek'70\n           (straight). Simulated against the live card text at 390/900/1440 px:\n           all eight match exactly once, none is a substring of another. */\n        products: [\n          /* --- block 1: TPAT3 / CU-ENT courses (section {exam_lc}_courses) ---\n             The same three cards as /tpat3. Products are page-scoped, so these\n             entries and /tpat3's cannot interfere; the duplication is the\n             intended cost of that scoping. */\n          {\n            no: \"9108\",\n            name: \"ติวเข้ม TPAT3 ความถนัดวิศวะ\",\n            match: \"ติวเข้ม TPAT3 ความถนัดวิศวะ\",\n            slug: \"ติวเข้ม-tpat3-ความถนัดวิศวะ-ปูพื้นครบ-พร้อมตะลุยโจทย์เข้มข้น-dek70\",\n          },\n          {\n            /* \"สอบตรงวิศวะจุฬาฯ\" is load-bearing: the 9196 card's body text\n               contains \"ตะลุยโจทย์ CU-ENT วิศวะจุฬาฯ\", so the shorter\n               \"ตะลุยโจทย์ CU-ENT\" used on /tpat3 would be ambiguous here. */\n            no: \"9112\",\n            name: \"ตะลุยโจทย์ CU-ENT สอบตรงวิศวะจุฬาฯ\",\n            match: \"ตะลุยโจทย์ CU-ENT สอบตรงวิศวะจุฬาฯ\",\n            slug: \"ตะลุยโจทย์-cu-ent-สอบตรงวิศวะจุฬาฯ-เจาะข้อสอบครบ-5-พาร์ท-ยื่นรอบ-1-dek70\",\n          },\n          {\n            no: \"9196\",\n            name: \"The Ultimate วิศวะจุฬาฯ Pack\",\n            match: \"The Ultimate วิศวะจุฬาฯ Pack\",\n            slug: \"the-ultimate-วิศวะจุฬาฯ-pack-ครบทั้ง-tpat3-cu-ent-ในแพ็กเดียว-dek70\",\n          },\n          /* --- block 2: multi-subject packs (section {exam_lc}_packs) --- */\n          {\n            no: \"9192\",\n            name: \"Pack ติวเข้มความถนัดกลุ่มวิศวะและเทคโนโลยี\",\n            match: \"Pack ติวเข้มความถนัดกลุ่มวิศวะ\",\n            section: \"{exam_lc}_packs\",\n            slug: \"engineering-aptitude-pack-tgat-tpat3cu-ent-สำหรับสายวิศวะ-dek70\",\n          },\n          {\n            no: \"9193\",\n            name: \"Pack N-Gineering DEK70 Focus คณิต\",\n            match: \"Focus คณิต\",\n            section: \"{exam_lc}_packs\",\n            slug: \"n-gineering-focus-math-ติวเข้มคณิต-tpat3cu-ent-สำหรับสายวิศวะ-dek70\",\n          },\n          {\n            no: \"9194\",\n            name: \"Pack N-Gineering DEK70 Focus ฟิสิกส์\",\n            match: \"Focus ฟิสิกส์\",\n            section: \"{exam_lc}_packs\",\n            slug: \"n-gineering-focus-physics-ติวเข้มฟิสิกส์-tpat3cu-ent-สำหรับสายวิศวะ-dek70\",\n          },\n          {\n            /* 9195 and 9190 share most of their body copy (both quote\n               \"5,200 ข้อ\" and the same Supermap/A Point/X-Map line), so the\n               match has to come from the title. 9195 lists the subjects as\n               \"ตะลุยโจทย์ คณิต ฟิสิกส์\"; 9190 as \"ตะลุยโจทย์ ฟิสิกส์, คณิต, เคมี\". */\n            no: \"9195\",\n            name: \"Pack N-Gineering Dek70 คณิต ฟิสิกส์\",\n            match: \"ตะลุยโจทย์ คณิต ฟิสิกส์\",\n            section: \"{exam_lc}_packs\",\n            slug: \"n-gineering-pack-ฟิสิกส์-คณิต-tgat-tpat3cu-ent-สำหรับสายวิศวะ-dek70\",\n          },\n          {\n            /* The card whose displayed number is 9190 at 900/1440 px and 9196\n               at 390 px. 9190 is correct — its PDP is the 5-subject\n               Engineering Complete Pack; 9196 is the 2-course Ultimate pack\n               above. product_no reports 9190 on every breakpoint. */\n            no: \"9190\",\n            name: \"Pack ติวเข้ม พิชิตวิศวะจุฬา 5 วิชา\",\n            match: \"พิชิตวิศวะจุฬา 5 วิชา\",\n            section: \"{exam_lc}_packs\",\n            slug: \"engineering-complete-pack-ฟิสิกส์-คณิต-เคมี-tpat3cu-ent-tgat-dek70\",\n          },\n        ],\n      },\n      {\n        /* Added 2026-09-23. Live in the sitemap but unregistered, so it ran in\n           degraded mode: all 15 product cards fell through to Figma's own link,\n           which opened the right PDP with NO campaign params, NO fbclid/ttclid\n           and NO lp_src (measured at 1440 px, against /tpat1 keeping all\n           three). The same failure /tcasupskills and /tpat3allcourses had.\n\n           The TPAT1 counterpart of /tpat3allcourses: the medicine-prep\n           catalogue (TPAT1 courses, then TPAT1 + A-Level packs). `exam` is only\n           the token for section and CTA ids; the identity is `title` and\n           `landing_page_id`.\n\n           Headings measured at 390 / 900 / 1440 px. The hero is split\n           (\"ติว TPAT1\" + \"กับ OnDemand\") everywhere; every other heading is one\n           h1 at all three widths, so the fragments below match at each one.\n           Two FIGMA COPY DEFECTS, reported, not worked around:\n             - the packs heading reads \"พร้อมมากกว่าเดิม ด้วย Pack N-Gineering\",\n               the ENGINEERING wording copied from /tpat3allcourses, on this\n               MEDICINE page. When marketing rewords it, this test goes silent;\n               add the new wording as an alternative, do not replace it;\n             - the whole packs block (heading + 6 cards) renders TWICE at every\n               width. Section and impression events are per id, so the double\n               block does not double-count, but the page looks duplicated. */\n        path: \"/tpat1allcourses\",\n        exam: \"TPAT1_ALL\",\n        landing_page_id: \"tpat1_all_2026\",\n        title: \"ติว TPAT1 ความถนัดแพทย์ ครบ 4 พาร์ท | OnDemand\",\n        sections: [\n          { id: \"why_ondemand\", test: /วางแผนให้ถูกจุด/ },\n          { id: \"learning_support\", test: /ครบ จบ มั่นใจ/ },\n          { id: \"{exam_lc}_courses\", test: /เริ่มจากคอร์สเดี่ยว/ },\n          {\n            /* Second products block; must NOT end in \"_courses\" (see\n               /tpat3allcourses). position 5, the stable packs identifier. */\n            id: \"{exam_lc}_packs\",\n            test: /Pack N-Gineering/,\n            name: \"{exam} packs\",\n            position: 5,\n          },\n        ],\n        /* All nine verified against PRODUCTION 2026-09-23: HTTP 200, no\n           \"ไม่พร้อมจำหน่าย\", slug copied from each PDP's own rel=\"canonical\"\n           (decoded, \".<id>\" suffix dropped as elsewhere). The packs are real\n           products with numeric PDP ids, not recommended-sets, so no `set:`.\n           `match` simulated against the FULL live card text at 390/900/1440 px:\n           each of the 15 cards matches exactly its own product, and no match is\n           a substring of another. The pack matches carry \"TPAT1 +\" or a\n           distinctive subject name because every pack card also contains\n           \"ติวเข้ม + UpSkill ความถนัดแพทย์ TPAT1\". */\n        products: [\n          /* --- block 1: TPAT1 courses (section {exam_lc}_courses) --- */\n          {\n            no: \"9997\",\n            name: \"ติวเข้ม TPAT1 ความถนัดแพทย์\",\n            match: \"ติวเข้ม TPAT1\",\n            slug: \"ติวเข้ม-tpat1-ความถนัดแพทย์-ปูพื้นครบ-4-พาร์ท-พร้อมลุยสนามจริง\",\n          },\n          {\n            no: \"9998\",\n            name: \"UpSkill TPAT1 ความถนัดแพทย์\",\n            match: \"UpSkill TPAT1\",\n            slug: \"upskill-tpat1-ความถนัดแพทย์-ตะลุยโจทย์เก็บคะแนนทุกพาร์ท-dek70\",\n          },\n          {\n            no: \"9996\",\n            name: \"The Ultimate TPAT1 Pack\",\n            match: \"The Ultimate TPAT1 Pack\",\n            slug: \"the-ultimate-tpat1-pack-คอร์สเดียวจบ-ครบทั้งติวเข้ม-ตะลุยโจทย์ความถนัดแพทย์-dek7\",\n          },\n          /* --- block 2: TPAT1 + A-Level packs (section {exam_lc}_packs) --- */\n          {\n            no: \"9953\",\n            name: \"TPAT1 + V-Series Physics A-Level\",\n            match: \"V-Series Physics A-Level\",\n            section: \"{exam_lc}_packs\",\n            slug: \"tpat1-v-series-physics-a-level-ความถนัดแพทย์-ติวเข้มฟิสิกส์\",\n          },\n          {\n            no: \"9955\",\n            name: \"TPAT1 + Math Admissions A-Level\",\n            match: \"Math Admissions A-Level\",\n            section: \"{exam_lc}_packs\",\n            slug: \"tpat1-math-admissions-a-level-ความถนัดแพทย์-ติวเข้มคณิตศาสตร์\",\n          },\n          {\n            no: \"9952\",\n            name: \"TPAT1 + Chemistry A-Level\",\n            match: \"TPAT1 + Chemistry A-Level\",\n            section: \"{exam_lc}_packs\",\n            slug: \"tpat1-chemistry-a-level-ความถนัดแพทย์-ติวเข้มเคมี\",\n          },\n          {\n            no: \"9954\",\n            name: \"TPAT1 + Biology A-Level\",\n            match: \"TPAT1 + Biology A-Level\",\n            section: \"{exam_lc}_packs\",\n            slug: \"tpat1-biology-a-level-ความถนัดแพทย์-ติวเข้มชีววิทยา\",\n          },\n          {\n            no: \"9951\",\n            name: \"TPAT1 + English A-Level\",\n            match: \"TPAT1 + English A-Level\",\n            section: \"{exam_lc}_packs\",\n            slug: \"tpat1-english-a-level-ความถนัดแพทย์-ติวเข้มอังกฤษ\",\n          },\n          {\n            no: \"9950\",\n            name: \"Medical Admission Complete Pack 5 วิชา\",\n            match: \"Medical Admission Complete Pack\",\n            section: \"{exam_lc}_packs\",\n            slug: \"medical-admission-complete-pack-5-วิชา-tpat1-คณิต-ฟิสิกส์-เคมี-ชีวะ-a-level\",\n          },\n        ],\n      },\n    ];\n\n    /* Matched against the real heading text of every path. Re-measured\n     2026-09-02 on all five sitemap URLs; two of the assumptions behind the\n     original 2026-08-21 wording no longer hold:\n       - FAQ is an <h4> on every path, not an h1. Everything else is an h1.\n       - the per-breakpoint duplicate copies are gone (each heading now appears\n         exactly once), and /tcasupskills does not split headings per line the\n         way /tpat1|/tpat3|/tgat still do (\"ติว TPAT1\" + \"กับ OnDemand\").\n     Both only ever made matching harder, so nothing here depended on them —\n     but do not re-derive them from this file's history.\n\n     `position` is a stable per-rule identifier, NOT DOM order: the three older\n     paths have months of rows at 1–4 and renumbering would break comparison\n     across dates. That is why {exam_lc}_packs is 5 even though on\n     /tcasupskills it renders between learning_support (2) and _courses (3). */\n    const SECTION_RULES = [\n      {\n        test: /เลือกเรียนกับ ?OnDemand|พร้อมลุย/,\n        id: \"why_ondemand\",\n        name: \"Why OnDemand for {exam}\",\n        position: 1,\n      },\n      {\n        test: /สบายใจ\\s*หายห่วง/,\n        id: \"learning_support\",\n        name: \"OnDemand learning support\",\n        position: 2,\n      },\n      {\n        test: /คอร์สเดี่ยว|เลือกคอร์สให้ตรง/,\n        id: \"{exam_lc}_courses\",\n        name: \"{exam} courses\",\n        position: 3,\n      },\n      { test: /คำถามที่พบบ่อย/, id: \"faq\", name: \"{exam} FAQ\", position: 4 },\n    ];\n\n    const CTA_RULES = [\n      {\n        test: /^เลือกซื้อคอร์ส/,\n        cta_id: \"hero_buy_{exam_lc}\",\n        cta_destination: \"{exam_lc}_courses\",\n      },\n    ];\n\n    /* ---- FAQ accordion ----------------------------------------------------\n     Every path renders its FAQ items as the page's ONLY <button> elements —\n     verified 2026-09-02 across all four registered paths (7 items on\n     /tcasupskills, 6 on /tpat1 and /tgat, 5 on /tpat3; 24 in total, and not one\n     of them was tracked before this). Everything else interactive on these\n     pages is an <a> or a div[role=link|button], which is what makes the plain\n     tag a safe selector rather than a lucky one.\n\n     There is NO aria-expanded, no <details>/<summary>, and the class names are\n     hashed per build (`css-m749fi` → `css-rldjp0` on expand), so the open/close\n     state cannot be read from an attribute. What IS reliable: the answer is\n     revealed INSIDE the same button, so the button's own text grows on expand\n     (measured: 38 → 145 chars, height 64 → 99). The body slot therefore\n     measures the text length across a frame instead of guessing from a\n     threshold — see `landing_faq_toggled` there. */\n    const FAQ = {\n      selector: \"button\",\n      section_id: \"faq\",\n    };\n\n    const LINK_RULES = [\n      /* textTest, not exact equality: the header instance reads\n       \"ดูสินค้าอื่น ๆ ของเรา\" but the one in the courses section reads\n       \"ดูสินค้าอื่น ๆ\". Exact matching missed the second on all three paths, so\n       it fired no event AND lost attribution — Figma navigated to a bare\n       shoponline URL with no campaign params. Measured 2026-08-21. */\n      /* \"ดูคอร์สทั้งหมด\" is the CURRENT wording of the header shop link on\n       EVERY path — not just /tcasupskills. It was \"ดูสินค้าอื่น ๆ\" when this\n       rule was written and verified (2026-08-21, doc §7); the Figma copy was\n       reworded some time after, and no path has carried the old string since.\n       So `other_products` had silently stopped firing everywhere: the link\n       still resolved and was still decorated (the ondemand.in.th host rule\n       below caught it), but it reported as `ondemand_website` in section\n       learning_support — the one link that sends people to the shop, filed\n       under the \"about us\" links.\n\n       Measured 2026-09-02 by diffing the resolved classification of every\n       element on all three older paths before and after this change: the\n       ONLY difference on any of them is this link's id and section. Keeping\n       the old alternative means an old publish of the page keeps working;\n       matching either is why this is a textTest and not equality.\n\n       Note for reporting: from the publish that carries this, `ondemand_website`\n       counts step DOWN and `header_other_products` steps UP on /tpat1, /tpat3\n       and /tgat. That is the fix landing, not a traffic change. */\n      {\n        id: \"other_products\",\n        textTest: /^ดูสินค้าอื่น|^ดูคอร์สทั้งหมด/,\n        fallbackUrl:\n          \"https://shoponline.ondemand.in.th/\" /* Figma role-link, no href */,\n        section_id: \"{exam_lc}_courses\",\n        position: 1,\n      },\n      {\n        id: \"learning_mode_video\",\n        host: /youtube\\.com|youtu\\.be/,\n        section_id: \"learning_support\",\n        position: 4,\n      },\n      {\n        id: \"clear_support\",\n        path: /\\/about-us/,\n        section_id: \"learning_support\",\n        position: 3,\n      },\n      {\n        id: \"learnanywhere\",\n        host: /^anywhere\\.learn\\.co\\.th$/,\n        section_id: \"learning_support\",\n        position: 2,\n      },\n      {\n        id: \"ondemand_website\",\n        host: /ondemand\\.in\\.th/,\n        section_id: \"learning_support\",\n        position: 1,\n      },\n    ];\n\n    /* ======================= ENGINE ======================= */\n\n    const DEBUG = new URLSearchParams(location.search).has(\"lp_debug\");\n\n    function norm(s) {\n      return (s || \"\").replace(/\\s+/g, \" \").trim();\n    }\n    function lc(s) {\n      return norm(s).toLowerCase();\n    }\n    function clamp(s, n) {\n      return s && s.length > n ? s.slice(0, n) : s;\n    }\n    function fill(v, tok) {\n      return typeof v === \"string\"\n        ? v.replace(/\\{exam\\}/g, tok.exam).replace(/\\{exam_lc\\}/g, tok.exam_lc)\n        : v;\n    }\n\n    const routeSubscribers = [];\n\n    /* Published synchronously so any later script sees a complete surface. */\n    const LP = (window.LP = {\n      measurementId: MEASUREMENT_ID,\n      shopOrigin: SHOP_ORIGIN,\n      debug: DEBUG,\n      page: null /* resolved page: identity + products + rule tables */,\n      context: null /* properties attached to every event */,\n      ids: {} /* GA4 client_id / session_id, filled async */,\n      campaign: null,\n      send: send,\n      decorateOutboundUrl: decorateOutboundUrl,\n      onRoute: onRoute,\n      util: { norm: norm, lc: lc, clamp: clamp },\n    });\n\n    /* ---- campaign attribution: last qualifying touch, per session ---- */\n    const STORAGE_KEY = \"landing_campaign_last_touch\";\n    const UTM_KEYS = [\n      \"utm_source\",\n      \"utm_medium\",\n      \"utm_campaign\",\n      \"utm_term\",\n      \"utm_content\",\n      \"utm_id\",\n      \"utm_source_platform\",\n      \"utm_creative_format\",\n      \"utm_marketing_tactic\",\n    ];\n    const CLICK_ID_SOURCE = {\n      gclid: \"google\",\n      gbraid: \"google\",\n      wbraid: \"google\",\n      dclid: \"google\",\n      fbclid: \"meta\",\n      ttclid: \"tiktok\",\n      ldtag_cl: \"line\",\n      msclkid: \"microsoft\",\n      twclid: \"x\",\n      epik: \"pinterest\",\n      sccid: \"snapchat\",\n      rdt_cid: \"reddit\",\n      li_fat_id: \"linkedin\",\n    };\n    const CLICK_ID_KEYS = Object.keys(CLICK_ID_SOURCE);\n    const CAMPAIGN_KEYS = UTM_KEYS.concat(CLICK_ID_KEYS);\n\n    window.dataLayer = window.dataLayer || [];\n    window.gtag =\n      window.gtag ||\n      function () {\n        window.dataLayer.push(arguments);\n      };\n\n    /* ---- Meta base Pixel (consent-gated) ----\n     PageView only. No purchase event: order_placed fires BEFORE payment, so a\n     browser Purchase would report revenue for abandoned payments — Purchase is\n     server-side via CAPI (SHOP-R25 Part 2).\n     No <noscript> tracking image either: it fires unconditionally and would\n     bypass the consent check above entirely. */\n    function loadMetaPixel() {\n      if (!META_PIXEL_ID || !hasAdvertisingConsent()) return;\n      if (window.fbq) return;\n      !(function (f, b, e, v, n, t, s) {\n        if (f.fbq) return;\n        n = f.fbq = function () {\n          n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n        };\n        if (!f._fbq) f._fbq = n;\n        n.push = n;\n        n.loaded = !0;\n        n.version = \"2.0\";\n        n.queue = [];\n        t = b.createElement(e);\n        t.async = !0;\n        t.src = v;\n        s = b.getElementsByTagName(e)[0];\n        s.parentNode.insertBefore(t, s);\n      })(window, document, \"script\", \"https://connect.facebook.net/en_US/fbevents.js\");\n      window.fbq(\"init\", META_PIXEL_ID);\n      window.fbq(\"track\", \"PageView\");\n    }\n    LP.loadMetaPixel = loadMetaPixel;\n    loadMetaPixel();\n\n    const tagScript = document.createElement(\"script\");\n    tagScript.async = true;\n    tagScript.src =\n      \"https://www.googletagmanager.com/gtag/js?id=\" + MEASUREMENT_ID;\n    document.head.appendChild(tagScript);\n\n    function readFromUrl() {\n      const params = new URLSearchParams(location.search);\n      const out = {};\n      CAMPAIGN_KEYS.forEach(function (k) {\n        const v = params.get(k);\n        if (v && v.trim()) out[k] = v.trim();\n      });\n      return out;\n    }\n\n    function qualifies(c) {\n      return (\n        Boolean(c.utm_source) ||\n        CLICK_ID_KEYS.some(function (k) {\n          return c[k];\n        })\n      );\n    }\n\n    function resolveCampaign() {\n      const fromUrl = readFromUrl();\n      if (qualifies(fromUrl)) {\n        try {\n          sessionStorage.setItem(STORAGE_KEY, JSON.stringify(fromUrl));\n        } catch (e) {}\n        return fromUrl;\n      }\n      let stored = {};\n      try {\n        stored = JSON.parse(sessionStorage.getItem(STORAGE_KEY) || \"{}\");\n      } catch (e) {}\n      return Object.keys(stored).length ? stored : fromUrl;\n    }\n\n    const campaign = resolveCampaign();\n    const clickIdKey = CLICK_ID_KEYS.find(function (k) {\n      return campaign[k];\n    });\n    LP.campaign = campaign;\n\n    /* Aliases kept for anything in the GTM container still referencing the\n     pre-2026-08-21 globals. Safe to drop once nothing does. */\n    window.landingCampaignParams = campaign;\n    window.landingGaIds = LP.ids;\n\n    function decorateOutboundUrl(destinationUrl) {\n      let url;\n      try {\n        url = new URL(destinationUrl, location.href);\n      } catch (e) {\n        return destinationUrl;\n      }\n      CAMPAIGN_KEYS.forEach(function (k) {\n        const v = campaign[k];\n        if (typeof v === \"string\" && v.trim())\n          url.searchParams.set(k, v.trim());\n      });\n      if (LP.ids.client_id) url.searchParams.set(\"lp_cid\", LP.ids.client_id);\n      if (LP.ids.session_id)\n        url.searchParams.set(\"lp_sid\", String(LP.ids.session_id));\n      url.searchParams.set(\n        \"lp_src\",\n        LP.page.landing_page_id,\n      ); /* per path, not hardcoded */\n      return url.href;\n    }\n\n    /* ---- path resolution ---- */\n    function resolvePage(pathname) {\n      const p = pathname.replace(/\\/+$/, \"\") || \"/\";\n      let prefix = null;\n      for (const cfg of PAGES) {\n        const pat = cfg.path;\n        if (pat instanceof RegExp) {\n          if (pat.test(p)) return cfg;\n          continue;\n        }\n        const want = String(pat).replace(/\\/+$/, \"\") || \"/\";\n        if (want === p) return cfg; /* exact wins */\n        if (want.endsWith(\"*\")) {\n          const base = want.slice(0, -1);\n          if (p.startsWith(base) && (!prefix || base.length > prefix.__len))\n            prefix = Object.assign(\n              { __len: base.length },\n              cfg,\n            ); /* longest prefix */\n        }\n      }\n      if (prefix) return prefix;\n\n      /* Unregistered path: still report page_view / sections / outbound links so\n       the page is never dark, but declare NO products — so we never hijack a\n       click to a destination we cannot resolve. */\n      const slug = p.replace(/^\\/+|\\/+$/g, \"\").replace(/\\//g, \"_\") || \"home\";\n      if (DEBUG)\n        console.warn(\"[lp] no PAGES entry for\", p, \"— degraded mode:\", slug);\n      return {\n        path: p,\n        exam: slug.toUpperCase(),\n        landing_page_id: slug,\n        products: [],\n      };\n    }\n\n    function buildPage(cfg) {\n      const tok = { exam: cfg.exam, exam_lc: cfg.exam.toLowerCase() };\n\n      /* Page-specific rules live in the PAGE ENTRY, not in the shared tables.\n       `overlay` merges an entry's own `sections:` / `ctas:` over the shared\n       table: same id overrides that rule's fields, a new id adds one for this\n       page only. Undefined fields are dropped, so a page can override just the\n       `test` and inherit name and position.\n\n       This replaced an `only: [\"/path\"]` flag inside SECTION_RULES. Same effect,\n       but the shared tables stay page-agnostic and everything specific to a page\n       is readable in one place — which is the whole point of the registry.\n\n       Sections are built BEFORE products, because a product resolves its own\n       section from this list. */\n      function overlay(base, extra, idKey, fields) {\n        const out = base.slice();\n        (extra || []).forEach(function (e) {\n          const id = fill(e[idKey], tok);\n          const at = out.findIndex(function (b) { return b[idKey] === id; });\n\n          /* `remove: true` drops an inherited rule for this page only. Added\n           2026-09-15 for /triamudom, which has no learning_support block at\n           all: that id had been pinned to the SECOND LINE of the why_ondemand\n           heading, so one visual block reported as two sections on desktop and\n           one on tablet/mobile (where that line is worded differently).\n           Overriding the test could only ever paper over that; the section\n           does not exist on the page.\n\n           This is why a \"just delete the override\" instinct is wrong here and\n           the primitive was needed: without it the id falls back to the SHARED\n           rule, which matches nothing on such a page, and selfCheck then warns\n           about a missing section on every load forever — turning the debug\n           console into noise, which is the one thing that makes it useless. */\n          if (e.remove) {\n            if (at >= 0) out.splice(at, 1);\n            return;\n          }\n\n          const patch = {};\n          fields.forEach(function (f) {\n            if (e[f] !== undefined) patch[f] = f === \"test\" ? e[f] : fill(e[f], tok);\n          });\n          patch[idKey] = id;\n          if (at >= 0) out[at] = Object.assign({}, out[at], patch);\n          else out.push(patch);\n        });\n        return out;\n      }\n\n      const sections = overlay(\n        SECTION_RULES.map(function (r) {\n          return {\n            test: r.test,\n            position: r.position,\n            id: fill(r.id, tok),\n            name: fill(r.name, tok),\n          };\n        }),\n        cfg.sections,\n        \"id\",\n        [\"test\", \"name\", \"position\"],\n      );\n\n      /* The products section, and the default for every product that does not\n       name its own. */\n      const courses =\n        sections.find(function (s) {\n          return /_courses$/.test(s.id);\n        }) || {};\n\n      const products = (cfg.products || [])\n        .map(function (p, i) {\n          /* Which block on the page this card sits in. Defaults to the courses\n           section, which is what every path had when there was only ever one\n           products block. `/tcasupskills` has two (packs and per-subject), and\n           without this every pack click reported as a courses-section click —\n           the pack block would have existed only in landing_section_viewed and\n           been invisible on product_clicked / product_impression. Set\n           `section: \"{exam_lc}_packs\"` on the product to place it. */\n          const own = p.section\n            ? sections.find(function (s) {\n                return s.id === fill(p.section, tok);\n              })\n            : null;\n          const sec = own || courses;\n\n          return {\n            product_no: p.no,\n            product_name: p.name,\n            product_position: p.position || i + 1,\n            match: p.match,\n            section: { section_id: sec.id, section_name: sec.name },\n            /* PDP resolves by the TRAILING ID alone — the slug is decorative\n             (verified for all 9 product ids, and for both recommended-set\n             uuids on 2026-09-02). So `slug` only makes the URL readable in\n             the address bar and on shares; if it ever drifts from the shop's\n             canonical, the link still lands on the right product. Omit `slug`\n             and the URL falls back to the short `/product/p.<id>` form.\n             `url:` still wins over both, for a fully hand-pinned link.\n\n             `set:` marks a recommended-set (a bundle) rather than a product: it\n             supplies the uuid the shop routes on AND switches the path segment.\n             It exists because a pack's displayed number is not a PDP id —\n             /product/p.9381 answers 200 and renders \"ไม่พร้อมจำหน่าย\", so the\n             failure is invisible from the link. `no` stays the number the card\n             shows, because that is what product_no reports to GA4. */\n            url:\n              p.url ||\n              SHOP_ORIGIN +\n                (p.set ? \"/recommended-set/\" : \"/product/\") +\n                (p.slug ? p.slug + \".\" : \"p.\") +\n                (p.set || p.pdp || p.no),\n          };\n        })\n        .sort(function (a, b) {\n          return b.match.length - a.match.length;\n        }); /* longest first */\n\n      const ctas = overlay(\n        CTA_RULES.map(function (r) {\n          return {\n            test: r.test,\n            /* optional per-rule text cap; body slot defaults to 60 */\n            max: r.max,\n            cta_id: fill(r.cta_id, tok),\n            cta_destination: fill(r.cta_destination, tok),\n          };\n        }),\n        cfg.ctas,\n        \"cta_id\",\n        [\"test\", \"max\", \"cta_destination\"],\n      );\n      const links = LINK_RULES.map(function (r) {\n        return Object.assign({}, r, { section_id: fill(r.section_id, tok) });\n      });\n\n      /* The FAQ section, resolved once, so the body slot can stamp\n       landing_faq_toggled without re-deriving it per click. */\n      const faqSection =\n        sections.find(function (s) {\n          return s.id === FAQ.section_id;\n        }) || {};\n\n      return {\n        faq: {\n          selector: FAQ.selector,\n          section_id: faqSection.id,\n          section_name: faqSection.name,\n        },\n        path: cfg.path,\n        exam: tok.exam,\n        exam_lc: tok.exam_lc,\n        landing_page_id: cfg.landing_page_id,\n        page_name: cfg.page_name || tok.exam_lc + \"_landing\",\n        page_title: cfg.title || tok.exam + \" Landing Page\",\n        products: products,\n        sections: sections,\n        ctas: ctas,\n        links: links,\n        courses: { section_id: courses.id, section_name: courses.name },\n      };\n    }\n\n    function send(eventName, props) {\n      if (typeof window.gtag !== \"function\") return;\n      const payload = Object.assign(\n        {},\n        LP.context,\n        {\n          page_location: location.href,\n          page_title:\n            LP.page.page_title /* document.title is empty here — see doc §1 */,\n        },\n        props || {},\n      );\n      if (DEBUG) console.log(\"[lp]\", eventName, payload);\n      window.gtag(\"event\", eventName, payload);\n    }\n\n    /* Body slot subscribes here. Replays the current page immediately, then\n     fires again on every client-side route change. */\n    function onRoute(cb) {\n      routeSubscribers.push(cb);\n      if (LP.page) {\n        try {\n          cb(LP.page);\n        } catch (e) {\n          console.error(\"[lp]\", e);\n        }\n      }\n    }\n\n    function applyRoute(isFirst) {\n      LP.page = buildPage(resolvePage(location.pathname));\n\n      LP.context = Object.assign(\n        {},\n        BASE_CONTEXT,\n        {\n          page_name: LP.page.page_name,\n          landing_page_id: LP.page.landing_page_id,\n        },\n        campaign,\n      );\n      if (clickIdKey) {\n        LP.context.click_id = campaign[clickIdKey];\n        LP.context.click_id_source = CLICK_ID_SOURCE[clickIdKey];\n      }\n      window.landingAnalyticsContext = LP.context; /* legacy alias */\n\n      if (isFirst) {\n        window.gtag(\"js\", new Date());\n        window.gtag(\"set\", LP.context);\n        window.gtag(\"config\", MEASUREMENT_ID, { send_page_view: false });\n        window.gtag(\"get\", MEASUREMENT_ID, \"client_id\", function (v) {\n          LP.ids.client_id = v;\n        });\n        window.gtag(\"get\", MEASUREMENT_ID, \"session_id\", function (v) {\n          LP.ids.session_id = v;\n        });\n      } else {\n        window.gtag(\"set\", LP.context);\n      }\n\n      send(\"page_view\", {});\n      routeSubscribers.forEach(function (cb) {\n        try {\n          cb(LP.page);\n        } catch (e) {\n          console.error(\"[lp]\", e);\n        }\n      });\n    }\n\n    /* Client-side navigation between campaign paths, if Figma ever does it. */\n    let lastPath = location.pathname;\n    function onNav() {\n      if (location.pathname === lastPath) return;\n      lastPath = location.pathname;\n      applyRoute(false);\n    }\n    [\"pushState\", \"replaceState\"].forEach(function (m) {\n      const orig = history[m];\n      history[m] = function () {\n        const r = orig.apply(this, arguments);\n        onNav();\n        return r;\n      };\n    });\n    addEventListener(\"popstate\", onNav);\n\n    applyRoute(true); /* earliest possible page_view; needs no DOM */\n  })();\n</script>\n","customCodeBodyStart":"<script>\n/* =========================================================================\n * Landing campaign analytics — BODY slot (site-wide).\n * Owns every DOM interaction: click delegation (CTA / product / outbound),\n * product impressions, section views, and the config-vs-DOM drift check.\n * Requires window.LP from the HEAD slot.\n * Reference: docs/architecture/landing-campaign-analytics.md\n * ====================================================================== */\n(() => {\n  const LP = window.LP;\n  if (!LP) {\n    console.error(\"[lp] head-slot script missing — body slot cannot run\");\n    return;\n  }\n  if (window.__lpBodyBooted) return;\n  window.__lpBodyBooted = true;\n\n  const norm = LP.util.norm;\n  const lc = LP.util.lc;\n  const clamp = LP.util.clamp;\n\n  let PAGE = null;\n  let observed = new WeakSet();\n  let firedProducts = new Set();\n  let firedSections = new Set();\n\n  /* ---------------- clicks ---------------- */\n\n  function openUrl(url) {\n    const opened = window.open(url, \"_blank\");\n    if (opened) opened.opener = null; else location.assign(url);\n  }\n\n  function classifyLink(el) {\n    const text = norm(el.innerText);\n    let url = el instanceof HTMLAnchorElement ? el.href : el.getAttribute(\"href\") || \"\";\n\n    const rule = PAGE.links.find(function (r) {\n      /* textTest, not equality — the two \"other products\" links differ in\n         wording between header and courses section (see head.html) */\n      if (r.textTest) return r.textTest.test(text);\n      if (!url) return false;\n      let u;\n      try { u = new URL(url, location.href); } catch (e) { return false; }\n      return (r.host && r.host.test(u.hostname)) || (r.path && r.path.test(u.pathname));\n    });\n\n    /* Figma role-links expose no URL in the DOM; the rule supplies it. */\n    if (!url && rule && rule.fallbackUrl) url = rule.fallbackUrl;\n    if (!url) return null;\n\n    const u = new URL(url, location.href);\n    const inHeader = Boolean(el.closest(\"header, nav, [role='navigation']\"));\n\n    return {\n      link_id: rule\n        ? (rule.textTest ? (inHeader ? \"header_\" : \"courses_\") + rule.id : rule.id)\n        : \"external_link\",\n      link_url: clamp(u.href, 100),        /* GA4 param values cap at 100 chars */\n      link_domain: u.hostname,\n      link_text: clamp(text, 100),\n      section_id: inHeader ? \"header\" : (rule ? rule.section_id : \"other\"),\n      link_position: rule ? rule.position : null\n    };\n  }\n\n  /* The hero CTA is a plain <p> nested in six <div>s — no <a>, no role — so\n     gating CTA detection on closest(\"a, button, [role=button], [role=link]\")\n     means landing_cta_clicked can NEVER fire. Measured on all three paths\n     2026-08-21 (`hasInteractiveAncestor: false`), and corroborated by zero\n     landing_cta_clicked rows in BigQuery. So: match the CTA before the\n     interactive gate, walking up to 4 ancestors, with a text-length cap so a\n     whole section can never match. Fires at depth 1 on all three paths. */\n  function ctaFor(el) {\n    let node = el;\n    let depth = 0;\n    while (node && depth++ < 4) {\n      const t = norm(node.innerText);\n      if (t) {\n        /* The cap is per rule (default 60) because ctaFor only walks UP: a\n           label nested inside a wrapper whose own text is the whole card is\n           unreachable at 60, so clicking the wrapper's padding fired nothing\n           while clicking the label worked — one visible button, two outcomes.\n           Raising it globally instead would let a whole section match the\n           prefix-anchored hero rule, which is what the cap is for. */\n        const hit = PAGE.ctas.find(function (c) {\n          return t.length <= (c.max || 60) && c.test.test(t);\n        });\n        if (hit) return { cta: hit, label: t };\n      }\n      node = node.parentElement;\n    }\n    return null;\n  }\n\n  /* ---------------- FAQ accordion ----------------\n     The FAQ items were the largest untracked surface on the site: 24 of them\n     across the four registered paths, every one firing nothing (a click matched\n     no CTA, no product, and — having no href — no link rule either, so\n     classifyLink returned null and the handler simply returned).\n\n     They need their own event rather than a new cta_id: expanding an answer is\n     not a call to action and carries different fields (which question, and\n     whether it opened or closed). See doc §5.1. */\n  function faqItemFor(el) {\n    if (!PAGE.faq || !PAGE.faq.selector) return null;\n    const btn = el.closest(PAGE.faq.selector);\n    if (!btn) return null;\n    const all = Array.from(document.querySelectorAll(PAGE.faq.selector));\n    const idx = all.indexOf(btn);\n    if (idx < 0) return null;\n    return { el: btn, position: idx + 1 };\n  }\n\n  /* Open/close is not readable from the DOM: there is no aria-expanded, no\n     <details>, and the class names are hashed per build. The one stable signal\n     is that the answer is revealed INSIDE the button, so its text GROWS on\n     expand (measured 38 → 145 chars). So measure it across a frame rather than\n     guess from a length threshold — a threshold would have to encode how long a\n     question is, which is per item and per page. */\n  function sendFaq(item) {\n    const before = norm(item.el.innerText);\n    const question = clamp(before.split(\"?\")[0] + (before.includes(\"?\") ? \"?\" : \"\"), 100);\n\n    window.requestAnimationFrame(function () {\n      window.setTimeout(function () {\n        const after = norm(item.el.innerText);\n        LP.send(\"landing_faq_toggled\", {\n          section_type: \"landing_page\",\n          section_id: PAGE.faq.section_id,\n          section_name: PAGE.faq.section_name,\n          faq_position: item.position,\n          /* the question alone when collapsed; on collapse the pre-click text\n             holds question + answer, so prefer the shorter of the two reads */\n          faq_question: clamp(after.length < before.length ? after : question, 100),\n          faq_action:\n            after.length > before.length\n              ? \"expand\"\n              : after.length < before.length\n                ? \"collapse\"\n                : \"unknown\"\n        });\n      }, 0);\n    });\n  }\n\n  /* Which product card a click belongs to.\n     The innermost enclosing a/[role=link] is USUALLY the card, but not always:\n     a card's \"ดูรายละเอียด\" button can itself be a role=link whose own text is\n     just that label, in which case the innermost match is the button and the\n     card is one level out. Measured 2026-09-15 on /tpat3allcourses, where the\n     five pack cards have exactly that shape and the three course cards above\n     them do not — both on one page, as with the two card mechanics on\n     /tcasupskills.\n\n     WHY the shape differs within one page, from the site owner (2026-09-15):\n     a detail button that STILL HAS its own Figma link renders as its own\n     div[role=link]; once the link is removed the button becomes plain text\n     inside the card and closest() reaches the card by itself. The owner has\n     been removing those button links deliberately — a click on the button and\n     a click on the card should go to the same place, and one card should hold\n     one destination rather than two that can drift apart. Every other path is\n     done; the /tpat3allcourses packs block is the last one not yet done, which\n     is why it is the only place this helper does any work.\n\n     So the direction of travel is that this branch goes inert. Keep it anyway:\n     it costs one closest() call on clicks that matched nothing, and it catches\n     any future card authored with the link still on its button — which is the\n     default when a card is duplicated.\n\n     Before this, a click on one of those five fired NOTHING and\n     fell through to Figma's own link: it reached the right PDP, but with no\n     campaign params and no lp_cid/lp_sid/lp_src, so the click was invisible to\n     analytics AND broke the attribution chain into the shop — the same defect\n     as the courses-section \"other products\" link on 2026-08-21.\n\n     Walk out ONE level only, and only when the inner element matched nothing:\n     a card nested inside another card does not occur, and an unbounded walk\n     would let any stray role=link inherit a neighbouring card's product.\n     selfCheck has held this same \"inner button of a card\" concept since\n     2026-08-21; this is the click path catching up with it.\n\n     Measured to be inert on every other path: /tpat1, /tpat3, /tgat,\n     /tcasupskills and /triamudom render ZERO standalone \"ดูรายละเอียด\"\n     role=links, so `inner` matches a product there and this branch is never\n     reached. */\n  function cardFor(origin, interactive) {\n    const productIn = function (el) {\n      const t = lc(el.innerText);\n      return PAGE.products.find(function (p) { return t.includes(lc(p.match)); });\n    };\n\n    const inner = origin.closest(\"a, [role='link']\") || interactive;\n    const innerProduct = productIn(inner);\n    if (innerProduct) return { card: inner, product: innerProduct };\n\n    const outer = inner.parentElement &&\n      inner.parentElement.closest(\"a, [role='link']\");\n    const outerProduct = outer && productIn(outer);\n    if (outerProduct) return { card: outer, product: outerProduct };\n\n    return { card: inner, product: null };\n  }\n\n  document.addEventListener(\"click\", function (event) {\n    if (!PAGE) return;\n\n    const origin = event.target instanceof Element\n      ? event.target\n      : event.target && event.target.parentElement;\n    if (!origin) return;\n\n    const cta = ctaFor(origin);\n    if (cta) {\n      LP.send(\"landing_cta_clicked\", {\n        cta_id: cta.cta.cta_id,\n        cta_label: clamp(cta.label, 100),\n        cta_destination: cta.cta.cta_destination\n      });\n      return;\n    }\n\n    const interactive = origin.closest(\"a, button, [role='button'], [role='link']\");\n    if (!interactive) return;\n\n    /* Products are scoped to the resolved page, so a match string can never\n       bleed across campaigns (the 2026-08-21 /tpat3 → TPAT1 PDP bug). */\n    const resolved = cardFor(origin, interactive);\n    const card = resolved.card;\n    const product = resolved.product;\n\n    if (!product) {\n      /* Before the link fallback: an FAQ button has no href, so classifyLink\n         returns null and the click would fall out of the handler entirely —\n         which is exactly how these went unmeasured. Never preventDefault here:\n         Figma owns the expand/collapse. */\n      const faq = faqItemFor(origin);\n      if (faq) {\n        sendFaq(faq);\n        return;\n      }\n\n      const link = classifyLink(interactive);\n      if (!link) return;\n      LP.send(\"outbound_link_clicked\", link);\n\n      const decorated = LP.decorateOutboundUrl(link.link_url);\n      if (interactive instanceof HTMLAnchorElement && interactive.getAttribute(\"href\")) {\n        /* Real anchor: rewrite href and let the browser navigate natively, so\n           target/UX is preserved and GA4's cross-domain linker can add _gl. */\n        interactive.href = decorated;\n      } else {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        openUrl(decorated);\n      }\n      return;\n    }\n\n    const label = norm(origin.closest(\"p, span\") && origin.closest(\"p, span\").innerText);\n\n    /* Prefer a real href when Figma provides one, so the design wins and the\n       registry URL is only a fallback — the two then cannot drift apart\n       (§9 P1). Both shapes occur, and as of 2026-09-02 they occur on the SAME\n       page: /tcasupskills renders its two pack cards as real <a href> to\n       /recommended-set/… and its six per-subject cards as div[role=link] with\n       no href at all, which is all the older paths have. Hence the alternation\n       — with only /product/ here, a real pack href was discarded in favour of\n       the registry's, quietly reintroducing the drift this check prevents. */\n    const cardHref = card instanceof HTMLAnchorElement &&\n      /\\/(product|recommended-set)\\//.test(card.getAttribute(\"href\") || \"\")\n      ? card.href : null;\n    const dest = LP.decorateOutboundUrl(cardHref || product.url);\n\n    event.preventDefault();\n    event.stopImmediatePropagation();\n\n    LP.send(\"product_clicked\", Object.assign({\n      product_no: product.product_no,\n      product_name: product.product_name,\n      product_position: product.product_position,\n      section_type: \"landing_page\",\n      click_target: label === \"ดูรายละเอียด\" ? \"detail_cta\" : \"card\",\n      /* destination_url omitted: the decorated PDP URL exceeded GA4's 100-char\n         param limit and was silently truncated. The PDP's own page_location\n         records where the user actually landed. */\n      destination_domain: new URL(dest).hostname,\n      is_personalized: false\n      /* the card's OWN section, not the page's single products section: a page\n         can have more than one products block (packs vs per-subject on\n         /tcasupskills), and PAGE.courses would report both as the latter.\n         Resolved in the head; falls back to PAGE.courses there. */\n    }, product.section || PAGE.courses));\n\n    openUrl(dest);\n  }, true);\n\n  /* ------------- viewability: >=50% visible, held 1s, once per route ------------- */\n\n  function observeViewableOnce(el, onViewed) {\n    if (!el || observed.has(el)) return;\n    observed.add(el);\n\n    let dwell = null;\n    let qualified = false;\n\n    const io = new IntersectionObserver(function (entries) {\n      const entry = entries[0];\n      qualified = entry.isIntersecting && entry.intersectionRatio >= 0.5;\n\n      if (qualified && dwell === null) {\n        dwell = window.setTimeout(function () {\n          dwell = null;\n          if (!qualified) return;\n          io.disconnect();\n          onViewed();\n        }, 1000);\n      }\n      if (!qualified && dwell !== null) {\n        window.clearTimeout(dwell);\n        dwell = null;\n      }\n    }, { threshold: [0, 0.5, 1] });\n\n    io.observe(el);\n  }\n\n  function scan() {\n    if (!PAGE) return;\n\n    const links = Array.from(document.querySelectorAll(\"a, [role='link']\"));\n    PAGE.products.forEach(function (product) {\n      links.filter(function (el) { return lc(el.innerText).includes(lc(product.match)); })\n        .forEach(function (el) {\n          observeViewableOnce(el, function () {\n            if (firedProducts.has(product.product_no)) return;\n            firedProducts.add(product.product_no);\n            LP.send(\"product_impression\", Object.assign({\n              product_no: product.product_no,\n              product_name: product.product_name,\n              product_position: product.product_position,\n              section_type: \"landing_page\",\n              is_personalized: false\n            }, product.section || PAGE.courses));\n          });\n        });\n    });\n\n    /* Figma emits headings as h1 except FAQ, which is an h4 on every path — so\n       the selector below must stay a full h1..h6 sweep, not a shortcut to h1.\n       /tpat1|/tpat3|/tgat also split a heading per line (\"ติว TPAT1\" +\n       \"กับ OnDemand\"); /tcasupskills does not. Re-measured 2026-09-02: the\n       per-breakpoint duplicate copies are gone, but keep the dedupe by\n       section_id — it is what makes both facts harmless either way. */\n    const headings = Array.from(\n      document.querySelectorAll(\"h1, h2, h3, h4, h5, h6, [role='heading']\")\n    );\n    PAGE.sections.forEach(function (section) {\n      if (firedSections.has(section.id)) return;\n      headings.filter(function (el) { return section.test.test(norm(el.innerText)); })\n        .forEach(function (el) {\n          observeViewableOnce(el, function () {\n            if (firedSections.has(section.id)) return;\n            firedSections.add(section.id);\n            LP.send(\"landing_section_viewed\", {\n              section_type: \"landing_page\",\n              section_id: section.id,\n              section_name: section.name,\n              section_position: section.position\n            });\n          });\n        });\n    });\n  }\n\n  /* ------------- drift check (?lp_debug=1) -------------\n   * A card with no config entry is not merely untracked: the click falls\n   * through to Figma's own link, which on /tpat3 and /tgat points at the wrong\n   * course (§9). So an unmatched card is a mis-sold click. */\n  function selfCheck() {\n    const links = Array.from(document.querySelectorAll(\"a, [role='link']\"));\n\n    PAGE.products.forEach(function (p) {\n      const present = links.some(function (el) { return lc(el.innerText).includes(lc(p.match)); });\n      if (!present) console.error(\"[lp] configured product not found in DOM:\",\n        p.product_no, p.match);\n    });\n\n    PAGE.products.forEach(function (a) {\n      PAGE.products.forEach(function (b) {\n        if (a !== b && lc(b.match).includes(lc(a.match)))\n          console.error(\"[lp] ambiguous match:\", a.match, \"is a substring of\", b.match);\n      });\n    });\n\n    /* Every product card carries the detail CTA, so a role=link with that label\n       and no matching product looks unconfigured. But the detail button is\n       ITSELF a role=link nested inside the card, and it only contains the label\n       — which produced four false alarms per page on 2026-08-21. So ignore any\n       element whose enclosing role=link does match a configured product. */\n    const matchesAProduct = function (text) {\n      const t = lc(text);\n      return PAGE.products.some(function (p) { return t.includes(lc(p.match)); });\n    };\n    links.forEach(function (el) {\n      const t = lc(el.innerText);\n      if (!t.includes(\"ดูรายละเอียด\")) return;\n      if (matchesAProduct(t)) return;                       /* it is a configured card */\n      const outer = el.parentElement && el.parentElement.closest(\"a, [role='link']\");\n      if (outer && matchesAProduct(outer.innerText)) return; /* inner button of one */\n      console.error(\"[lp] card with no config entry (falls through to Figma's link):\",\n        clamp(norm(el.innerText), 80));\n    });\n\n    const headings = Array.from(\n      document.querySelectorAll(\"h1, h2, h3, h4, h5, h6, [role='heading']\")\n    );\n    PAGE.sections.forEach(function (s) {\n      if (!headings.some(function (el) { return s.test.test(norm(el.innerText)); }))\n        console.warn(\"[lp] no heading matched section:\", s.id);\n    });\n\n    /* Every path has an FAQ, so zero matches means the selector has drifted and\n       landing_faq_toggled has gone silently to zero — the state these items\n       were already in before 2026-09-02, undetected. Measured counts that day:\n       7 on /tcasupskills, 6 on /tpat1 and /tgat, 5 on /tpat3. */\n    if (PAGE.faq && PAGE.faq.selector) {\n      const n = document.querySelectorAll(PAGE.faq.selector).length;\n      if (!n)\n        console.error(\"[lp] no FAQ items matched\", PAGE.faq.selector,\n          \"— landing_faq_toggled cannot fire\");\n    }\n\n    /* An interactive element that produces NO event is the failure this whole\n       section exists to catch, and it is invisible on the page. Report the\n       count so a publish check is a number, not an impression. */\n    const dead = Array.from(\n      document.querySelectorAll(\"a, button, [role='button'], [role='link']\")\n    ).filter(function (el) {\n      if (ctaFor(el)) return false;\n      /* Same resolution the click handler uses, or this count disagrees with\n         what actually fires — it reported five dead detail buttons on\n         /tpat3allcourses that the handler now tracks correctly. */\n      if (cardFor(el, el).product) return false;\n      if (faqItemFor(el)) return false;\n      return !classifyLink(el);\n    });\n    if (dead.length)\n      console.warn(\"[lp] \" + dead.length + \" interactive element(s) fire no event:\",\n        dead.map(function (el) { return clamp(norm(el.innerText), 40) || \"(empty)\"; }));\n  }\n\n  /* ---------------- lifecycle ---------------- */\n\n  function whenReady(fn) {\n    if (document.readyState === \"loading\")\n      document.addEventListener(\"DOMContentLoaded\", fn, { once: true });\n    else fn();\n  }\n\n  LP.onRoute(function (page) {\n    PAGE = page;\n    observed = new WeakSet();\n    firedProducts = new Set();\n    firedSections = new Set();\n    whenReady(function () {\n      scan();\n      if (LP.debug) window.setTimeout(selfCheck, 2000);   /* after async render */\n    });\n  });\n\n  /* Figma renders asynchronously — rescan on mutation rather than polling. */\n  let rescan;\n  new MutationObserver(function () {\n    window.clearTimeout(rescan);\n    rescan = window.setTimeout(scan, 300);\n  }).observe(document.documentElement, { childList: true, subtree: true });\n})();\n</script>\n","faviconFilename":"dd1ed48f7bd4f77710b395b9897c968b0338c831.png","socialImageFilename":"dd1ed48f7bd4f77710b395b9897c968b0338c831.png","labs":{"E5FBBA911B2B7A09E649D4BE6CDF8591EAEFC881":false}},"sourceCodeHash":"35f6d297ebb4463deac6725a42542bf91b6ae283"}