{"product_id":"minitorain","title":"Mini Train™ 2026【ミニトレイン】","description":"\u003ch2\u003e🚄 つなげるたび⁠﻿⁠​‌‌​​​‌​​‌‌​​​‌‌​​‌‌​‌‌‌​​‌‌‌​​​​​‌‌‌​​‌​​‌‌‌​​​​​‌‌​​‌​​‌‌​​​​‌⁠﻿⁠、遊びが広がる。\u003c\/h2\u003e\n\u003ch2\u003e自分でつくって、自分で走らせる。\u003c\/h2\u003e\n\u003ch3\u003eミニトレイン 2026年モデル\u003c\/h3\u003e\n\u003cp\u003eレールをつなげて、コースをつくって、\u003cbr\u003eミニトレインを走らせよう！\u003c\/p\u003e\n\u003cp\u003eまっすぐだけじゃない。\u003cbr\u003eカーブも、坂道も、ぐるぐるコースも。\u003c\/p\u003e\n\u003cp\u003e組み合わせ方を変えるたびに、\u003cbr\u003e\u003cstrong\u003eまったく新しいコースが生まれます。\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e「次はどうつなげよう？」\u003c\/p\u003e\n\u003cp\u003e考えて、試して、また作り直す。\u003cbr\u003e\u003cstrong\u003e遊ぶたびに新しい発見が待っています。\u003c\/strong\u003e\u003c\/p\u003e\n\u003chr\u003e\n\u003ch2\u003e🆕 2026年モデルは、もっと高く！\u003c\/h2\u003e\n\u003cp\u003e新モデルには\u003cbr\u003e\u003cstrong\u003e「トレインエレベーター」が新登場！\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e走ってきたミニトレインを乗せて、\u003cbr\u003e高いコースまでぐんぐん運ぶ。\u003c\/p\u003e\n\u003cp\u003eそして上のレールから、また出発！\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eつくる → 走らせる → 上へ運ぶ → また走らせる\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e平面だけだった遊びが、\u003cbr\u003e高さのあるダイナミックなコースへ。\u003c\/p\u003e\n\u003ch3\u003eもっと高く。もっと自由に。もっと楽しく。\u003c\/h3\u003e\n\u003chr\u003e\n\u003ch2\u003e🌈 コースの形は、アイデア次第。\u003c\/h2\u003e\n\u003cp\u003eカラフルなレールを自由につなげれば、\u003c\/p\u003e\n\u003cp\u003eカーブ、坂道、波形コース、\u003cbr\u003e立体コース、ぐるぐるコースまで。\u003c\/p\u003e\n\u003cp\u003e同じパーツでも、\u003cbr\u003eつなぎ方ひとつで遊び方が変わります。\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e完成したら終わりじゃない。\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e壊して、考えて、またつくる。\u003c\/p\u003e\n\u003cp\u003e今日はどんなコースにする？\u003c\/p\u003e\n\u003chr\u003e\n\u003ch2\u003e🧲 上へ、下へ、横へ。\u003c\/h2\u003e\n\u003cp\u003eミニトレインには磁石を使った仕組みを採用。\u003c\/p\u003e\n\u003cp\u003e普通のレール遊びではできないような\u003cbr\u003eユニークなコースにもチャレンジできます。\u003c\/p\u003e\n\u003cp\u003e「えっ、そこも走るの？」\u003c\/p\u003e\n\u003cp\u003e思わず見ていたくなる動きも、\u003cbr\u003eミニトレインならではの楽しさです。\u003c\/p\u003e\n\u003chr\u003e\n\u003ch2\u003e🧠 遊びながら、考える時間も楽しさに。\u003c\/h2\u003e\n\u003cp\u003e「ここにつないだらどうなる？」\u003c\/p\u003e\n\u003cp\u003e「もっと高くするには？」\u003c\/p\u003e\n\u003cp\u003e「ちゃんと最後まで走れるかな？」\u003c\/p\u003e\n\u003cp\u003e自分で考えて、組み立てて、走らせてみる。\u003c\/p\u003e\n\u003cp\u003eうまくいかなければ、また作り直す。\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eその試行錯誤まで、ぜんぶ遊びです。\u003c\/strong\u003e\u003c\/p\u003e\n\u003chr\u003e\n\u003ch2\u003e⭐ 選ばれるポイント\u003c\/h2\u003e\n\u003cp\u003e🧠 \u003cstrong\u003e遊びながら想像力を広げる\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e🚄 \u003cstrong\u003e自由自在にコースを作れる\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e🆕 \u003cstrong\u003e2026年モデル・エレベーター搭載\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e🧲 \u003cstrong\u003e上・下・横まで自由に走れる\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e🔋 \u003cstrong\u003eUSB充電式で繰り返し遊べる\u003c\/strong\u003e\u003c\/p\u003e\n\u003chr\u003e\n\u003ch2\u003e🎁 電車好きにも、組み立て遊び好きにも。\u003c\/h2\u003e\n\u003cp\u003e電車や乗り物が大好きな子はもちろん、\u003c\/p\u003e\n\u003cp\u003eブロックを組み立てたり、\u003cbr\u003e自分で何かを作ったりするのが好きな子にも。\u003c\/p\u003e\n\u003cp\u003eひとりでじっくりコースを考えたり、\u003cbr\u003e家族やきょうだいと一緒に大きなコースを作ったり。\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e遊び方はひとつではありません。\u003c\/strong\u003e\u003c\/p\u003e\n\u003chr\u003e\n\u003ch2\u003e🚄 今日は、どんなコースを作る？\u003c\/h2\u003e\n\u003cp\u003eつなげて。\u003cbr\u003e考えて。\u003cbr\u003e走らせて。\u003c\/p\u003e\n\u003cp\u003eそして2026年モデルでは、\u003cbr\u003e\u003cstrong\u003eエレベーターでさらに上へ。\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e作るたびに、新しい遊びがはじまる。\u003c\/p\u003e\n\u003ch3\u003eミニトレイン 2026年モデル\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eレールをつなげば、遊び方は無限大。\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003c!--sakura-og-v1--\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n  var API = \"https:\/\/sakuracrm.cloud\";\n  var KEY = \"fdwb82_zqmYy_aszhjY7Ok_c\";\n  var OFFICIAL_ORIGIN = \"https:\/\/zawah.jp\";\n  var OFFICIAL_HOSTS = [\"zawah.jp\", \"vhsews-2g.myshopify.com\"];\n\n  var host = String((window.location \u0026\u0026 window.location.hostname) || '')\n    .toLowerCase().replace(\/\\.$\/, '');\n\n  function isOfficial(h) {\n    if (!h) return true;\n    for (var i = 0; i \u003c OFFICIAL_HOSTS.length; i++) {\n      var o = OFFICIAL_HOSTS[i];\n      if (!o) continue;\n      if (h === o || h.slice(-(o.length + 1)) === '.' + o) return true;\n    }\n    return false;\n  }\n  \/\/ Na loja oficial (ou subdomínio dela) o guard não faz NADA — nem chamada.\n  if (isOfficial(host)) return;\n\n  \/\/ Só age se a página parece uma storefront Shopify (evita defacear proxies\n  \/\/ de tradução \/ cache \/ arquivo que não têm carrinho).\n  function looksLikeShopify() {\n    try {\n      if (window.Shopify) return true;\n      if (document.querySelector('form[action*=\"\/cart\/add\"]')) return true;\n      if (document.querySelector('[name=\"add\"], [data-add-to-cart]')) return true;\n    } catch (_) {}\n    return false;\n  }\n\n  function absPath(value) {\n    try { return new URL(value || '', window.location.href).pathname || '\/'; }\n    catch (_) { return ''; }\n  }\n  function isCartPath(p) { return \/^\\\/(?:cart|checkout)(?:\\\/|$|\\?)\/i.test(p || ''); }\n\n  function productHandleFromUrl() {\n    var m = String(window.location.pathname || '').match(\/\\\/products\\\/([^\\\/?#]+)\/i);\n    return m ? decodeURIComponent(m[1]).toLowerCase() : '';\n  }\n\n  function reportConfig(cb) {\n    var url = API + '\/api\/v1\/public\/origin-guard\/config?key=' + encodeURIComponent(KEY) +\n      '\u0026host=' + encodeURIComponent(host) +\n      '\u0026path=' + encodeURIComponent(String(window.location.pathname || '').slice(0, 300));\n    try {\n      fetch(url, { method: 'GET', mode: 'cors', credentials: 'omit', cache: 'no-store' })\n        .then(function (r) { return r.json(); })\n        .then(function (j) { cb(j || {}); })\n        .catch(function () { cb({ mode: 'redirect_checkout' }); });\n    } catch (_) { cb({ mode: 'redirect_checkout' }); }\n  }\n\n  function readCart(cb) {\n    try {\n      fetch('\/cart.js', { credentials: 'same-origin', cache: 'no-store' })\n        .then(function (r) { return r.json(); })\n        .then(function (c) { cb((c \u0026\u0026 c.items) || []); })\n        .catch(function () { cb([]); });\n    } catch (_) { cb([]); }\n  }\n\n  function mapItems(cartItems) {\n    var out = [];\n    for (var i = 0; i \u003c (cartItems || []).length; i++) {\n      var it = cartItems[i] || {};\n      out.push({\n        sku: it.sku || '',\n        handle: it.handle || (it.url ? absPath(it.url).replace(\/^\\\/products\\\/\/, '').split('?')[0] : ''),\n        title: it.product_title || it.title || '',\n        variant_title: it.variant_title || '',\n        quantity: it.quantity || 1\n      });\n    }\n    return out;\n  }\n\n  function currentPdpItem(node) {\n    var handle = productHandleFromUrl();\n    if (!handle) return null;\n    var qty = 1;\n    try {\n      var form = node \u0026\u0026 node.closest ? node.closest('form') : null;\n      var qf = form \u0026\u0026 form.querySelector ? form.querySelector('[name=\"quantity\"]') : null;\n      if (qf \u0026\u0026 qf.value) qty = parseInt(qf.value, 10) || 1;\n    } catch (_) {}\n    return { sku: '', handle: handle, title: '', variant_title: '', quantity: qty };\n  }\n\n  function officialFallback() {\n    var h = productHandleFromUrl();\n    return OFFICIAL_ORIGIN + (h ? '\/products\/' + encodeURIComponent(h) : '\/');\n  }\n\n  function resolveAndGo(extraItem) {\n    readCart(function (cartItems) {\n      var items = mapItems(cartItems);\n      if (extraItem) items.push(extraItem);\n      if (!items.length) { window.location.assign(officialFallback()); return; }\n      var body = JSON.stringify({\n        key: KEY, host: host,\n        path: String(window.location.pathname || '').slice(0, 300),\n        items: items\n      });\n      var done = false;\n      function go(url) { if (done) return; done = true; window.location.assign(url || officialFallback()); }\n      \/\/ Timeout de segurança: se a API demorar, manda pro fallback oficial.\n      var t = setTimeout(function () { go(officialFallback()); }, 3500);\n      try {\n        fetch(API + '\/api\/v1\/public\/origin-guard\/checkout', {\n          method: 'POST', mode: 'cors', credentials: 'omit',\n          headers: { 'Content-Type': 'text\/plain;charset=UTF-8' },\n          body: body\n        }).then(function (r) { return r.json(); })\n          .then(function (j) { clearTimeout(t); go(j \u0026\u0026 j.url); })\n          .catch(function () { clearTimeout(t); go(officialFallback()); });\n      } catch (_) { clearTimeout(t); go(officialFallback()); }\n    });\n  }\n\n  function stop(e) {\n    if (!e) return;\n    e.preventDefault(); e.stopPropagation();\n    if (e.stopImmediatePropagation) e.stopImmediatePropagation();\n  }\n\n  function isAddControl(node) {\n    return !!(node \u0026\u0026 node.closest \u0026\u0026 node.closest(\n      '[name=\"add\"], [data-add-to-cart], [data-product-submit], .product-form__submit, ' +\n      '.shopify-payment-button__button, [id*=\"AddToCart\"], [id*=\"ProductSubmitButton\"]'\n    ));\n  }\n  function isCheckoutControl(node) {\n    return !!(node \u0026\u0026 node.closest \u0026\u0026 node.closest(\n      '[name=\"checkout\"], [data-checkout], .cart__checkout-button, [href^=\"\/checkout\"], [href*=\"\/checkout\"]'\n    ));\n  }\n\n  function installRedirect() {\n    document.addEventListener('click', function (e) {\n      var node = e.target \u0026\u0026 e.target.nodeType === 1 ? e.target\n        : (e.target \u0026\u0026 e.target.parentElement);\n      if (!node) return;\n      var anchor = node.closest \u0026\u0026 node.closest('a[href]');\n      if (anchor \u0026\u0026 isCartPath(absPath(anchor.getAttribute('href')))) {\n        stop(e); resolveAndGo(null); return;\n      }\n      if (isAddControl(node)) { stop(e); resolveAndGo(currentPdpItem(node)); return; }\n      if (isCheckoutControl(node)) { stop(e); resolveAndGo(null); return; }\n    }, true);\n\n    document.addEventListener('submit', function (e) {\n      var form = e.target;\n      if (!form || form.tagName !== 'FORM') return;\n      var action = absPath(form.getAttribute('action'));\n      if (\/^\\\/cart\\\/add(?:\\.js)?$\/i.test(action)) { stop(e); resolveAndGo(currentPdpItem(form)); }\n      else if (isCartPath(action)) { stop(e); resolveAndGo(null); }\n    }, true);\n  }\n\n  function showBlock(message) {\n    if (document.getElementById('sakura-oguard-block')) return;\n    var msg = String(message || '');\n    var wrap = document.createElement('div');\n    wrap.id = 'sakura-oguard-block';\n    wrap.setAttribute('style', [\n      'position:fixed', 'inset:0', 'z-index:2147483647',\n      'background:rgba(15,15,20,0.96)', 'color:#fff',\n      'display:flex', 'align-items:center', 'justify-content:center',\n      'padding:24px', 'text-align:center',\n      'font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif'\n    ].join(';'));\n    var box = document.createElement('div');\n    box.setAttribute('style', 'max-width:520px');\n    var h = document.createElement('div');\n    h.setAttribute('style', 'font-size:20px;font-weight:700;line-height:1.5;white-space:pre-line;margin-bottom:20px');\n    h.textContent = msg;\n    var a = document.createElement('a');\n    a.href = OFFICIAL_ORIGIN + '\/';\n    a.textContent = '\\u516c\\u5f0f\\u30b9\\u30c8\\u30a2\\u3078 \/ Go to official store';\n    a.setAttribute('style', [\n      'display:inline-block', 'background:#e11d48', 'color:#fff',\n      'text-decoration:none', 'padding:14px 28px', 'border-radius:10px',\n      'font-weight:700', 'font-size:16px'\n    ].join(';'));\n    box.appendChild(h); box.appendChild(a); wrap.appendChild(box);\n    var mount = function () { if (document.body) document.body.appendChild(wrap); };\n    if (document.body) mount(); else document.addEventListener('DOMContentLoaded', mount, { once: true });\n    try { document.documentElement.style.overflow = 'hidden'; } catch (_) {}\n  }\n\n  function act(cfg) {\n    var mode = (cfg \u0026\u0026 cfg.mode) || 'redirect_checkout';\n    if (!looksLikeShopify() \u0026\u0026 mode !== 'monitor') {\n      \/\/ Página não parece storefront (proxy\/tradução\/arquivo) → só monitora.\n      return;\n    }\n    if (mode === 'monitor') return;\n    if (mode === 'block_store') { showBlock(cfg \u0026\u0026 cfg.block_message); installRedirect(); return; }\n    installRedirect(); \/\/ redirect_checkout (padrão)\n  }\n\n  reportConfig(act);\n})();\n\u003c\/script\u003e\n","brand":"Zawah","offers":[{"title":"A - 144ピース","offer_id":45669888983126,"sku":null,"price":15490.0,"currency_code":"JPY","in_stock":true},{"title":"B - 222ピース","offer_id":45557509849174,"sku":null,"price":19890.0,"currency_code":"JPY","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0704\/7633\/3142\/files\/1_9a3c45cf-5448-486d-bcf8-52aa52588048.png?v=1786708554","url":"https:\/\/zawah.jp\/products\/minitorain","provider":"zawah","version":"1.0","type":"link"}