app/template/default/Product/detail.twig line 1

Open in your IDE?
  1. {#
  2. This file is part of EC-CUBE
  3. Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  4. http://www.ec-cube.co.jp/
  5. For the full copyright and license information, please view the LICENSE
  6. file that was distributed with this source code.
  7. #}
  8. {% extends 'default_frame.twig' %}
  9. {% set body_class = 'product_page' %}
  10. {% block stylesheet %}
  11.     {% if Product.ProductImage|length > 0 %}
  12.         {% set length_per_piece = (150 / Product.ProductImage|length) |round(2, 'floor') %}
  13.     {% endif %}
  14.     {% if Product.ProductNaireImages|length > 0 %}
  15.         {% set naire_length_per_piece = (150 / Product.ProductNaireImages|length) |round(2, 'floor') %}
  16.     {% endif %}
  17.     {% if Product.ProductGalleries|length > 0 %}
  18.         {% set gallery_length_per_piece = (150 / Product.ProductGalleries|length) |round(2, 'floor') %}
  19.     {% endif %}
  20.     {% if Product.ProductDetailImages|length > 0 %}
  21.         {% set detail_image_length_per_piece = (150 / Product.ProductDetailImages|length) |round(2, 'floor') %}
  22.     {% endif %}
  23.     <style>
  24.         {% if Product.ProductImage|length > 0 %}
  25.             .bar-item {
  26.                 width: calc({{ length_per_piece }}%);
  27.                 background-color: #E2DFD6;
  28.                 height: 2px;
  29.             }
  30.         {% endif %}
  31.         {% if Product.ProductNaireImages|length > 0 %}
  32.             .naire-bar-item {
  33.             width: calc({{ naire_length_per_piece }}%);
  34.             background-color: #E2DFD6;
  35.             height: 2px;
  36.         }
  37.         {% endif %}
  38.         {% if Product.ProductGalleries|length > 0 %}
  39.             .gallery-bar-item {
  40.                 width: calc({{ gallery_length_per_piece }}%);
  41.                 background-color: #E2DFD6;
  42.                 height: 2px;
  43.             }
  44.         {% endif %}
  45.         {% if Product.ProductDetailImages|length > 0 %}
  46.             .detail-image-bar-item{
  47.                 width: calc({{ detail_image_length_per_piece }}%);
  48.                 background-color: #E2DFD6;
  49.                 height: 2px;
  50.             }
  51.         {% endif %}
  52.         .slider .slick-list {
  53.             overflow: visible;
  54.             padding: 0;
  55.         }
  56.         .slider {
  57.             max-width: 1008px;
  58.             max-height: auto !important;
  59.         }
  60.         .slick-dots {
  61.             width: 90%;
  62.             display: flex;
  63.             align-items: center;
  64.             justify-content: center;
  65.             margin-top: -120px;
  66.             bottom: -40px !important;
  67.         }
  68.         .slider .slick-dots{
  69.             width: 100%;
  70.             display: flex;
  71.             align-items: center;
  72.             justify-content:center;
  73.         }
  74.         .slick-dots li {
  75.             list-style-type: none;
  76.             width: 80px;
  77.             height: 2px;
  78.             margin: 0;
  79.             background-color:#E2DFD6;
  80.             cursor: pointer;
  81.         }
  82.         .slick-dots li.slick-active {
  83.             background-color: #B8914B;
  84.         }
  85.         .slick-dots li button{
  86.             opacity:0;
  87.             width: 100%;
  88.         }
  89.         .slick-dotted.slick-slider{
  90.             margin-bottom: 50px;
  91.         }
  92.         .product-naire-detail__slide ,.product-spec-detail__slide .slick-dotted{
  93.             margin-bottom: 0;
  94.         }
  95.         .product-naire-detail__slide , .product-spec-detail__slide .slick-dots{
  96.             margin-bottom: 4px;
  97.         }
  98.         .slick-slider{
  99.             margin-bottom: 0;
  100.         }
  101.         .product-movie__slide .slick-list{
  102.             height:327px;
  103.         }
  104.         .product-naire-detail__slide .slick-list{
  105.             height:630px;
  106.         }
  107.         @media screen and (max-width: 768px) {
  108.             .slick-dots {
  109.                 width: 120px;
  110.                 margin: 0 auto;
  111.             }
  112.             .slick-dots li{
  113.                 width: 32px;
  114.                 height: 2px;
  115.             }
  116.             .product-naire-detail__slide .slick-list{
  117.                 height:315px;
  118.             }
  119.         }
  120.     </style>
  121. {% endblock %}
  122. {% set productOption = 'productoption' ~ productOptionId %}
  123. {% set productOptionSecond = 'productoption' ~ productOptionSecondId %}
  124. {% block javascript %}
  125.     {% if form.productoption1 is defined and form[productOption] is defined %}
  126.         <script>
  127.             $(function () {
  128.                 // ページの初期表示時にadd-cartクラスのボタンにdisabled属性を付与
  129.                 $('.add-cart').attr('disabled', true);
  130.                 // 初期状態では名入れ方法モーダルを非表示
  131.                 $('.naire-modal, .naire-modal-second, #naire-unit').hide();
  132.                 // モーダル外クリックしたときの制御
  133.                 //$('.naire-modal .naire-close, .naire-modal .naire-modal-overlay').click(function () {
  134.                 //    $('.naire-modal').fadeOut();
  135.                 //});
  136.                 $('#productoption1').on('change', function (event) {
  137.                     // 名入れ選択肢のテキストを取得
  138.                     var text = $(this).find('option:selected').text();
  139.                     $('.add-cart').attr('disabled', false);
  140.                     if (text == "なし") {
  141.                          $('.naire-modal').fadeOut();
  142.                         resetNaireMethod();
  143.                         resetNaireMethodSecond();
  144.                     } else {
  145.                         $('.naire-modal').fadeIn();
  146.                     };
  147.                 });
  148.                 var productOptionId = {{ productOptionId }};
  149.                 $(`input[name='productoption${productOptionId}']`).change(function () {
  150.                     $('.naire-modal').fadeOut();
  151.                     var value = $(this).val();
  152.                     $('#{{ form['productoption' ~ productOptionId].vars.id }}').val(value);
  153.                     $('#naire-unit').show();
  154.                     $('#naire-method').show();
  155.                     $('#naire-method .naire-method-name').text($(this).data('name'));
  156.                 });
  157.                 function resetNaireMethod() {
  158.                     $('#{{ form['productoption' ~ productOptionId].vars.id }}').val('');
  159.                     $('#naire-method').hide();
  160.                     $('#naire-method .naire-method-name').text('');
  161.                 }
  162.                 {% if form[productOptionSecond] is defined %}
  163.                     $('#naire-unit-sheets').on('change', function (event) {
  164.                         if ($(this).find('option:selected').val() == "2") {
  165.                             $('.naire-modal-second').fadeIn();
  166.                         } else if ($(this).find('option:selected').val() == "1") {
  167.                             $('#{{ form['productoption' ~ productOptionSecondId].vars.id }}').val('');
  168.                             $('#naire-method-second').hide();
  169.                             $('#naire-method-second .naire-method-second-name').text('');
  170.                         } else {
  171.                             $('.naire-modal-second').fadeOut();
  172.                         }
  173.                     });
  174.                     var productOptionSecondId = {{ productOptionSecondId }};
  175.                     $(`input[name='productoption${productOptionSecondId}']`).change(function () {
  176.                         $('.naire-modal-second').fadeOut();
  177.                         var value = $(this).val();
  178.                         $('#{{ form['productoption' ~ productOptionSecondId].vars.id }}').val(value);
  179.                         $('#naire-method-second').show();
  180.                         $('#naire-method-second .naire-method-second-name').text($(this).data('name'));
  181.                     });
  182.                     function resetNaireMethodSecond() {
  183.                         console.log("resetNaireMethodSecond");
  184.                         $('#{{ form['productoption' ~ productOptionSecondId].vars.id }}').val('');
  185.                         $('#naire-method-second, #naire-unit').hide();
  186.                         $('#naire-unit-sheets').val('');
  187.                         $('#naire-method-second .naire-method-second-name').text('');
  188.                     }
  189.                 {% endif %}
  190.             });
  191.         </script>
  192.     {% endif %}
  193.     <script>
  194.         eccube.classCategories = {{ class_categories_as_json(Product)|raw }};
  195.         // 規格2に選択肢を割り当てる。
  196.         function fnSetClassCategories(form, classcat_id2_selected) {
  197.         var $form = $(form);
  198.         var product_id = $form.find('input[name=product_id]').val();
  199.         var $sele1 = $form.find('select[name=classcategory_id1]');
  200.         var $sele2 = $form.find('select[name=classcategory_id2]');
  201.         eccube.setClassCategories($form, product_id, $sele1, $sele2, classcat_id2_selected);
  202.         }
  203.         {% if form.classcategory_id2 is defined %}fnSetClassCategories($('#form1'), {{ form.classcategory_id2.vars.value|json_encode|raw }});
  204.         {% elseif form.classcategory_id1 is defined %}
  205.         eccube.checkStock($('#form1'), {{ Product.id }}, {{ form.classcategory_id1.vars.value|json_encode|raw }}, null);{% endif %}
  206.     </script>
  207.     <script>
  208.         $(function () { // bfcache無効化
  209.             $(window).bind('pageshow', function (event) {
  210.             if (event.originalEvent.persisted) {
  211.             location.reload(true);
  212.             }
  213.             });
  214.             // Core Web Vital の Cumulative Layout Shift(CLS)対策のため
  215.             // img タグに width, height が付与されている.
  216.             // 630px 未満の画面サイズでは縦横比が壊れるための対策
  217.             // see https://github.com/EC-CUBE/ec-cube/pull/5023
  218.             $('.ec-grid2__cell').hide();
  219.             var removeSize = function () {
  220.             $('.slide-item').height('');
  221.             $('.slide-item img').removeAttr('width').removeAttr('height').removeAttr('style');
  222.             };
  223.             var slickInitial = function (slick) {
  224.             $('.ec-grid2__cell').fadeIn(1500);
  225.             var baseHeight = $(slick.target).height();
  226.             var baseWidth = $(slick.target).width();
  227.             var rate = baseWidth / baseHeight;
  228.             $('.slide-item').height(baseHeight * rate);
  229.             // 余白を削除する
  230.             // transform を使用することでCLSの影響を受けないようにする
  231.             $('.slide-item img').css({
  232.             'transform-origin': 'top left',
  233.             'transform': 'scaleY(' + rate + ')',
  234.             'transition': 'transform .1s'
  235.             });
  236.             // 正しいサイズに近くなったら属性を解除する
  237.             setTimeout(removeSize, 500);
  238.             };
  239.             $('.item_visual').on('init', slickInitial);
  240.             // リサイズ時は CLS の影響を受けないため属性を解除する
  241.             $(window).resize(removeSize);
  242.                 $('.item_visual').slick({
  243.                 dots: false,
  244.                 arrows: false,
  245.                 responsive: [
  246.                     {
  247.                         breakpoint: 768,
  248.                         settings: {
  249.                             dots: true
  250.                         }
  251.                     }
  252.                 ]
  253.             });
  254.             $('.slideThumb').on('click', function () {
  255.                 var index = $(this).attr('data-index');
  256.                 $('.item_visual').slick('slickGoTo', index, false);
  257.             })
  258.         });
  259.     </script>
  260.     <script>
  261.         $(function () {
  262.             $('.add-cart').on('click', function (event) {
  263.                 {% if form.classcategory_id1 is defined %}
  264.                     // 規格1フォームの必須チェック
  265.                     if ($('#classcategory_id1').val() == '__unselected' || $('#classcategory_id1').val() == '') {
  266.                         $('#classcategory_id1')[0].setCustomValidity('{{ 'front.product.product_class_unselected'|trans }}');
  267.                         return true;
  268.                     } else {
  269.                         $('#classcategory_id1')[0].setCustomValidity('');
  270.                     }
  271.                 {% endif %}
  272.                 {% if form.classcategory_id2 is defined %}
  273.                     // 規格2フォームの必須チェック
  274.                     if ($('#classcategory_id2').val() == '__unselected' || $('#classcategory_id2').val() == '') {
  275.                         $('#classcategory_id2')[0].setCustomValidity('{{ 'front.product.product_class_unselected'|trans }}');
  276.                         return true;
  277.                     } else {
  278.                         $('#classcategory_id2')[0].setCustomValidity('');
  279.                     }
  280.                 {% endif %}
  281.                 // 個数フォームのチェック
  282.                 if ($('#quantity').val() < 1) {
  283.                     $('#quantity')[0].setCustomValidity('{{ 'front.product.invalid_quantity'|trans }}');
  284.                     return true;
  285.                 } else {
  286.                     $('#quantity')[0].setCustomValidity('');
  287.                 }
  288.                 // 名入れオプションのチェック
  289.                 var naireOptions = $('.naire-modal-box');
  290.                 var options = naireOptions.find('label');
  291.                 var filteredOptions = options.filter(function() {
  292.                     return  $(this).text().indexOf('なし') !== -1;
  293.                 });
  294.                 var productOptionId = {{ productOptionId }}
  295.                 // productoptionの値が空の場合、商品に紐づく"なし"オプションのIDを渡す
  296.                 if( !$(`#productoption${productOptionId}`).val() ){
  297.                     $(`#productoption${productOptionId}`).val($(filteredOptions[0]).find('input').val());
  298.                 }
  299.                 // 名入れ2枚目オプションのチェック
  300.                 {% if form[productOptionSecond] is defined %}
  301.                     var naireSecondOptions = $('.naire-modal-second-box');
  302.                     var filteredSecondOptions = naireSecondOptions.find('label').filter(function() {
  303.                         return  $(this).text().indexOf('なし') !== -1;
  304.                     });
  305.                     // productOptionSecondの値が空の場合、商品に紐づく"なし"オプションのIDを渡す
  306.                     if( !$(`#productoption${productOptionSecondId}`).val() ){
  307.                         $(`#productoption${productOptionSecondId}`).val($(filteredSecondOptions[0]).find('input').val());
  308.                     }
  309.                 {% endif %}
  310.                 event.preventDefault();
  311.                 $form = $('#form1');
  312.                 $.ajax({
  313.                     url: $form.attr('action'),
  314.                     type: $form.attr('method'),
  315.                     data: $form.serialize(),
  316.                     dataType: 'json',
  317.                     beforeSend: function (xhr, settings) { // Buttonを無効にする
  318.                         $('.add-cart').prop('disabled', true);
  319.                     }
  320.                 }).done(function (data) { // レスポンス内のメッセージをalertで表示
  321.                     $.each(data.messages, function () {
  322.                         $('#ec-modal-header').text(this);
  323.                     });
  324.                     $('.ec-modal').show()
  325.                     // カートブロックを更新する
  326.                     $.ajax({url: "{{ url('block_cart') }}", type: 'GET', dataType: 'html'}).done(function (html) {
  327.                         $('.ec-headerRole__cart').html(html);
  328.                     });
  329.                 }).fail(function (data) {
  330.                     if ('responseJSON' in data && 'detail' in data.responseJSON) {
  331.                         alert(data.responseJSON.detail);
  332.                     } else {
  333.                         alert('{{ 'front.product.add_cart_error'|trans }}');
  334.                     }
  335.                     window.location.reload();
  336.                 }).always(function (data) { // Buttonを有効にする
  337.                     $('.add-cart').prop('disabled', false);
  338.                 });
  339.             });
  340.         });
  341.         $('.ec-modal-wrap').on('click', function (e) { // モーダル内の処理は外側にバブリングさせない
  342.             e.stopPropagation();
  343.         });
  344.         $('.ec-modal-overlay, .ec-modal, .ec-modal-close, .ec-inlineBtn--cancel').on('click', function () {
  345.             $('.ec-modal').hide()
  346.         });
  347.     </script>
  348.     <script type="application/ld+json">
  349.         {
  350.                 "@context": "https://schema.org/",
  351.                 "@type": "Product",
  352.                 "name": "{{ Product.name }}",
  353.                 "image": [
  354.         {% for img in Product.ProductImage %}
  355.             "{{ app.request.schemeAndHttpHost }}{{ asset(img, 'save_image') }}"
  356.             {% if not loop.last %},
  357.             {% endif %}
  358.         {% else %}
  359.             "{{ app.request.schemeAndHttpHost }}{{ asset(''|no_image_product, 'save_image') }}"
  360.         {% endfor %}
  361.         ],
  362.                 "description": "{{ Product.description_list | default(Product.description_detail) | replace({'\n': '', '\r': ''}) | slice(0,300) }}",
  363.         {% if Product.code_min %}
  364.             "sku": "{{ Product.code_min }}",
  365.         {% endif %}
  366.         "offers": {
  367.                     "@type": "Offer",
  368.                     "url": "{{ url('product_detail', {'id': Product.id}) }}",
  369.                     "priceCurrency": "{{ eccube_config.currency }}",
  370.                     "price":
  371.         {{ Product.getPrice02IncTaxMin ? Product.getPrice02IncTaxMin|number_format : 0}},
  372.                     "availability": "{{ Product.stock_find ? "InStock" : "OutOfStock" }}"
  373.                 }
  374.             }
  375.     </script>
  376.     <script>
  377.         $(document).ready(function(){
  378.             $('#question').fadeOut();
  379.             $('#NAIRE').fadeOut();
  380.         });
  381.         $('#detailNav').click(function() {
  382.             $('#detail').slideDown();
  383.             $('#NAIRE').slideUp();
  384.             $('#question').slideUp();
  385.             $(this).addClass('bg-[#F0EFEA]');
  386.             $('#naireNav').removeClass('bg-[#F0EFEA]');
  387.             $('#questionNav').removeClass('bg-[#F0EFEA]');
  388.         });
  389.         $('#naireNav').click(function() {
  390.             $('#detail').slideUp();
  391.             $('#NAIRE').slideDown();
  392.             $('#question').slideUp();
  393.             $(this).addClass('bg-[#F0EFEA]');
  394.             $('#detailNav').removeClass('bg-[#F0EFEA]');
  395.             $('#questionNav').removeClass('bg-[#F0EFEA]');
  396.         });
  397.         $('#questionNav').click(function() {
  398.             $('#detail').slideUp();
  399.             $('#NAIRE').slideUp();
  400.             $('#question').slideDown();
  401.             $(this).addClass('bg-[#F0EFEA]');
  402.             $('#detailNav').removeClass('bg-[#F0EFEA]');
  403.             $('#naireNav').removeClass('bg-[#F0EFEA]');
  404.         });
  405.     </script>
  406.     <script>
  407.         $(document).ready(function(){
  408.             $('#producer').hide();
  409.             $('#delivery').hide();
  410.         });
  411.         $('#producer_slide').click(function() {
  412.             var path = $(this).find("path");
  413.             if ( path.attr('d') == "M12 4.5v15m7.5-7.5h-15"){
  414.                 path.attr('d', 'M6 12h12');
  415.             } else {
  416.                 path.attr('d', 'M12 4.5v15m7.5-7.5h-15');
  417.             }
  418.             $('#producer').slideToggle();
  419.         });
  420.         $('#delivery_slide').click(function() {
  421.             var path = $(this).find("path");
  422.             if ( path.attr('d') == "M12 4.5v15m7.5-7.5h-15"){
  423.                 path.attr('d', 'M6 12h12');
  424.             } else {
  425.                 path.attr('d', 'M12 4.5v15m7.5-7.5h-15');
  426.             }
  427.             $('#delivery').slideToggle();
  428.         });
  429.     </script>
  430.     <script>
  431.         $(function () {
  432.             $("#share-menu-button").on('click', function() {
  433.                 $("#share-menu").fadeToggle();
  434.                 copyLinkText('リンクをコピー');
  435.             });
  436.             // メニュー以外をクリックしたらメニューを閉じる
  437.             $(document).on('click', function(event) {
  438.                 if (!$(event.target).closest('#share-menu-button').length && !$(event.target).closest('#share-menu').length) {
  439.                     $("#share-menu").fadeOut();
  440.                     copyLinkText('リンクをコピー');
  441.                 }
  442.             });
  443.         });
  444.         function copyUrl() {
  445.             const url = location.href;
  446.             navigator.clipboard.writeText(url);
  447.             copyLinkText('コピーしました');
  448.             setTimeout(function() {
  449.             copyLinkText('リンクをコピー');
  450.             }, 2000);
  451.         }
  452.         function openLineShare() {
  453.             const lineUrl = 'https://social-plugins.line.me/lineit/share?url=';
  454.             const url = location.href;
  455.             window.open(`${lineUrl}${url}`)
  456.         }
  457.         function openMail() {
  458.             const url = location.href;
  459.             const mailto = `mailto:?body=${url}`;
  460.             window.open(mailto);
  461.         }
  462.         function copyLinkText(text) {
  463.             $("#copy-link > span").text(text);
  464.         }
  465.     </script>
  466.     <script>
  467.         $(function () {
  468.             var $slide = $('.product-detail__slide');
  469.             $slide.find('img').on('click', function(event) {
  470.                 event.stopPropagation();
  471.                 event.preventDefault();
  472.             });
  473.             $slide.slick({
  474.                 infinite: true,
  475.                 slidesToShow: 1,
  476.                 slidesToScroll: 1,
  477.                 arrows: false,
  478.                 fade: true,
  479.                 dots: false,
  480.                 focusOnSelect: true,
  481.                 touchThreshold:    20,
  482.                 responsive: [
  483.                     {
  484.                         breakpoint: 768,
  485.                         settings: {
  486.                             slidesToShow: 1,
  487.                             slidesToScroll: 1,
  488.                             arrows: false,
  489.                             fade: true,
  490.                             dots:false
  491.                         }
  492.                     }
  493.                 ]
  494.             });
  495.             var $navigationParent = $('.product-detail__navigation');
  496.             $navigationParent.slick({
  497.                 infinite: true,
  498.                 slidesToShow: 5,
  499.                 touchThreshold:    20,
  500.                 swipeToSlide: true,
  501.             });
  502.             var $navigationItem = $('.product-detail__navigation .item');
  503.             $navigationItem.each(function (index) {
  504.                 $(this).attr('data-number', index);
  505.             });
  506.             $navigationItem.eq(0).addClass('current');
  507.             function updateNavigation() {
  508.                 var currentSlide = $slide.slick('slickCurrentSlide');
  509.                 $navigationItem.removeClass('current');
  510.                 $navigationItem.eq(currentSlide).addClass('current');
  511.             }
  512.             $navigationItem.on('click', function () {
  513.                 var dataIndex = $(this).attr('data-index');
  514.                 $navigationParent.slick('slickGoTo', dataIndex, false);
  515.                 $slide.slick('slickGoTo', dataIndex, false);
  516.                 $('#current-slide').text(`${dataIndex}`);
  517.                 updateNavigation();
  518.             });
  519.             $('.bar-item').on('click', function () {
  520.                 var dataIndex = $(this).attr('data-index');
  521.                 $slide.slick('slickGoTo', dataIndex, false);
  522.                 $navigationParent.slick('slickGoTo', dataIndex, false);
  523.                 updateNavigation();
  524.             });
  525.             $('.slick-dots button' ).on('click', function () {
  526.                 var tabIndex = $(this).text();
  527.                 $navigationParent.slick('slickGoTo', tabIndex - 1, false);
  528.                 $('#current-slide').text(`${tabIndex}`);
  529.             });
  530.             $('.nav-button.left').on('click', function () {
  531.                 $slide.slick('slickPrev');
  532.                 $navigationParent.slick('slickPrev');
  533.                 updateNavigation();
  534.             });
  535.             $('.nav-button.right').on('click', function () {
  536.                 $slide.slick('slickNext');
  537.                 $navigationParent.slick('slickNext');
  538.                 updateNavigation();
  539.             });
  540.             var $currentSlide = $('#current-slide');
  541.             $slide.on('afterChange', function(event, slick, currentSlide){
  542.                 $currentSlide.text(currentSlide + 1);
  543.                 var matchingElement = $('[id=bar_' + $currentSlide.text() + ']');
  544.                 matchingElement.addClass('!bg-[#B8914B]');
  545.                 matchingElement.siblings('li').removeClass('!bg-[#B8914B]');
  546.             });
  547.             function initializeGallery() {
  548.                 var $gallery = $('.product-detail__gallery');
  549.                 var $galleryNavigation = $('.product-detail__gallery-navigation .item');
  550.                 var $currentGallerySlide = $('#current-gallery-slide');
  551.                 // スライダーを初期化する前に破棄
  552.                 if ($gallery.hasClass('slick-initialized')) {
  553.                     $gallery.slick('unslick');
  554.                 }
  555.                 $gallery.slick({
  556.                     infinite: true,
  557.                     slidesToShow: 1,
  558.                     slidesToScroll: 1,
  559.                     arrows: false,
  560.                     fade: true
  561.                 });
  562.                 $galleryNavigation.each(function(index) {
  563.                     $(this).attr('data-number', index);
  564.                 });
  565.                 $galleryNavigation.eq(0).addClass('current');
  566.                 $galleryNavigation.on('click', function() {
  567.                     var number = $(this).attr('data-number');
  568.                     $gallery.slick('slickGoTo', number, false);
  569.                     updateGalleryNavigation();
  570.                 });
  571.                 $('.nav-button.left').on('click', function() {
  572.                     $gallery.slick('slickPrev');
  573.                     updateGalleryNavigation();
  574.                 });
  575.                 $('.nav-button.right').on('click', function() {
  576.                     $gallery.slick('slickNext');
  577.                     updateGalleryNavigation();
  578.                 });
  579.                 $gallery.on('afterChange', function(event, slick, currentSlide) {
  580.                     $currentGallerySlide.text(currentSlide + 1);
  581.                     var matchingElement = $('[id=bar_' + $currentGallerySlide.text() + ']');
  582.                     matchingElement.addClass('!bg-[#B8914B]');
  583.                     matchingElement.siblings('li').removeClass('!bg-[#B8914B]');
  584.                 });
  585.                 function updateGalleryNavigation() {
  586.                     var currentSlide = $gallery.slick('slickCurrentSlide');
  587.                     $galleryNavigation.removeClass('current');
  588.                     $galleryNavigation.eq(currentSlide).addClass('current');
  589.                 }
  590.             }
  591.             initializeGallery();
  592.             // セクションの表示・非表示を切り替える
  593.             const sections = [
  594.                 { addIcon: '#addIcon', removeIcon: '#removeIcon', details: '#productDetails' },
  595.                 { addIcon: '#addSpecIcon', removeIcon: '#removeSpecIcon', details: '#productSpecs' },
  596.                 { addIcon: '#addGalleryIcon', removeIcon: '#removeGalleryIcon', details: '#productGalleries', initialize: initializeGallery },
  597.                 { addIcon: '#addNoteIcon', removeIcon: '#removeNoteIcon', details: '#notes' }
  598.             ];
  599.             function toggleIcons(section) {
  600.                 if ($(window).width() <= 768) {
  601.                     $(section.details).hide();
  602.                     $(section.addIcon).show();
  603.                     $(section.removeIcon).hide();
  604.                 } else {
  605.                     $(section.details).show();
  606.                     $(section.addIcon).hide();
  607.                     $(section.removeIcon).hide();
  608.                 }
  609.             }
  610.             sections.forEach(section => {
  611.                 toggleIcons(section);
  612.             });
  613.             $('h3').on('click', function () {
  614.                 // 配下のiconがaddIconかremoveIconであれば、クリック時にtoggleする
  615.                 const $icon = $(this).find('img');
  616.                 if ($icon.length > 0) {
  617.                     const iconId = $icon.attr('id');
  618.                     const section = sections.find(section => section.addIcon === `#${iconId}` || section.removeIcon === `#${iconId}`);
  619.                     if (section) {
  620.                         if ($(section.details).is(':visible')) {
  621.                             $(section.details).fadeOut();
  622.                             $(section.removeIcon).hide();
  623.                             $(section.addIcon).show();
  624.                         } else {
  625.                             $(section.details).fadeIn();
  626.                             $(section.addIcon).hide();
  627.                             $(section.removeIcon).show();
  628.                             if (section.initialize) {
  629.                                 section.initialize();
  630.                             }
  631.                         }
  632.                     }
  633.                 }
  634.             });
  635.             $(window).on('resize', function() {
  636.                 sections.forEach(section => toggleIcons(section));
  637.             });
  638.         });
  639.     </script>
  640.     <script>
  641.         {# ページネーションをクリックしたときにslickGoToするように #}
  642.         $(function () {
  643.             var $slide = $('.product-spec-detail__slide');
  644.             var $navigation = $('.product-spec-detail__navigation .item');
  645.             var $currentSlide = $('#current-spec-slide');
  646.             $slide.slick({
  647.                 infinite: true,
  648.                 slidesToShow: 1,
  649.                 slidesToScroll: 1,
  650.                 arrows: false,
  651.                 fade: true,
  652.                 dots: false,
  653.                 focusOnSelect: true,
  654.                 touchThreshold:    20,
  655.                 responsive: [
  656.                     {
  657.                         breakpoint: 768,
  658.                         settings: {
  659.                             slidesToShow: 1,
  660.                             slidesToScroll: 1,
  661.                             arrows: false,
  662.                             fade: true
  663.                         }
  664.                     }
  665.                 ]
  666.             });
  667.             $navigation.each(function (index) {
  668.                 $(this).attr('data-number', index);
  669.             });
  670.             $navigation.eq(0).addClass('current');
  671.             $navigation.on('click', function () {
  672.                 var number = $(this).attr('data-number');
  673.                 $slide.slick('slickGoTo', number, false);
  674.                 updateNavigation();
  675.             });
  676.             $('.spec-nav-button.left').on('click', function () {
  677.                 $slide.slick('slickPrev');
  678.                 updateNavigation();
  679.             });
  680.             $('.spec-nav-button.right').on('click', function () {
  681.                 $slide.slick('slickNext');
  682.                 updateNavigation();
  683.             });
  684.             var matchingElement = $('[id=spec-bar_' + $currentSlide.text() + ']');
  685.             matchingElement.addClass('!bg-[#B8914B]');
  686.             $slide.on('afterChange', function(event, slick, currentSlide){
  687.                 $currentSlide.text(currentSlide + 1);
  688.                 var matchingElement = $('[id=spec-bar_' + $currentSlide.text() + ']');
  689.                 matchingElement.addClass('!bg-[#B8914B]');
  690.                 matchingElement.siblings('li').removeClass('!bg-[#B8914B]');
  691.             });
  692.             function updateNavigation() {
  693.                 var currentSlide = $slide.slick('slickCurrentSlide');
  694.                 $navigation.removeClass('current');
  695.                 $navigation.eq(currentSlide).addClass('current');
  696.             }
  697.         });
  698.     </script>
  699.     <script>
  700.         $(function () {
  701.             var $slide = $('.product-naire-detail__slide');
  702.             $slide.slick({
  703.                 infinite: true,
  704.                 slidesToShow: 1,
  705.                 slidesToScroll: 1,
  706.                 arrows: false,
  707.                 fade: true,
  708.                 dots: false,
  709.                 focusOnSelect: true,
  710.                 responsive: [
  711.                     {
  712.                         breakpoint: 768,
  713.                         settings: {
  714.                             slidesToShow: 1,
  715.                             slidesToScroll: 1,
  716.                             arrows: false,
  717.                             fade: true
  718.                         }
  719.                     }
  720.                 ]
  721.             });
  722.             var $navigation = $('.product-naire-detail__navigation .item');
  723.             $navigation.each(function (index) {
  724.                 $(this).attr('data-number', index);
  725.             });
  726.             $navigation.eq(0).addClass('current');
  727.             $navigation.on('click', function () {
  728.                 var number = $(this).attr('data-number');
  729.                 $slide.slick('slickGoTo', number, false);
  730.                 updateNavigation();
  731.             });
  732.             $('.naire-nav-button.left').on('click', function () {
  733.                 $slide.slick('slickPrev');
  734.                 updateNavigation();
  735.             });
  736.             $('.naire-nav-button.right').on('click', function () {
  737.                 $slide.slick('slickNext');
  738.                 updateNavigation();
  739.             });
  740.             var $currentSlide = $('#current-naire-slide');
  741.             var matchingElement = $('[id=naire-bar_' + $currentSlide.text() + ']');
  742.             matchingElement.addClass('!bg-[#B8914B]');
  743.             $slide.on('afterChange', function(event, slick, currentSlide){
  744.                 $currentSlide.text(currentSlide + 1);
  745.                 var matchingElement = $('[id=naire-bar_' + $currentSlide.text() + ']');
  746.                 matchingElement.addClass('!bg-[#B8914B]');
  747.                 matchingElement.siblings('li').removeClass('!bg-[#B8914B]');
  748.             });
  749.             function updateNavigation() {
  750.                 var currentSlide = $slide.slick('slickCurrentSlide');
  751.                 $navigation.removeClass('current');
  752.                 $navigation.eq(currentSlide).addClass('current');
  753.             }
  754.         });
  755.     </script>
  756.     <script>
  757.         $(document).ready(function () {
  758.             $('.slider').slick({
  759.                 dots: true,
  760.                 dotsClass: "slick-dots",
  761.                 variableWidth: true,
  762.                 centerMode: true,
  763.                 autoplay: true,
  764.                 autoplaySpeed: 7000,
  765.                 speed: 1500,
  766.                 focusOnSelect: true,
  767.                 infinite: true
  768.             });
  769.         });
  770.         $(document).ready(function () {
  771.             $('.relate-feature-slider').slick({
  772.                 dots: true,
  773.                 dotsClass: "slick-dots",
  774.                 variableWidth: true,
  775.                 centerMode: true,
  776.                 autoplay: true,
  777.                 autoplaySpeed: 7000,
  778.                 speed: 1500,
  779.                 focusOnSelect: true,
  780.                 infinite: true
  781.             });
  782.         });
  783.     </script>
  784.     <script>
  785.         $(function () {
  786.             const posts = $ (`.movie_post`);
  787.             const showMoreButton = $ (`#movie_show_more`);
  788.             let visibleCount = 8;
  789.             // 初期表示
  790.             posts.slice(0, visibleCount).removeClass('hidden');
  791.             showMoreButton.on('click', function () {
  792.                 visibleCount += 4;
  793.                 posts.slice(0, visibleCount).removeClass('hidden');
  794.                 // すべて表示したらボタンを隠す
  795.                 if (visibleCount >= posts.length) {
  796.                     showMoreButton.addClass('hidden');
  797.                 }
  798.             });
  799.             // 初期状態でボタンを非表示にするか確認
  800.             if (visibleCount >= posts.length) {
  801.                 showMoreButton.addClass('hidden');
  802.             }
  803.         });
  804.         $(function () {
  805.             var $slide = $('.product-movie__slide');
  806.             var $navigation = $('.product-movie__navigation .movie_item');
  807.             $slide.slick({
  808.                 infinite: true,
  809.                 slidesToShow: 1,
  810.                 slidesToScroll: 1,
  811.                 arrows: false,
  812.                 fade: true,
  813.                 dots:false ,
  814.                 focusOnSelect: true,
  815.                 responsive: [
  816.                     {
  817.                         breakpoint: 768,
  818.                         settings: {
  819.                             slidesToShow: 1,
  820.                             slidesToScroll: 1,
  821.                             arrows: false,
  822.                             fade: true
  823.                         }
  824.                     }
  825.                 ]
  826.             });
  827.             var $navigationParent = $('.product-movie__navigation');
  828.             $navigationParent.slick({
  829.                 infinite: true,
  830.                 slidesToShow: 5,
  831.             });
  832.             $navigation.each(function (index) {
  833.                 $(this).attr('data-number', index);
  834.             });
  835.             $navigation.eq(0).addClass('current');
  836.             $navigation.on('click', function () {
  837.                 var dataIndex = $(this).attr('data-index');
  838.                 $slide.slick('slickGoTo', dataIndex, false);
  839.                 $navigationParent.slick('slickGoTo', dataIndex, false);
  840.                 updateMovieNavigation();
  841.             });
  842.             $('.gallery-bar').on('click', function () {
  843.                 var dataIndex = $(this).attr('data-index');
  844.                 $slide.slick('slickGoTo', dataIndex, false);
  845.                 $navigationParent.slick('slickGoTo', dataIndex, false);
  846.                 updateMovieNavigation();
  847.             });
  848.             $('.movie-nav-button.left').on('click', function () {
  849.                 $slide.slick('slickPrev');
  850.                 $navigationParent.slick('slickPrev');
  851.                 updateMovieNavigation();
  852.             });
  853.             $('.movie-nav-button.right').on('click', function () {
  854.                 $slide.slick('slickNext');
  855.                 $navigationParent.slick('slickNext');
  856.                 updateMovieNavigation();
  857.             });
  858.             var $currentSlide = $('#current-movie-slide');
  859.             var matchingElement = $('[id=bar_' + $currentSlide.text() + ']');
  860.             matchingElement.addClass('!bg-[#B8914B]');
  861.             $slide.on('afterChange', function(event, slick, currentSlide){
  862.                 $currentSlide.text(currentSlide + 1);
  863.                 var matchingElement = $('[id=bar_' + $currentSlide.text() + ']');
  864.                 matchingElement.addClass('!bg-[#B8914B]');
  865.                 matchingElement.siblings('li').removeClass('!bg-[#B8914B]');
  866.             });
  867.             function updateMovieNavigation() {
  868.                 var currentSlide = $slide.slick('slickCurrentSlide');
  869.                 $navigation.removeClass('current');
  870.                 $navigation.eq(currentSlide).addClass('current');
  871.             }
  872.             function initializeGallery() {
  873.                 var $gallery = $('.product-movie__gallery');
  874.                 var $galleryNavigation = $('.product-movie__gallery-navigation .movie');
  875.                 var $currentGallerySlide = $('#current-movie-slide');
  876.                 // スライダーを初期化する前に破棄
  877.                 if ($gallery.hasClass('slick-initialized')) {
  878.                     $gallery.slick('unslick');
  879.                 }
  880.                 $gallery.slick({
  881.                     infinite: true,
  882.                     slidesToShow: 1,
  883.                     slidesToScroll: 1,
  884.                     arrows: false,
  885.                     fade: true
  886.                 });
  887.                 $galleryNavigation.each(function(index) {
  888.                     $(this).attr('data-number', index);
  889.                 });
  890.                 $galleryNavigation.eq(0).addClass('current');
  891.                 $galleryNavigation.on('click', function() {
  892.                     var number = $(this).attr('data-number');
  893.                     $gallery.slick('slickGoTo', number, false);
  894.                     updateMovieNavigation();
  895.                 });
  896.                 $('.movie-nav-button.left').on('click', function() {
  897.                     $gallery.slick('slickPrev');
  898.                     updateMovieNavigation();
  899.                 });
  900.                 $('.movie-nav-button.right').on('click', function() {
  901.                     $gallery.slick('slickNext');
  902.                     updateMovieNavigation();
  903.                 });
  904.                 $gallery.on('afterChange', function(event, slick, currentSlide) {
  905.                     console.log(currentSlide);
  906.                     $currentGallerySlide.text(currentSlide + 1);
  907.                     var matchingElement = $('[id=bar_' + $currentGallerySlide.text() + ']');
  908.                     matchingElement.addClass('!bg-[#B8914B]');
  909.                     matchingElement.siblings('li').removeClass('!bg-[#B8914B]');
  910.                 });
  911.                 function updateMovieNavigation() {
  912.                     var currentSlide = $gallery.slick('slickCurrentSlide');
  913.                     $galleryNavigation.removeClass('current');
  914.                     $galleryNavigation.eq(currentSlide).addClass('current');
  915.                 }
  916.             }
  917.         });
  918.     </script>
  919.     <script>
  920.         $(function () {
  921.             $('#classcategory_id1').on('change', function (event) {
  922.                 selectImage($(this));
  923.                 $price = $('.ec-price__price').text();
  924.                 $price = $price.replace(/¥|円/g, '');
  925.                 $('.ec-price__price').text($price);
  926.                 if ($('#productoption1').find('option:selected').text() == "選択してください" || $(this).find('option:selected').text() == "選択してください") {
  927.                     $('.add-cart').attr('disabled', true);
  928.                 };
  929.             });
  930.             {% if Product.hasProductClass and Product.className2 is defined %}
  931.             $('#classcategory_id2').on('change', function (event) {
  932.                 selectImage($(this));
  933.             });
  934.             {% endif %}
  935.         });
  936.         async function selectImage($selector) {
  937.             var classcategory_id = Number($selector.val());
  938.             const classCategories = {{ class_categories_as_json(Product)|raw }};
  939.             var classCategory = null;
  940.             var classcategory_id1 = Number($('#classcategory_id1').val());
  941.             var classcategory_id2 = Number($('#classcategory_id2').val());
  942.             if (classcategory_id2) {
  943.                 classCategory = classCategories[classcategory_id1][`#${classcategory_id2}`];
  944.             } else {
  945.                 classCategory = classCategories[classcategory_id1]['#'];
  946.             }
  947.             // 画像が存在する場合は画像を切り替える
  948.             if (classCategory.color_image_file_name) {
  949.                 $('.product-detail__navigation .item').each(function () {
  950.                     if ($(this).attr('src').includes(classCategory.color_image_file_name)) {
  951.                         $(this).click();
  952.                     }
  953.                 });
  954.             }
  955.         }
  956.     </script>
  957. {% endblock %}
  958. {% block main %}
  959.     <div>
  960.         <div id="heading" class="mt-10 md:mt-5 mb-16 max-w-[1120px] mx-auto flex flex-col text-[#2F2725] md:text-[14px] xl:w-full  md:mb-5">
  961.                 <div class="max-w-[1120px] w-full mx-auto xl:px-8 mb-16 md:mb-10">
  962.                     {% for Category in Product.ProductCategories %}
  963.                         {% if Category.category_id in parentCategoryIds %}
  964.                         <ul id="breadcrumbs" class="border-[#EFEFEF] py-2 w-full md:text-xs text-sm tracking-widest flex items-center gap-x-1">
  965.                             <li>
  966.                                 <a href="{{ url('homepage') }}" class="hover">
  967.                                     <span>HOME</span>
  968.                                 </a>
  969.                             </li>
  970.                             <span>/</span>
  971.                             {# 大カテゴリ #}
  972.                             <li class="flex gap-y-1">
  973.                                 <a href={{ url('product_list') }}?category_id={{ Category.Category.id }} class="hover">
  974.                                     {{Category.Category.name}}
  975.                                 </a>
  976.                             </li>
  977.                             <span>/</span>
  978.                             {# 中カテゴリ #}
  979.                             {% for children in Category.Category.children %}
  980.                                 {% if children.id in ProductCategoryIds %}
  981.                                     <li>
  982.                                         <a href={{ url('product_list') }}?category_id={{ children.id }} class="hover">
  983.                                             <span>{{children.name}}</span>
  984.                                         </a>
  985.                                     </li>
  986.                                     <span>/</span>
  987.                                 {% endif %}
  988.                             {% endfor %}
  989.                             {# 商品名 #}
  990.                             <li>
  991.                                 <span>{{ Product.name }}</span>
  992.                             </li>
  993.                         </ul>
  994.                         {% endif %}
  995.                     {% endfor %}
  996.                 </div>
  997.             <div class="flex text-sm  gap-[60px] xl:flex-col xl:items-center xl:px-7 xl:gap-5">
  998.                 <div class="w-[630px] relative md:w-[315px]">
  999.                     {% if Product.ProductImage is not null %}
  1000.                         <div class="product-detail__slide-container relative">
  1001.                             <div class="nav-button left cursor-pointer absolute top-2/4 z-10 w-[20px] h-[20px] flex text-center items-center justify-center rounded-full left-2 hover">
  1002.                                 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-3 h-auto">
  1003.                                     <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/>
  1004.                                 </svg>
  1005.                             </div>
  1006.                             <div class="product-detail__slide relative w-full m-0 p-0 md:mx-auto md:w-[315px] md:h-[315px]">
  1007.                                 {% for ProductImage in Product.ProductImage %}
  1008.                                     <a href="{{ asset(ProductImage, 'save_image') }}" data-lightbox="image-{{ loop.index }}" class="item relative h-[630px] md:h-[315px]">
  1009.                                         <img class="absolute top-0 bottom-0 right-0 left-0 w-full md:h-[327px] rounded-md" src="{{ asset(ProductImage, 'save_image') }}" alt="{{ loop.first ? Product.name : '' }}">
  1010.                                     </a>
  1011.                                 {% endfor %}
  1012.                             </div>
  1013.                             <div class="nav-button right cursor-pointer absolute top-2/4 z-10 w-[20px] h-[20px] flex text-center items-center justify-center rounded-full right-2 hover">
  1014.                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-3 h-auto">
  1015.                                     <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" />
  1016.                                 </svg>
  1017.                             </div>
  1018.                         </div>
  1019.                         <div class="product-detail__navigation flex overflow-hidden mt-5 md:mt-2.5">
  1020.                             {% for ProductImage in Product.ProductImage %}
  1021.                                 <img class="item w-[130px] h-[130px] hover mb-2 cursor-pointer md:w-[65px] md:h-[65px]" src="{{ asset(ProductImage, 'save_image') }}" alt="" data-index="{{ loop.index - 1 }}">
  1022.                             {% endfor %}
  1023.                         </div>
  1024.                         {% if Product.ProductImage|length > 0 %}
  1025.                             <div class="flex items-center justify-between">
  1026.                                 <ul class="flex w-[70%]">
  1027.                                     {% for i in range(1, Product.ProductImage|length) %}
  1028.                                         <li id="bar_{{ i }}" class="bar-item" data-index={{ i }}></li>
  1029.                                     {% endfor %}
  1030.                                 </ul>
  1031.                                 <div class="current-slide-indicator font-notoserif text-right text-sm w-[10%]">
  1032.                                     <span id="current-slide" class="mx-0">1</span>/<span id="total-slides">{{ Product.ProductImage|length }}</span>
  1033.                                 </div>
  1034.                             </div>
  1035.                         {% endif %}
  1036.                     {% endif %}
  1037.                 </div>
  1038.                 <div class="flex flex-col md:items-center w-[430px] lg:w-full">
  1039.                     {# 商品名 #}
  1040.                     <div class="mb-7 lg:w-full md:mb-4">
  1041.                         <div class="flex gap-[5%] lg:gap-6 lg:flex-col-reverse">
  1042.                             <div class="flex flex-col w-[90%] lg:w-full lg:items-center">
  1043.                                 <p class="text-lg md:text-xs font-light tracking-wider md:text-center mb-1">
  1044.                                     {{Product.name_kana}}
  1045.                                 </p>
  1046.                                 <h2 class="text-[42px] md:text-xl font-light tracking-[0.2em] mb-3 md:mb-2 leading-snug">
  1047.                                     {{ Product.name }}
  1048.                                 </h2>
  1049.                                 {% if Categories['Category'] %}
  1050.                                     <p class="w-fit text-base sm:text-xs border border-[#AFAFAF] text-center py-1 px-3">{{ Categories['Category'].getName() }}</p>
  1051.                                 {% endif %}
  1052.                             </div>
  1053.                             <div class="flex gap-3 lg:ml-auto">
  1054.                                 <div class="relative">
  1055.                                     <button id="share-menu-button" type="button">
  1056.                                         <img src="{{ asset('assets/icon/share-menu.svg') }}" alt="share menu" class="w-[24px] h-[24px] md:w-5 md:h-5 hover">
  1057.                                     </button>
  1058.                                     <ul id="share-menu" class="hidden absolute -right-4 top-8 bg-white rounded-md w-[140px] border-gray border-[1px] shadow-xl
  1059.                                                                                     before:block before:absolute before:content-[''] before:-top-[6px] before:right-[15px]
  1060.                                                                                     before:w-3 before:h-3 before:bg-white
  1061.                                                                                     before:border-t before:border-l before:border-gray
  1062.                                                                                     before:rotate-45 before:z-10">
  1063.                                         <li class="hover cursor-pointer flex items-center gap-2 p-2 border-gray border-b-[1px] last:border-b-0" onclick="openLineShare()">
  1064.                                             <img class="h-4 w-4" src="{{ asset('assets/icon/LINE_LOGO.svg') }}"/>LINE
  1065.                                         </li>
  1066.                                         <li class="hover cursor-pointer flex items-center gap-2 p-2 border-gray border-b-[1px] last:border-b-0" onclick="openMail()">
  1067.                                             <img class="h-4 w-4" src="{{ asset('assets/icon/mail.svg') }}"/>Eメール
  1068.                                         </li>
  1069.                                         <li id="copy-link" class="hover cursor-pointer flex items-center gap-2 p-2 border-gray border-b-[1px] last:border-b-0" onclick="copyUrl()">
  1070.                                             <img class="h-4 w-4" src="{{ asset('assets/icon/link_share.svg') }}"/><span>リンクをコピー</span>
  1071.                                         </li>
  1072.                                     </ul>
  1073.                                 </div>
  1074.                                 {% if BaseInfo.option_favorite_product %}
  1075.                                     {% if is_favorite == false %}
  1076.                                         <form action="{{ url('product_add_favorite', { id: Product.id} ) }}" method="post" class="w-6 h-6 md:w-5 md:h-5">
  1077.                                             <button class="hover" type="submit" id="favorite" class="">
  1078.                                                 <img src="{{asset('assets/icon/favorite-off.svg')}}" alt="favorite off" class="w-6 h-6 md:w-5 md:h-5">
  1079.                                             </button>
  1080.                                         </form>
  1081.                                     {% else %}
  1082.                                         <a class="block hover" href="{{ url('mypage_favorite_delete', { id : Product.id, redirect_path: 'product_detail', product_id: Product.id }) }}" {{ csrf_token_for_anchor() }} data-method="delete">
  1083.                                             <img src="{{ asset('assets/icon/favorite-on.svg') }}" alt="favorite on" class="w-6 h-6 md:w-5 md:h-5">
  1084.                                         </a>
  1085.                                     {% endif %}
  1086.                                 {% endif %}
  1087.                             </div>
  1088.                         </div>
  1089.                     </div>
  1090.                     {% if Product.description_detail %}
  1091.                         <p class="mb-5 text-base md:text-sm md:text-center leading-7 lg:mb-3 tracking-[0.2em] font-extralight">{{ Product.description_detail|raw|nl2br }}</p>
  1092.                     {% endif %}
  1093.                     <div class="flex gap-2 mb-3">
  1094.                         {% for ProductClass in Product.ProductClasses %}
  1095.                             <hr style="background-color:{{ProductClass.color_code}}" class="rounded-full w-4 h-4"></hr>
  1096.                         {% endfor %}
  1097.                     </div>
  1098.                     {# 販売価格 #}
  1099.                     <div class="mb-5 flex flex-col md:mb-5">
  1100.                         {% if Product.hasProductClass -%}
  1101.                             {% if Product.getPrice02IncTaxMin == Product.getPrice02IncTaxMax %}
  1102.                                 <div class="ec-price">
  1103.                                     <span class="ec-price__price price02-default text-[32px] font-light leading-normal md:text-2xl">{{ Product.getPrice02IncTaxMin|number_format }}</span>
  1104.                                     <span class="text-sm font-medium">円(税込)</span>
  1105.                                 </div>
  1106.                             {% else %}
  1107.                                 <div class="ec-price">
  1108.                                     <span class="ec-price__price price02-default text-[32px] font-light leading-normal md:text-2xl">{{ Product.getPrice02IncTaxMin|number_format }}
  1109.                                         ~
  1110.                                         {{ Product.getPrice02IncTaxMax|number_format }}</span>
  1111.                                     <span class="text-sm font-medium">円(税込)</span>
  1112.                                 </div>
  1113.                             {% endif %}
  1114.                         {% else %}
  1115.                             <div class="ec-price">
  1116.                                 <span class="ec-price__price price02-default text-[32px] ">{{ Product.getPrice02IncTaxMin|number_format }}</span>
  1117.                                 <span class="text-sm font-medium">円(税込)</span>
  1118.                             </div>
  1119.                         {% endif %}
  1120.                     </div>
  1121.                     {% if Product.is_cart_button %}
  1122.                         <p class="text-base md:text-sm leading-7">
  1123.                             こちらの商品は、デザインや仕様上、<br/>
  1124.                             アドバイザーが直接ご案内をさせていただきます。<br/>
  1125.                             下記よりご連絡をお願いいたします。
  1126.                         </p>
  1127.                         {% else %}
  1128.                             <form action="{{ url('product_add_cart', {id:Product.id}) }}" method="post" id="form1" name="form1" class="w-full flex flex-col gap-4">
  1129.                                 {% if Product.stock_find %}
  1130.                                     <div class="flex flex-col gap-3 text-sm xl:gap-[10px]">
  1131.                                         {% if form.classcategory_id1 is defined %}
  1132.                                             <div class="flex justify-between items-center">
  1133.                                                 <p class="flex-1 font-medium my-0">カラー</p>
  1134.                                                 <div class="flex-[4]">
  1135.                                                     {{ form_widget(form.classcategory_id1, { 'attr': { 'class': 'w-full bg-manakaBeige rounded px-4 py-3 border border-[#E2DFD6]' } })}}
  1136.                                                     {{ form_errors(form.classcategory_id1) }}
  1137.                                                 </div>
  1138.                                             </div>
  1139.                                         </div>
  1140.                                     {% endif %}
  1141.                                 {% endif %}
  1142.                                 {% if form.productoption1 is defined %}
  1143.                                     <div class="ec-select_inner_container flex justify-between items-center">
  1144.                                         {{ form_label(form.productoption1, null, { label_attr: { class: 'flex-1 font-medium my-0' } }) }}
  1145.                                         <div class="flex-[4]">
  1146.                                             {{ form_widget(form.productoption1, { 'attr': { 'class': 'w-full bg-manakaBeige rounded px-4 py-3 border border-[#E2DFD6]' } })}}
  1147.                                             {{ form_errors(form.productoption1) }}
  1148.                                         </div>
  1149.                                     </div>
  1150.                                 {% endif %}
  1151.                                 {% if form[productOption] is defined %}
  1152.                                     <input
  1153.                                         type="hidden" id="{{ form[productOption].vars.id }}"
  1154.                                         name="{{ field_name(form[productOption]) }}"
  1155.                                         value="{{ field_value(form[productOption]) }}"
  1156.                                     >
  1157.                                     <div
  1158.                                         id="naire-method"
  1159.                                         class="hidden"
  1160.                                     >
  1161.                                         名入れ方法: <span class="naire-method-name underline mr-3 hover" onclick="$('.naire-modal').fadeIn();return false;"></span>
  1162.                                         <button class="border border-[#2D969B] text-[#2D969B] py-2 px-4 rounded-[3px] hover md:ml-auto md:mt-4" onclick="$('.naire-modal').fadeIn();return false;">選択し直す</button>
  1163.                                     </div>
  1164.                                 {% endif %}
  1165.                                 {# MEMO: 家景牌のみ名入れ枚数というプルダウンを持つ #}
  1166.                                 {% if form[productOptionSecond] is defined %}
  1167.                                     <input
  1168.                                         type="hidden" id="{{ form[productOptionSecond].vars.id }}"
  1169.                                         name="{{ field_name(form[productOptionSecond]) }}"
  1170.                                         value="{{ field_value(form[productOptionSecond]) }}"
  1171.                                     >
  1172.                                     <div
  1173.                                         id="naire-method-second"
  1174.                                         class="hidden"
  1175.                                     >
  1176.                                         2枚目  : <span class="naire-method-second-name underline mr-3 hover" onclick="$('.naire-modal-second').fadeIn();return false;"></span>
  1177.                                         <button class="border border-[#2D969B] text-[#2D969B] py-2 px-4 rounded-[3px] hover md:ml-auto md:mt-4" onclick="$('.naire-modal-second').fadeIn();return false;">選択し直す</button>
  1178.                                     </div>
  1179.                                 {% endif %}
  1180.                                 {% if form[productOptionSecond] is defined %}
  1181.                                     <div id="naire-unit" class="flex justify-between items-center">
  1182.                                         <p class="flex-1 font-medium my-0">名入れ枚数</p>
  1183.                                         <div class="flex-[4]">
  1184.                                             <select id="naire-unit-sheets" class="w-full bg-manakaBeige rounded px-4 py-3 border border-[#E2DFD6]">
  1185.                                                 <option value="1">1枚</option>
  1186.                                                 <option value="2">2枚(+8250円税込)</option>
  1187.                                             </select>
  1188.                                             {{ form_errors(form[productOptionSecond]) }}
  1189.                                         </div>
  1190.                                     </div>
  1191.                                 {% endif %}
  1192.                                 <button type="submit" class="add-cart hover text-sm tracking-wider w-full bg-[#2D969B] text-white disabled:opacity-30 py-4 rounded-[3px] flex gap-2 items-center justify-center mt-[10px]">
  1193.                                     <svg xmlns="http://www.w3.org/2000/svg" width="20" height="21" viewbox="0 0 20 21" fill="none">
  1194.                                         <mask id="mask0_4374_3496" style="mask-type:alpha" maskunits="userSpaceOnUse" x="0" y="0" width="20" height="21">
  1195.                                             <rect y="0.5" width="20" height="20" fill="#D9D9D9"/>
  1196.                                         </mask>
  1197.                                         <g mask="url(#mask0_4374_3496)">
  1198.                                             <path d="M6.09008 18.0961C5.73858 18.0961 5.44237 17.9756 5.20145 17.7347C4.96052 17.4938 4.84005 17.1976 4.84005 16.8461C4.84005 16.4946 4.96052 16.1984 5.20145 15.9575C5.44237 15.7165 5.73858 15.5961 6.09008 15.5961C6.44156 15.5961 6.73777 15.7165 6.9787 15.9575C7.21962 16.1984 7.34008 16.4946 7.34008 16.8461C7.34008 17.1976 7.21962 17.4938 6.9787 17.7347C6.73777 17.9756 6.44156 18.0961 6.09008 18.0961ZM13.9106 18.0961C13.5591 18.0961 13.2629 17.9756 13.022 17.7347C12.781 17.4938 12.6606 17.1976 12.6606 16.8461C12.6606 16.4946 12.781 16.1984 13.022 15.9575C13.2629 15.7165 13.5591 15.5961 13.9106 15.5961C14.2621 15.5961 14.5583 15.7165 14.7992 15.9575C15.0401 16.1984 15.1606 16.4946 15.1606 16.8461C15.1606 17.1976 15.0401 17.4938 14.7992 17.7347C14.5583 17.9756 14.2621 18.0961 13.9106 18.0961ZM4.90097 5.08325L7.12533 9.76273H12.6542C12.7503 9.76273 12.8358 9.7387 12.9106 9.69063C12.9854 9.64254 13.0495 9.57577 13.1029 9.49031L15.2824 5.53196C15.3465 5.41445 15.3518 5.31029 15.2984 5.21948C15.245 5.12866 15.1542 5.08325 15.026 5.08325H4.90097ZM4.49391 4.24992H15.3433C15.7055 4.24992 15.9779 4.39762 16.1606 4.69302C16.3433 4.98843 16.3529 5.29265 16.1894 5.60569L13.808 9.94544C13.6873 10.1484 13.5305 10.3076 13.3377 10.423C13.1448 10.5384 12.933 10.5961 12.7022 10.5961H6.75033L5.73751 12.455C5.65204 12.5833 5.64937 12.7221 5.72949 12.8717C5.80962 13.0213 5.92981 13.0961 6.09008 13.0961H15.1606V13.9294H6.09008C5.60396 13.9294 5.24125 13.7246 5.00193 13.3148C4.76261 12.9051 4.75674 12.4935 4.9843 12.08L6.23749 9.84607L3.17339 3.41659H1.66699V2.58325H3.70224L4.49391 4.24992Z" fill="white"/>
  1199.                                         </g>
  1200.                                     </svg>
  1201.                                     かごへ追加
  1202.                                 </button>
  1203.                                 <div class="hidden">
  1204.                                     {{ form_row(form.quantity) }}
  1205.                                     {{ form_errors(form.quantity) }}
  1206.                                     {{ form_row(form.ProductClass) }}
  1207.                                     {{ form_errors(form.ProductClass) }}
  1208.                                 </div>
  1209.                             </div>
  1210.                         {% endif %}
  1211.                     </form>
  1212.                 </div>
  1213.             </div>
  1214.         </div>
  1215.         <nav class="flex gap-6 justify-center mb-12 xl:mx-auto md:flex-col md:gap-2 md:mb-9">
  1216.             <a href={{url("user_data",{"route": "showroom"} )}} class="text-manakaGold underline md:text-sm text-center hover">
  1217.                 銀座・横浜 ショールームをご案内 >
  1218.             </a>
  1219.             <a href=" {{url('contact')}}" class="text-manakaGold underline md:text-sm text-center hover">
  1220.                 お問い合わせ・資料請求はこちら >
  1221.             </a>
  1222.         </nav>
  1223.         {# ページ内リンク #}
  1224.         <div class="w-[750px] flex items-center mx-auto bg-manakaBeige rounded-md md:rounded-none xl:w-full">
  1225.             <a href="#concept" class="flex md:flex-col w-1/4 py-7 md:py-[14px] hover items-center justify-center">
  1226.                 <p class="w-full text-center border-r md:text-xs tracking-[4px] ml-1">
  1227.                     コンセプト
  1228.                     <br class="hidden md:block"/>
  1229.                     <i class="fas fa-chevron-down fa-xs mt-1" style="color: #222222;"></i>
  1230.                 </p>
  1231.             </a>
  1232.             <a href="#feature" class="flex md:flex-col w-1/4 py-7 md:py-[14px] hover items-center justify-center">
  1233.                 <p class="w-full text-center border-r md:text-xs tracking-[4px] ml-1">
  1234.                     特徴
  1235.                     <br class="hidden md:block"/>
  1236.                     <i class="fas fa-chevron-down fa-xs mt-1" style="color: #222222;"></i>
  1237.                 </p>
  1238.             </a>
  1239.             <a href="#movie" class="flex md:flex-col w-1/4 py-7 md:py-[14px] hover items-center justify-center">
  1240.                 <p class="w-full text-center border-r md:text-xs tracking-[4px] ml-1">
  1241.                     写真
  1242.                     <br class="hidden md:block"/>
  1243.                     <i class="fas fa-chevron-down fa-xs mt-1" style="color: #222222;"></i>
  1244.                 </p>
  1245.             </a>
  1246.             <a href="#spec" class="flex md:flex-col w-1/4 py-7 md:py-[14px] hover items-center justify-center">
  1247.                 <p class="w-full text-center md:text-xs tracking-[4px] ml-1">
  1248.                     商品仕様
  1249.                     <br class="hidden md:block"/>
  1250.                     <i class="fas fa-chevron-down fa-xs mt-1" style="color: #222222;"></i>
  1251.                 </p>
  1252.             </a>
  1253.         </div>
  1254.         <div class="w-full max-w-[1152px] mx-auto px-6 mb-20 xl:max-w-none font-extralight">
  1255.             {# コンセプト #}
  1256.             {% if Product.concept_file_name_pc %}
  1257.                 <section id="concept" class="flex flex-col py-16 border-b border-manakaBeige lg:py-8">
  1258.                     <div class="flex justify-between mb-6 lg:mb-3">
  1259.                         <h2 class="text-[40px] md:text-xl text-start tracking-[0.2em]">コンセプト</h2>
  1260.                         <img src={{asset("assets/img/detail/leaf.png")}} alt="装飾の画像" class="h-[80px] lg:hidden"/>
  1261.                     </div>
  1262.                     <div class="flex gap-16 lg:flex-col lg:items-center lg:gap-4">
  1263.                         <img src={{asset(Product.concept_file_name_pc,'save_image')}} alt="{{Product.concept_alt_text}}" class="w-[630px] h-[430px] rounded-md lg:hidden"/>
  1264.                         <img src={{asset(Product.concept_file_name_sp,'save_image')}} alt="{{Product.concept_alt_text}}" class="w-full rounded-md hidden lg:block"/>
  1265.                         <div class="flex flex-col">
  1266.                             <h3 class="text-3xl md:text-lg tracking-[0.2em] leading-normal md:mb-3 mb-6">{{ Product.concept_caption|raw|nl2br }}</h3>
  1267.                             <p class="leading-[1.875em] md:leading-[1.875em] md:text-xs">{{ Product.concept_content|raw|nl2br }}</p>
  1268.                             <img src={{asset("assets/img/detail/leaf.png")}} alt="装飾の画像" class="hidden lg:block ml-auto w-[60px] h-10"/>
  1269.                         </div>
  1270.                     </div>
  1271.                 </section>
  1272.             {% endif %}
  1273.             {# 特徴 #}
  1274.             {% if Product.ProductFeatures is not null %}
  1275.                 <section id="feature" class="flex flex-col py-16 border-b border-manakaBeige lg:py-8 lg:max-w-[630px] mx-auto">
  1276.                     <div class="flex justify-between mb-6 lg:mb-3">
  1277.                         <h2 class="text-[40px] md:text-xl tracking-[0.2em]">特徴</h2>
  1278.                     </div>
  1279.                     <div class="flex flex-col gap-16 md:gap-10">
  1280.                         {% for ProductFeature in Product.ProductFeatures %}
  1281.                                 <div class="flex even:flex-row-reverse lg:even:flex-col gap-16 items-center lg:gap-3 lg:flex-col lg:mx-auto">
  1282.                                     <h3 class="text-3xl md:text-lg lg:text-left hidden lg:block w-full tracking-[0.2em]">{{ProductFeature.caption|raw|nl2br}}</h3>
  1283.                                     {% if ProductFeature.file_name %}
  1284.                                         <img src={{asset(ProductFeature.file_name, 'save_image')}} alt="{{ProductFeature.alt_text}}" class="w-[630px] h-[630px] rounded-md lg:w-full md:h-[315px]"/>
  1285.                                     {% endif %}
  1286.                                     <div class="flex flex-col gap-6 lg:gap-3">
  1287.                                         <h3 class="text-3xl tracking-[0.2em] leading-[40px] md:text-lg lg:text-left lg:hidden">{{ProductFeature.caption|raw|nl2br}}</h3>
  1288.                                         <p class="leading-[1.875em] md:leading-[1.875em] md:text-xs">{{ProductFeature.content|raw|nl2br}}</p>
  1289.                                     </div>
  1290.                                 </div>
  1291.                         {% endfor %}
  1292.                     </div>
  1293.                     {% if Product.audio_file_name %}
  1294.                         <div class="flex lg:flex-col items-center gap-4 border border-[#E2DFD6] p-3">
  1295.                             <p class="text-center w-1/3 md:w-full md:text-xs tracking-widest md:text-start">{{Product.audio_text}}</p>
  1296.                                 <audio controls src="{{ asset(Product.audio_file_name, 'temp_image') }}" class="w-2/3 mx-auto md:w-full">商品の音声</audio>
  1297.                         </div>
  1298.                      {% endif %}
  1299.                 </section>
  1300.             {% endif %}
  1301.             {# 写真 (ムービーアンドギャラリー) #}
  1302.             {% if Product.ProductGalleries is not null %}
  1303.                 <section id="movie" class="flex flex-col order-b border-manakaBeige py-16 lg:py-8">
  1304.                     <h2 class="text-[40px] md:text-xl font-light mb-4 lg:mb-3 tracking-[0.2em]">写真</h2>
  1305.                     <div class="flex items-center gap-5 flex-wrap justify-center md:gap-3 md:hidden">
  1306.                         {% for image in Product.ProductGalleries %}
  1307.                             <img src="{{asset(image.file_name, 'save_image')}}" class="movie_post hidden w-[260px] h-[260px] rounded-xl md:w-[157px] md:h-[157px]"/>
  1308.                         {% endfor %}
  1309.                     </div>
  1310.                     <div class="w-[630px] relative lg:w-full hidden md:block">
  1311.                             <div class="product-movie__slide-container relative">
  1312.                                 <div class="movie-nav-button left cursor-pointer absolute top-2/4 z-10 w-[20px] h-[20px] flex text-center items-center justify-center rounded-full left-2 hover">
  1313.                                     <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-3 h-auto">
  1314.                                         <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/>
  1315.                                     </svg>
  1316.                                 </div>
  1317.                                 <div class="product-movie__slide relative w-full m-0 p-0 md:w-[327px] md:h-[327px]">
  1318.                                     {% for image in Product.ProductGalleries %}
  1319.                                             <img src="{{asset(image.file_name, 'save_image')}}"  alt="{{image.alt_text}}" class="movie_item absolute top-0 rounded-md bottom-0 right-0 left-0 object-cover w-full h-[630px] md:w-[327px] md:h-[327px] lg:left-1/2 lg:translate-x-[-50%]"/>
  1320.                                     {% endfor %}
  1321.                                 </div>
  1322.                                 <div class="movie-nav-button right cursor-pointer absolute top-2/4 z-10 w-[20px] h-[20px] flex text-center items-center justify-center rounded-full right-2 hover">
  1323.                                 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-3 h-auto">
  1324.                                         <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" />
  1325.                                     </svg>
  1326.                                 </div>
  1327.                             </div>
  1328.                             <div class="product-movie__navigation flex overflow-hidden mt-5 md:mt-2.5">
  1329.                                 {% for image in Product.ProductGalleries %}
  1330.                                     <img class="movie_item w-[130px] h-[130px] hover mb-2 cursor-pointer md:w-[65px] md:h-[65px]" src="{{ asset(image.file_name, 'save_image') }}" alt="" data-index="{{ loop.index - 1 }}"/>
  1331.                                 {% endfor %}
  1332.                             </div>
  1333.                             {% if Product.ProductGalleries|length > 0 %}
  1334.                                 <div class="flex items-center justify-between">
  1335.                                     <ul class="flex w-[70%]">
  1336.                                         {% for i in range(1, Product.ProductGalleries|length) %}
  1337.                                             <li id="bar_{{ i }}" class="gallery-bar gallery-bar-item hover" data-index={{ i - 1 }}></li>
  1338.                                         {% endfor %}
  1339.                                     </ul>
  1340.                                     <div class="current-movie-indicator font-notoserif text-right text-sm mt-2 w-[10%]">
  1341.                                         <span id="current-movie-slide" class="mx-0">1</span>/<span id="total-movie">{{ Product.ProductGalleries|length }}</span>
  1342.                                     </div>
  1343.                                 </div>
  1344.                             {% endif %}
  1345.                     </div>
  1346.                     <button id="movie_show_more" type="button" class="w-[430px] sm:w-full text-sm py-5 border border-black rounded-md mx-auto md:hidden mt-7 mb-10">
  1347.                         + 続きを見る
  1348.                     </button>
  1349.                     {% if Product.ProductMovies %}
  1350.                         <div class="mt-10 flex flex-col gap-4">
  1351.                             {% for movie in Product.ProductMovies %}
  1352.                                 <iframe src={{movie.url}} title="YouTube video player" class="w-full h-[430px] lg:h-[215px]"></iframe>
  1353.                             {% endfor %}
  1354.                         </div>
  1355.                     {% endif %}
  1356.                 </section>
  1357.             {% endif %}
  1358.             {# 商品仕様 #}
  1359.             {% if Product.ProductSpecs %}
  1360.                 <section id="spec" class="flex flex-col py-16 lg:py-4">
  1361.                     <h2 class="text-[40px] md:text-xl mb-6 lg:mb-3 tracking-[0.2em]">商品仕様</h2>
  1362.                     <nav id="productDetailNav" class="flex items-center mb-10 md:mb-5">
  1363.                         {% if Product.ProductSpecs %}
  1364.                             <button id="detailNav" class="w-full border border-[#E2DFD6] bg-[#F0EFEA] py-3 hover -mr-[1px] md:h-[50px] md:py-0 flex items-center justify-center tracking-wider">詳細</button>
  1365.                         {% endif %}
  1366.                         {% if Product.ProductNaireImages %}
  1367.                             <button id="naireNav" class="w-full border border-[#E2DFD6] py-3 hover md:h-[50px] -mr-[1px] md:py-0 flex items-center justify-center tracking-wider">名入れ</button>
  1368.                         {% endif %}
  1369.                         {% if Product.ProductFaqs %}
  1370.                             <button id="questionNav" class="w-full border border-[#E2DFD6] py-3 hover md:py-0 md:h-[50px] sm:text-sm flex items-center justify-center tracking-wider">よくある<br class="hidden md:block">ご質問</button>
  1371.                         {% endif %}
  1372.                     </nav>
  1373.                     {# 商品詳細(画像) #}
  1374.                     {% if Product.ProductDetailImages is not null %}
  1375.                         <section id="detail" class="flex gap-14 lg:flex-col lg:justify-center md:gap-6">
  1376.                             <div class="w-[630px] lg:w-full">
  1377.                                 <div class="product-spec-detail__slide-container relative">
  1378.                                     <div class="spec-nav-button left cursor-pointer absolute top-2/4 z-10 w-[20px] h-[20px] flex text-center items-center justify-center rounded-full left-2 hover">
  1379.                                         <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-3 h-auto">
  1380.                                             <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/>
  1381.                                         </svg>                                    </div>
  1382.                                     <div class="product-spec-detail__slide relative m-0 p-0">
  1383.                                         {% for ProductImage in Product.ProductDetailImages %}
  1384.                                             <div class="item relative h-[630px] md:w-[315px] md:h-[315px]">
  1385.                                                 <img class="absolute top-0 bottom-0 right-0 left-0 object-cover w-full h-[630px] md:w-[315px] md:h-[315px] lg:left-1/2 lg:translate-x-[-50%]" src="{{ asset(ProductImage.file_name, 'save_image') }}" alt="{{ loop.first ? Product.name : '' }}">
  1386.                                             </div>
  1387.                                         {% endfor %}
  1388.                                     </div>
  1389.                                     <div class="spec-nav-button right cursor-pointer absolute top-2/4 z-10 w-[20px] h-[20px] flex text-center items-center justify-center rounded-full right-2 hover">
  1390.                                         <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-3 h-auto">
  1391.                                             <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" />
  1392.                                         </svg>
  1393.                                     </div>
  1394.                                 </div>
  1395.                                 {% if Product.ProductDetailImages|length > 0 %}
  1396.                                     <div class="flex items-center justify-between mt-2">
  1397.                                         <ul class="flex w-[70%]">
  1398.                                             {% for i in range(1, Product.ProductDetailImages|length) %}
  1399.                                                 <li id="spec-bar_{{ i }}" class="detail-image-bar-item"></li>
  1400.                                             {% endfor %}
  1401.                                         </ul>
  1402.                                         <div class="current-slide-indicator font-notoserif text-right text-sm mt-[-8px] w-[10%]">
  1403.                                             <span id="current-spec-slide" class="mx-0">1</span>/<span id="total-slides">{{ Product.ProductDetailImages|length }}</span>
  1404.                                         </div>
  1405.                                     </div>
  1406.                                 {% endif %}
  1407.                             </div>
  1408.                             <div class="w-[430px] flex flex-col justify-between lg:mx-auto lg:w-full">
  1409.                                 <ul class="flex flex-col lg:justify-center mb-6">
  1410.                                     {% for spec in Product.ProductSpecs %}
  1411.                                         <li class="flex py-7 md:py-6 pr-4 md:pr-0 border-b border-manakaBeige">
  1412.                                             <p class="w-1/4 text-sm ">
  1413.                                                 {{spec.title}}
  1414.                                             </p>
  1415.                                             <p class="w-3/4 text-sm tracking-widest leading-6">
  1416.                                                 {{spec.content|raw|nl2br}}
  1417.                                             </p>
  1418.                                         </li>
  1419.                                     {% endfor %}
  1420.                                 </ul>
  1421.                                 <a href="#heading" class="w-full border border-[#2D969B] text-center text-[#2D969B] text-sm py-5 tracking-wider rounded-md lg:py-4 hover">
  1422.                                     <span class="text-lg font-bold">↑</span>
  1423.                                     かごへ戻る
  1424.                                 </a>
  1425.                             </div>
  1426.                         </section>
  1427.                     {% endif %}
  1428.                     {# 名入れ #}
  1429.                     {# MEMO: idの値を小文字にするとセレクタが機能しなかった為、大文字にしてある #}
  1430.                     {% if Product.ProductNaireImages|length > 0 %}
  1431.                         <section id="NAIRE" class="flex gap-6 lg:flex-col">
  1432.                             <div class="w-[630px] lg:w-full">
  1433.                                 <div class="product-naire-detail__slide-container relative">
  1434.                                     <div class="naire-nav-button left cursor-pointer absolute top-2/4 z-10 w-[20px] h-[20px] flex text-center items-center justify-center rounded-full left-2 hover">
  1435.                                         <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-3 h-auto">
  1436.                                             <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/>
  1437.                                         </svg>
  1438.                                     </div>
  1439.                                     <div class="product-naire-detail__slide relative m-0 p-0 h-[630px] md:w-[315px] md:h-[315px] md:mx-auto">
  1440.                                         {% for ProductImage in Product.ProductNaireImages %}
  1441.                                             <img class="item absolute top-0 bottom-0 right-0 left-0 object-cover w-full h-[630px] md:w-[315px] md:h-[315px] lg:left-1/2 lg:translate-x-[-50%]" src="{{ asset(ProductImage.file_name, 'save_image') }}" alt="{{ loop.first ? Product.name : '' }}"></img>
  1442.                                         {% endfor %}
  1443.                                     </div>
  1444.                                     <div class="naire-nav-button right cursor-pointer absolute top-2/4 z-10 w-[20px] h-[20px] flex text-center items-center justify-center rounded-full right-2 hover">
  1445.                                         <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-3 h-auto">
  1446.                                             <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" />
  1447.                                         </svg>
  1448.                                     </div>
  1449.                                 </div>
  1450.                                 {% if Product.ProductNaireImages|length > 0 %}
  1451.                                     <div class="flex items-center justify-between">
  1452.                                         <ul class="flex w-[70%]">
  1453.                                             {% for i in range(1, Product.ProductNaireImages|length) %}
  1454.                                                 <li id="naire-bar_{{ i }}" class="naire-bar-item" data-number={{ i }}></li>
  1455.                                             {% endfor %}
  1456.                                         </ul>
  1457.                                         <div class="current-slide-indicator font-notoserif text-right text-sm mt-2 w-[10%]">
  1458.                                             <span id="current-naire-slide" class="mx-0">1</span>/<span id="total-slides">{{ Product.ProductNaireImages|length }}</span>
  1459.                                         </div>
  1460.                                     </div>
  1461.                                 {% endif %}
  1462.                             </div>
  1463.                             <div class="w-[430px] flex flex-col lg:mx-auto lg:w-full">
  1464.                                 <div class="flex flex-col mb-6">
  1465.                                     <div class="flex">
  1466.                                         <p class="text-sm tracking-widest leading-6">
  1467.                                             {{ Product.naire_content|raw|nl2br }}
  1468.                                         </p>
  1469.                                     </div>
  1470.                                 </div>
  1471.                                 <a href="#heading" class="w-full border border-[#2D969B] text-center text-[#2D969B] text-sm py-5 tracking-wider rounded-md lg:py-4 hover">
  1472.                                     <span class="text-lg font-bold">↑</span>
  1473.                                     かごへ戻る
  1474.                                 </a>
  1475.                             </div>
  1476.                         </section>
  1477.                     {% endif %}
  1478.                     {# よくあるご質問 #}
  1479.                     {% if Product.ProductFaqs is not null %}
  1480.                         <section id="question">
  1481.                             <ul class="flex flex-col">
  1482.                                 {% for faq in Product.ProductFaqs %}
  1483.                                     <li class="flex flex-col gap-5 py-10 md:py-5 border-b-2 border-manakaBeige last:border-none">
  1484.                                         <div class="flex items-center gap-8">
  1485.                                             <p class="w-20 h-20 bg-manakaBeige py-2 text-center text-[22px] flex items-center justify-center md:text-base md:w-10 md:h-10">Q</p>
  1486.                                             <p class="w-full text-xl tracking-[0.075em] mr-6 md:text-base">{{ faq.question|raw|nl2br }}</p>
  1487.                                         </div>
  1488.                                         <div class="flex gap-8">
  1489.                                             <p class="w-20 h-20 border border-manakaBeige py-2 text-center text-[22px] flex items-center justify-center md:text-base md:w-10 md:h-10">A</p>
  1490.                                             <div class="w-full flex flex-col">
  1491.                                                 <p class="w-full text-xl tracking-[0.075em] mr-6 md:text-xs">{{ faq.answer|raw|nl2br }}</p>
  1492.                                             </div>
  1493.                                         </div>
  1494.                                     </li>
  1495.                                 {% endfor %}
  1496.                                 <a href="#heading" class="w-full max-w-[430px] border border-[#2D969B] text-center text-[#2D969B] text-sm py-5 mx-auto tracking-wider  rounded-md lg:py-4 hover mt-10">
  1497.                                     <span class="text-lg font-bold">↑</span>
  1498.                                     かごへ戻る
  1499.                                 </a>
  1500.                             </ul>
  1501.                         </section>
  1502.                     {% endif %}
  1503.                 </section>
  1504.             {% endif %}
  1505.             <nav class="flex gap-6 justify-center mb-16 md:flex-col md:gap-2 md:mb-8">
  1506.                 <a href="{{url('user_data',{route:'showroom'})}}" class="text-manakaGold underline md:text-sm text-center hover">
  1507.                     銀座・横浜 ショールームをご案内 >
  1508.                 </a>
  1509.                 <a href="{{url('contact')}}" class="text-manakaGold underline md:text-sm text-center hover">
  1510.                     お問い合わせ・資料請求はこちら >
  1511.                 </a>
  1512.             </nav>
  1513.             {# 制作者紹介 #}
  1514.             {% if Product.producer_file_name is not null %}
  1515.                 <div class="border-t border-manakaBeige py-4">
  1516.                     <div id="producer_slide" class="flex items-center hover py-6 md:py-0">
  1517.                         <h2 class="w-full text-center md:text-start text-2xl tracking-widest md:text-xl">制作者紹介</h2>
  1518.                         <div id="producer_toggle_button" class="text-xl border-[0.5px] border-[#707070] w-8 md:w-6 md:h-6 rounded-[50%] p-1 md:text-sm flex items-center justify-center leading-normal">
  1519.                             <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1" stroke="currentColor" class="md:w-4 md:h-4 h-6 w-6 text-[#707070]">
  1520.                                 <path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15" />
  1521.                             </svg>
  1522.                         </div>
  1523.                     </div>
  1524.                     <div id="producer" class="flex mt-7 md:flex-col justify-center w-full gap-16 md:gap-4">
  1525.                         <img src={{asset(Product.producer_file_name,'save_image')}} class="w-1/2 h-[400px] md:w-full lg:mx-auto sm:h-auto content-cover content-center"/>
  1526.                         <div class="lg:w-full lg:mx-auto">
  1527.                             <p class="mb-5 tracking-widest text-lg lg:text-sm lg:mb-4">{{Product.producer_title}}<p>
  1528.                             <p class="mb-6 text-3xl tracking-widest lg:text-xl">{{Product.producer_name}}</p>
  1529.                             <p class="leading-6 lg:text-xs">{{ Product.producer_content|raw|nl2br }}</p>
  1530.                         </div>
  1531.                     </div>
  1532.                 </div>
  1533.             {% endif %}
  1534.             {# 配送・注意事項 #}
  1535.             {% if Product.delivery_info %}
  1536.                 <div class="py-4 border-y border-manakaBeige">
  1537.                     <div id="delivery_slide" class="flex items-center hover py-6 md:py-0">
  1538.                         <h2 class="w-full text-center md:text-start text-2xl  tracking-widest md:text-xl">配送・注意事項</h2>
  1539.                         <div id="delivery_toggle_button" class="text-xl border-[0.5px] border-[#707070] w-8 md:w-6 md:h-6 rounded-[50%] p-1 md:text-sm flex items-center justify-center leading-normal">
  1540.                             <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1" stroke="currentColor" class="md:w-4 md:h-4 h-6 w-6 text-[#707070]">
  1541.                                 <path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15" />
  1542.                             </svg>
  1543.                         </div>
  1544.                     </div>
  1545.                     <div id="delivery" class="flex flex-col lg:gap-4 py-4">
  1546.                         <div>
  1547.                             <h3 class="text-center text-2xl mb-2 md:text-lg md:text-start">配送</h3>
  1548.                             <div class="">{{ Product.delivery_info|raw|nl2br }}</div>
  1549.                         </div>
  1550.                         <div>
  1551.                             <h3 class="text-center text-2xl mt-6 mb-2 md:text-lg md:text-start">注意事項</h3>
  1552.                             <div class="leading-6 lg:text-sm">{{ Product.delivery_comment|raw|nl2br }}</div>
  1553.                         </div>
  1554.                     </div>
  1555.                 </div>
  1556.             {% endif %}
  1557.             {# 関連商品 #}
  1558.             {% if Product.RelatedProducts|length > 0 %}
  1559.                 <div class="pt-16 md:pt-10 flex flex-col w-full items-center">
  1560.                     <hr class="w-full border-none h-[1px] bg-gray md:w-[100vw] md:ml-[-90vw] md:relative md:left-[50%]">
  1561.                     <div class="flex flex-col items-center w-[1050px] xl:w-full">
  1562.                             <h2 class="text-2xl md:text-lg text-center mb-9 md:mb-3 leading-7 tracking-[0.2em]">
  1563.                                 関連商品
  1564.                             </h2>
  1565.                             <ul class="flex overflow-hidden w-full items-center justify-center md:w-[100vw] md:mx-[calc(50%-50vw)] md:px-[calc(50%-50vw)]">
  1566.                                 <div class="slider w-[350px] md:w-150px">
  1567.                                     {% for RelatedProduct in Product.RelatedProducts %}
  1568.                                         {% set CategoryName = Product.ProductCategories[0].Category.name %}
  1569.                                         {% set ProductClasses = RelatedProduct.ChildProduct.ProductClasses %}
  1570.                                         <div class="slick-slider w-[350px] mx-3 max-w-[350px] md:max-w-[150px] md:w-[150px] shadow-lg">
  1571.                                             <li class="flex flex-col items-center w-full h-auto text-center hover">
  1572.                                                 <a href="{{ url('product_detail', {id : RelatedProduct.ChildProduct.id} ) }}">
  1573.                                                     <img src="{{ asset(RelatedProduct.ChildProduct.MainListImage|no_image_product, 'save_image') }}" alt="" class="bg-cover w-[350px] h-[350px] md:w-[150px] md:h-[150px] mb-10 md:mb-6">
  1574.                                                 </a>
  1575.                                                 <div class="mb-2">
  1576.                                                     <p class="text-sm font-notoserif  tracking-wide md:text-xs">{{RelatedProduct.ChildProduct.name_kana}}</p>
  1577.                                                     <p class="whitespace-normal overflow-visible  font-notoserif text-2xl tracking-[6.4px] md:text-sm">{{RelatedProduct.ChildProduct.name}}</p>
  1578.                                                 </div>
  1579.                                                 <div class="flex flex-col">
  1580.                                                     {# <div class="text-clip overflow-hidden h-14 whitespace-nowrap md:h-6">
  1581.                                                         <p class="whitespace-normal text-sm text-center leading-7 md:text-[10px]">
  1582.                                                             {{RelatedProduct.ChildProduct.description_detail|raw|nl2br}}
  1583.                                                         </p>
  1584.                                                     </div> #}
  1585.                                                     <p class="text-sm px-3 py-2 border border-[#AFAFAF] md:text-[10px]">{{ CategoryName }}</p>
  1586.                                                     <div class="flex gap-2 my-3 justify-center">
  1587.                                                         {% for ProductClass in ProductClasses %}
  1588.                                                             <hr style="background-color:{{ProductClass.color_code}}" class="rounded-full w-4 h-4"></hr>
  1589.                                                         {% endfor %}
  1590.                                                     </div>
  1591.                                                     <div class="flex items-baseline gap-1 mb-6">
  1592.                                                         <p class="text-2xl leading-9 font-regular">
  1593.                                                             {% if RelatedProduct.ChildProduct.hasProductClass %}
  1594.                                                                 {# {% if RelatedProduct.ChildProduct.getPrice02Min == RelatedProduct.ChildProduct.getPrice02Max %} #}
  1595.                                                                     {{ RelatedProduct.ChildProduct.getPrice02IncTaxMin|number_format }}
  1596.                                                                 {# {% else %}
  1597.                                                                     {{ RelatedProduct.ChildProduct.getPrice02IncTaxMin| number_format }}<br/>
  1598.                                                                     ~<br/>
  1599.                                                                     {{ RelatedProduct.ChildProduct.getPrice02IncTaxMax| number_format}}
  1600.                                                                 {% endif %}
  1601.                                                             {% else %}
  1602.                                                                 {{ RelatedProduct.ChildProduct.getPrice02IncTaxMin| number_format }} #}
  1603.                                                             {% endif %}
  1604.                                                         </p>
  1605.                                                         <p class="text-xs leading-4 font-medium">円(税込)</p>
  1606.                                                     </div>
  1607.                                                 </div>
  1608.                                                 {# <a href="{{ url('product_detail', {id : RelatedProduct.ChildProduct.id} ) }}" class="w-[258px] block border-black border py-3 rounded-[3px] md:w-[258px] text-sm text-center md:text-xs">詳しくはこちら</a> #}
  1609.                                             </li>
  1610.                                         </div>
  1611.                                     {% endfor %}
  1612.                                 </div>
  1613.                             </ul>
  1614.                     </div>
  1615.                 </div>
  1616.             {% endif %}
  1617.         </div>
  1618.         {# 関連特集 #}
  1619.         {% if Product.ProductRelateFeatures|length > 0 %}
  1620.             <div class="bg-manakaBeige py-16 md:py-8 mb-20 md:mb-0">
  1621.                 <h2 class="text-2xl md:text-lg text-center mb-9 md:mb-3 leading-7 tracking-[0.2em]">
  1622.                     関連特集
  1623.                 </h2>
  1624.                 <ul class="flex items-center justify-center w-full md:w-[100vw] overflow-hidden">
  1625.                     <div class="slider w-full">
  1626.                         {% for relateFeature in Product.ProductRelateFeatures %}
  1627.                             <div class="relate-feature-slick-slider w-[540px] mx-3 md:!w-[315px]">
  1628.                                 <li class="flex flex-col items-center w-[540px] md:w-[315px] shadow-lg hover box-border bg-white mb-5">
  1629.                                     <a class="w-full" href={{relateFeature.url}}>
  1630.                                         <img src="{{ asset(relateFeature.file_name|no_image_product, 'save_image') }}" alt="{{relateFeature.alt_text}}" class="bg-cover w-[540px] md:w-[315px] h-[324px] md:h-[189px] object-cover">
  1631.                                     </a>
  1632.                                     <div class="w-full px-10 py-6 md:px-5 md:py-8">
  1633.                                         <div class="flex items-center gap-5 mb-5 md:mb-2 mr-auto">
  1634.                                             <p class="text-xs">{{relateFeature.date|date('Y/m/d')}}</p>
  1635.                                             <p class="border border-[#222] rounded-md px-2 py-1 text-xs">{{relateFeature.category_name}}</p>
  1636.                                         </div>
  1637.                                         <p class="whitespace-normal overflow-visible  font-notoserif text-2xl md:text-base tracking-[6.4px] text-left mb-4 md:mb-1">
  1638.                                             {{relateFeature.title}}
  1639.                                         </p>
  1640.                                         <p class="text-left md:text-xs line-clamp-3">{{relateFeature.thumb_content|raw|nl2br}}</p>
  1641.                                     </div>
  1642.                                 </li>
  1643.                             </div>
  1644.                         {% endfor %}
  1645.                     </div>
  1646.                 </ul>
  1647.             </div>
  1648.         {% endif %}
  1649.         <div class="flex flex-col justify-center mb-[200px] lg:mb-[100px]">
  1650.             {# ショールームのご案内 #}
  1651.             <a href={{url("user_data",{"route": "showroom"} )}} class="block my-16 w-[840px] mx-auto lg:w-full">
  1652.                 <img src="{{ asset('assets/img/list/showroom_pc.jpg') }}" class="h-40 shadow-lg lg:hidden hover"/>
  1653.                 <img src="{{ asset('assets/img/list/showroom_sp.jpg') }}" class="hidden lg:block h-[180px] shadow-lg  mx-auto hover"/>
  1654.             </a>
  1655.             {# サポートサービス #}
  1656.             <div class="relative xl:px-[8vw] xl:w-full xl:mx-0 flex items-center justify-center w-full max-w-[1120px] mx-auto">
  1657.                 <div class="gap-10 xl:gap-y-8 flex flex-col items-center justify-center p-20 bg-manakaBeige lg:p-5">
  1658.                     <h3 class="text-center text-[max(1.98vw,28px)] md:text-lg tracking-widest font-extralight">商品選びサポートサービス</h3>
  1659.                     <div class="text-center flex flex-col md:text-xs text-xl gap-y-3">
  1660.                         <p class="leading-relaxed">お客様と故人様の関係にふさわしい<br class="hidden md:block">祈りのかたちを見つけていただくために、<br>
  1661.                         いくつかのサポートサービスをご用意しました。</p>
  1662.                     </div>
  1663.                     <div class="gap-12 flex-wrap flex p-6 lg:p-0 w-full lg:gap-5 lg:flex-col items-center justify-center">
  1664.                         <a href={{url('catalog_confirm')}}>
  1665.                             <img src="{{ asset('assets/img/top/catalog-service.webp') }}" alt="" class="w-[min(22.5vw,432px)] lg:w-full h-full hover">
  1666.                         </a>
  1667.                         <a href={{url('coordinate_confirm')}}>
  1668.                             <img src="{{ asset('assets/img/top/coordinate-service.webp') }}" alt="" class="w-[min(22.5vw,432px)] lg:w-full h-full hover">
  1669.                         </a>
  1670.                         <a href={{url('user_data',{route:'pick_up_altar'})}}>
  1671.                             <img src="{{ asset('assets/img/top/takuover-service.webp') }}" alt="" class="w-[min(22.5vw,432px)] lg:w-full h-full hover">
  1672.                         </a>
  1673.                     </div>
  1674.                 </div>
  1675.             </div>
  1676.         </div>
  1677.     </div>
  1678.     <div class="ec-modal fixed w-full h-full top-0 left-0 z-10 hidden">
  1679.         <div class="ec-modal-overlay flex justify-center items-center bg-black/30 w-full h-full">
  1680.             <div class="ec-modal-wrap relative rounded-sm bg-white w-[max(62vw,800px)] md:w-[87vw] py-10 px-1">
  1681.                 <span class="ec-modal-close cursor-pointer absolute right-5 top-2 h-[30px] w-[20px]">
  1682.                     <span class="ec-icon">
  1683.                         <img src="{{ asset('assets/icon/close.svg') }}" alt=""/>
  1684.                     </span>
  1685.                 </span>
  1686.                 <div id="ec-modal-header" class="text-center">{{ 'front.product.add_cart_complete'|trans }}</div>
  1687.                 <div class="ec-modal-box text-center">
  1688.                     <div class="ec-role m-5 flex items-center justify-center gap-10 md:flex-col whitespace-nowrap md:gap-y-4">
  1689.                         <div class="ec-inlineBtn--cancel rounded-[3px] py-3 w-[327px] md:w-[279px] bg-black text-white font-bold cursor-pointer">{{ 'front.product.continue'|trans }}</div>
  1690.                         <a href="{{ url('cart') }}" class="ec-inlineBtn--action hover">
  1691.                             <div class="rounded-[3px] py-3 w-[327px] md:w-[279px] text-black border border-black font-bold bg-red ">
  1692.                                 {{ 'common.go_to_cart'|trans }}
  1693.                             </div>
  1694.                         </a>
  1695.                     </div>
  1696.                 </div>
  1697.             </div>
  1698.         </div>
  1699.     </div>
  1700.     {# 名入れモーダル #}
  1701.     {% if form[productOption] is defined %}
  1702.         <div class="naire-modal fixed w-full h-full top-0 left-0 z-10 hidden">
  1703.             <div class="naire-modal-overlay relative bg-black/30 w-full h-full">
  1704.                 <div class="naire-modal-wrap absolute left-1/2 translate-x-[-50%] top-[20vh] md:top-[10vh] rounded-md overflow-y-auto bg-white min-h-[550px] py-10 px-6 lg:overflow-auto h-[33vw] max-h-[600px] lg:h-[50vw] lg:min-h-[500px] md:max-w-[600px]">
  1705.                     {# <span class="naire-modal-close cursor-pointer absolute right-5 top-2 h-[30px] w-[20px]">
  1706.                         <span class="naire-close">
  1707.                             <img src="{{ asset('assets/icon/close.svg') }}" alt=""/>
  1708.                         </span>
  1709.                     </span> #}
  1710.                     <div id="naire-modal-header" class="text-center text-2xl mb-6 md:text-lg">
  1711.                         {{ '名入れ方法'|trans }}
  1712.                     </div>
  1713.                     <p class="text-base text-center mb-6">選択してください</p>
  1714.                     <div class="naire-modal-box flex mb-6 justify-center lg:flex-col gap-6 mx-auto lg:overflow-auto">
  1715.                         {% for choice in form[productOption].vars.choices%}
  1716.                             {% if choice.label != '名入れなし'  %}
  1717.                                     <label class="block w-[300px] border-4 p-4 rounded-md hover md:text-xs lg:w-full lg:max-w-[70vw] lg:mx-auto {% if choice.label == 'なし' %} hidden {% endif %}">
  1718.                                         <input type="radio" value="{{ choice.value }}" name={{productOption}} data-name="{{ choice.label }}"/>
  1719.                                         {{ choice.label }}
  1720.                                         {% set OptionImages = choice.data.OptionImages %}
  1721.                                         {% if OptionImages|length > 0 %}
  1722.                                             <img
  1723.                                                 class="w-full h-auto"
  1724.                                                 src="{{ asset(OptionImages.0, 'save_image') }}"
  1725.                                             />
  1726.                                             {% elseif choice.label == 'アドバイザーに相談する' %}
  1727.                                                 <img
  1728.                                                     class="w-full h-auto mt-10 md:mt-4"
  1729.                                                     src={{asset("assets/img/contact/coordinate.png")}}
  1730.                                                 />
  1731.                                         {% endif %}
  1732.                                     </label>
  1733.                                 {% endif %}
  1734.                         {% endfor %}
  1735.                     </div>
  1736.                         <p class="text-manakaRed text-center">
  1737.                             ※名入れにご不安な場合や先祖代々など定型パターンにない形式をご希望の方は、「アドバイザーに相談する」を選択ください。</br>
  1738.                             ※「アドバイザーに相談する」を選択した場合は、ご注文確認後に、担当者よりご連絡を差し上げます。
  1739.                         </p>
  1740.                     </div>
  1741.                 </div>
  1742.             </div>
  1743.         </div>
  1744.         {# 家景牌の2枚目用の名入れモーダル #}
  1745.         {% if form[productOptionSecond] is defined %}
  1746.             <div class="naire-modal-second fixed w-full h-full top-0 left-0 z-10 hidden">
  1747.                 <div class="naire-modal-overlay relative bg-black/30 w-full h-full">
  1748.                     <div class="naire-modal-wrap absolute left-1/2 translate-x-[-50%] top-[20vh] md:top-[10vh] rounded-md bg-white overflow-y-auto min-h-[550px] py-10 px-6 lg:overflow-auto h-[33vw] max-h-[600px] lg:h-[50vw] lg:min-h-[500px] md:max-w-[600px]">
  1749.                         {# <span class="naire-modal-close cursor-pointer absolute right-5 top-2 h-[30px] w-[20px]">
  1750.                             <span class="naire-close">
  1751.                                 <img src="{{ asset('assets/icon/close.svg') }}" alt=""/>
  1752.                             </span>
  1753.                         </span> #}
  1754.                         <div id="naire-modal-header" class="text-center text-2xl mb-6 md:text-lg">
  1755.                             {{ '名入れ方法 2枚目'|trans }}
  1756.                         </div>
  1757.                         <p class="text-base text-center mb-6">選択してください</p>
  1758.                         <div class="naire-modal-second-box flex lg:flex-col gap-6 justify-center mb-6 lg:overflow-auto">
  1759.                             {% for choice in form[productOptionSecond].vars.choices%}
  1760.                                 {% if choice.label != '名入れなし'  %}
  1761.                                         <label class="block w-[300px] hover border-bg-manakaBeige border-4 p-4 rounded-md hover md:text-xs lg:w-full lg:max-w-[70vw] lg:mx-auto {% if choice.label == 'なし' %} hidden {% endif %}">
  1762.                                             <input type="radio" value="{{ choice.value }}" name={{productOptionSecond}} data-name="{{ choice.label }}"/>
  1763.                                             {{ choice.label }}
  1764.                                             {% set OptionImages = choice.data.OptionImages %}
  1765.                                             {% if OptionImages|length > 0 %}
  1766.                                                 <img
  1767.                                                     class="w-full h-auto"
  1768.                                                     src="{{ asset(OptionImages.0, 'save_image') }}"
  1769.                                                 />
  1770.                                                 {% elseif choice.label == 'アドバイザーに相談する' %}
  1771.                                                     <img
  1772.                                                         class="w-full h-auto mt-20 md:mt-4"
  1773.                                                         src={{asset("assets/img/contact/coordinate.png")}}
  1774.                                                     />
  1775.                                             {% endif %}
  1776.                                         </label>
  1777.                                     {% endif %}
  1778.                             {% endfor %}
  1779.                         </div>
  1780.                         <p class="text-manakaRed text-center">
  1781.                             ※名入れにご不安な場合や先祖代々など定型パターンにない形式をご希望の方は、「アドバイザーに相談する」を選択ください。</br>
  1782.                             ※「アドバイザーに相談する」を選択した場合は、ご注文確認後に、担当者よりご連絡を差し上げます。
  1783.                         </p>
  1784.                     </div>
  1785.                 </div>
  1786.             </div>
  1787.         {% endif %}
  1788.     {% endif %}
  1789. {% endblock %}