app/template/default/index.twig line 1

Open in your IDE?
  1. {% extends 'default_frame.twig' %}
  2. {% set body_class = 'front_page' %}
  3. {% block stylesheet %}
  4.   <link rel="stylesheet" href="{{ asset('assets/css/home.css') }}">
  5.   <link rel="stylesheet" href="{{ asset('assets/css/news-list.css') }}">
  6.   <link rel="stylesheet" href="{{ asset('assets/css/swiper-bundle.min.css') }}" defer>
  7.   <style>
  8.     .header-section {
  9.         display: none;
  10.     }
  11.     @media (max-width: 1200px) {
  12.         .header-section {
  13.             display: block;
  14.         }
  15.     }
  16.   </style>
  17. {% endblock %}
  18. {% block javascript %}
  19.     <!-- Swiper JS cdn -->
  20.   <script src="{{ asset('assets/js/swiper-bundle.min.js') }}" defer></script>
  21.   <script defer>
  22.   $(document).ready(function() {
  23.     // Product Slider
  24.     // loop needs slides >= slidesPerView * 2 (max slidesPerView is 3)
  25.     if (document.getElementById('bannerSliderId')) {
  26.       const bannerSlideCount = document.querySelectorAll('#bannerSliderId .swiper-slide').length;
  27.       new Swiper('#bannerSliderId', {
  28.         slidesPerView: 3,
  29.         spaceBetween: 16,
  30.         loop: bannerSlideCount >= 6,
  31.         centeredSlides: false,
  32.         breakpoints: {
  33.           1200: {
  34.             slidesPerView: 3,
  35.             spaceBetween: 16,
  36.           },
  37.           768: {
  38.             slidesPerView: 3,
  39.             spaceBetween: 16,
  40.           },
  41.           0: {
  42.             centeredSlides: true,
  43.             slidesPerView: 1.2,
  44.             spaceBetween: 16,
  45.           }
  46.         },
  47.         pagination: {
  48.           el: '.productSlider-pagination',
  49.           clickable: true,
  50.           bulletClass: 'productSlider-bullet',
  51.           bulletActiveClass: 'productSlider-bullet-active',
  52.         },
  53.         navigation: {
  54.           nextEl: '.productSlider-button-next',
  55.           prevEl: '.productSlider-button-prev',
  56.         },
  57.       });
  58.     }
  59.     const howToUseSwiper = new Swiper('#howToUseSwiperId', {
  60.       slidesPerView: 'auto',
  61.       spaceBetween: 20,
  62.       centeredSlides: false,
  63.       grabCursor: true,
  64.       freeMode: {
  65.         enabled: true,
  66.         sticky: false,
  67.       },
  68.       navigation: {
  69.         nextEl: '.slider-nav-next',
  70.         prevEl: '.slider-nav-prev',
  71.       },
  72.       on: {
  73.         init: function() {
  74.           updateProgressBar(this);
  75.         },
  76.         progress: function(swiper, progress) {
  77.           updateProgressBar(swiper);
  78.         },
  79.         slideChange: function() {
  80.           updateProgressBar(this);
  81.         },
  82.       },
  83.       breakpoints: {
  84.         1200: {
  85.           spaceBetween: 20,
  86.         },
  87.         0: {
  88.           spaceBetween: 12,
  89.         }
  90.       },
  91.     });
  92.     function updateProgressBar(swiper) {
  93.       const progressBar = document.querySelector('.slider-progress-bar');
  94.       if (!progressBar) return;
  95.       // Calculate progress based on scroll position
  96.       // Start from 60% and scale to 100%
  97.       const progress = swiper.progress || 0;
  98.       const percentage = 60 + (progress * 40);
  99.       progressBar.style.width = Math.min(percentage, 100) + '%';
  100.     }
  101.     setTimeout(() => {
  102.         // Banner Slide - Pure CSS animation, no Swiper needed
  103.         // Banner Slide Text - Pure CSS animation, no Swiper needed
  104.         // click spec table top item
  105.         const specTableTopItems = document.querySelectorAll('.spec-table-top-item');
  106.         specTableTopItems.forEach(item => {
  107.         item.addEventListener('click', () => {
  108.             specTableTopItems.forEach(item => {
  109.             item.classList.remove('spec-table-top-item-active');
  110.             });
  111.             item.classList.add('spec-table-top-item-active');
  112.             // show spec table body
  113.             document.querySelectorAll('.spec-table-body').forEach(item => {
  114.             if (item.id !== `spec_${item.dataset.id}`) {
  115.                 item.style.display = 'none';
  116.             }
  117.             });
  118.             document.getElementById(`spec_${item.dataset.id}`).style.display = 'flex';
  119.         });
  120.         });
  121.     }, 0);
  122. });
  123.   </script>
  124. {% endblock %}
  125. {% block main %}
  126. {% set totalQuantity = get_carts_total_quantity() %}
  127.   <!-- Banner Section -->
  128.   <div class="banner">
  129.     {# banner slide image #}
  130.     <div class="banner-slide-swiper-wrapper">
  131.       <div class="banner-slide-container" id="bannerSlideContainerId">
  132.         <div class="banner-slide-track">
  133.           <div class="banner-slide-item">
  134.             <img class="banner-slide-image" src="{{ asset('assets/img/default/banner/full_bg_long.webp') }}" alt="Banner Slide 1" >
  135.           </div>
  136.           <div class="banner-slide-item">
  137.             <img class="banner-slide-image" src="{{ asset('assets/img/default/banner/full_bg_long.webp') }}" alt="Banner Slide 2" >
  138.           </div>
  139.           <div class="banner-slide-item">
  140.             <img class="banner-slide-image" src="{{ asset('assets/img/default/banner/full_bg_long.webp') }}" alt="Banner Slide 3" >
  141.           </div>
  142.           {# Duplicate for seamless loop #}
  143.           <div class="banner-slide-item">
  144.             <img class="banner-slide-image" src="{{ asset('assets/img/default/banner/full_bg_long.webp') }}" alt="Banner Slide 1" >
  145.           </div>
  146.           <div class="banner-slide-item">
  147.             <img class="banner-slide-image" src="{{ asset('assets/img/default/banner/full_bg_long.webp') }}" alt="Banner Slide 2" >
  148.           </div>
  149.           <div class="banner-slide-item">
  150.             <img class="banner-slide-image" src="{{ asset('assets/img/default/banner/full_bg_long.webp') }}" alt="Banner Slide 3" >
  151.           </div>
  152.         </div>
  153.       </div>
  154.     </div>
  155.     {# banner slide text #}
  156.     <div class="banner-slide-swiper-wrapper banner-slide-text-swiper-text">
  157.       <div class="banner-slide-container" id="bannerSlideTextContainerId">
  158.         <div class="banner-slide-track banner-slide-track-reverse">
  159.           <div class="banner-slide-item">
  160.             <img class="banner-slide-image" src="{{ asset('assets/img/default/banner/full_bg_bottom_long.png') }}" alt="Banner Slide 1" >
  161.           </div>
  162.           <div class="banner-slide-item">
  163.             <img class="banner-slide-image" src="{{ asset('assets/img/default/banner/full_bg_bottom_long.png') }}" alt="Banner Slide 2" >
  164.           </div>
  165.           <div class="banner-slide-item">
  166.             <img class="banner-slide-image" src="{{ asset('assets/img/default/banner/full_bg_bottom_long.png') }}" alt="Banner Slide 3" >
  167.           </div>
  168.           {# Duplicate for seamless loop #}
  169.           <div class="banner-slide-item">
  170.             <img class="banner-slide-image" src="{{ asset('assets/img/default/banner/full_bg_bottom_long.png') }}" alt="Banner Slide 1" >
  171.           </div>
  172.           <div class="banner-slide-item">
  173.             <img class="banner-slide-image" src="{{ asset('assets/img/default/banner/full_bg_bottom_long.png') }}" alt="Banner Slide 2" >
  174.           </div>
  175.           <div class="banner-slide-item">
  176.             <img class="banner-slide-image" src="{{ asset('assets/img/default/banner/full_bg_bottom_long.png') }}" alt="Banner Slide 3" >
  177.           </div>
  178.         </div>
  179.       </div>
  180.     </div>
  181.     <!-- Decorative Text Left -->
  182.     <div class="banner__text-left">
  183.     </div>
  184.     <div class="container-desktop relative">
  185.       <!-- Logo Header -->
  186.       <div class="banner__logo">
  187.           <img src="{{ asset('assets/img/default/icons/logo.png') }}" alt="Logo">
  188.       </div>
  189.       <!-- Navigation Menu -->
  190.       <nav class="banner__nav">
  191.         {% if is_granted('ROLE_USER') %}
  192.           <a href="{{ url('mypage') }}" class="nav__item text-black">
  193.             <img src="{{ asset('assets/img/default/icons/icon-user.svg') }}" alt="User" class="nav__icon">
  194.             <span>マイページ</span>
  195.           </a>
  196.           <a href="{{ url('logout') }}" class="nav__item text-black">
  197.             <img src="{{ asset('assets/img/default/icons/icon-logout.svg') }}" alt="Logout" class="nav__icon">
  198.             <span>ログアウト</span>
  199.           </a>
  200.         {% else %}
  201.             <a href="{{ url('entry') }}" class="nav__item text-black">
  202.                 <img src="{{ asset('assets/img/default/icons/icon-edit.svg') }}" alt="Register" class="nav__icon">
  203.                 <span>会員登録</span>
  204.             </a>
  205.             <a href="{{ url('mypage_login') }}" class="nav__item text-black">
  206.                 <img src="{{ asset('assets/img/default/icons/icon-lock.svg') }}" alt="Login" class="nav__icon">
  207.                 <span>ログイン</span>
  208.             </a>
  209.         {% endif %}
  210.         <a href="{{ url('product_list') }}" class="nav__item nav__item--search text-black">
  211.           <img src="{{ asset('assets/img/default/icons/icon-search.svg') }}" alt="Search" class="nav__icon">
  212.           <span>商品を探す</span>
  213.         </a>
  214.         <a href="{{ url('cart') }}" class="nav__item text-black relative">
  215.           {% if totalQuantity > 0 %}
  216.             <span class="nav__item-badge">{{ totalQuantity|number_format }}</span>
  217.           {% endif %}
  218.           <img src="{{ asset('assets/img/default/icons/icon-cart.svg') }}" alt="Cart" class="nav__icon">
  219.           <span>カート</span>
  220.         </a>
  221.         <a href="{{ url('contact') }}" class="nav__item text-black">
  222.           <img src="{{ asset('assets/img/default/icons/icon-email.svg') }}" alt="Contact" class="nav__icon">
  223.           <span>お問い合わせ</span>
  224.         </a>
  225.         <a href="javascript:void(0);" onclick="linkToMypage()" class="nav__item nav__item--primary">
  226.           <img src="{{ asset('assets/img/default/icons/icon-charger.svg') }}" alt="Charge" class="nav__icon">
  227.           <span>ギガをチャージ</span>
  228.         </a>
  229.       </nav>
  230.     </div>
  231.     <!-- Decorative Text Right -->
  232.     <div class="banner__text-right">
  233.     </div>
  234.   </div>
  235.   <!-- slider section -->
  236.   {% if banners|length > 0 %}
  237.   <div class="slider">
  238.     <div class="swiper productSlider" id="bannerSliderId">
  239.       <div class="swiper-wrapper">
  240.         {% for Banner in banners %}
  241.           <div class="swiper-slide">
  242.             <div class="slider__card">
  243.               <a onclick="if ('{{ Banner.linkUrl }}') { window.open('{{ Banner.linkUrl }}', '_blank') }">
  244.                 <div class="slider__card-image">
  245.                   <img src="{{ asset(Banner.imagePath, 'save_image') }}" alt="{{ Banner.title }}">
  246.                 </div>
  247.               </a>
  248.             </div>
  249.           </div>
  250.         {% endfor %}
  251.       </div>
  252.       <!-- Pagination dots -->
  253.       <div class="swiper-pagination productSlider-pagination"></div>
  254.       <!-- Navigation buttons -->
  255.       <div class="productSlider-navigation">
  256.         <button class="productSlider-button productSlider-button-prev">
  257.           <img src="{{ asset('assets/img/default/icons/icon-arrow-left-nav.svg') }}" alt="Previous">
  258.         </button>
  259.         <button class="productSlider-button productSlider-button-next">
  260.           <img src="{{ asset('assets/img/default/icons/icon-arrow-right-nav.svg') }}" alt="Next">
  261.         </button>
  262.       </div>
  263.     </div>
  264.   </div>
  265.   {% endif %}
  266.   <!-- section 1 -->
  267.   <div class="section-1">
  268.     <div class="top-image-mobile">
  269.       <img src="{{ asset('assets/img/default/banner/right_banner.png') }}" alt="section-1" loading="lazy">
  270.     </div>
  271.     <div class="section-1-wrapper container-1200">
  272.       <div class="left_content">
  273.           <img class="left_content_image" src="{{ asset('assets/img/default/banner/top_banner.png') }}" alt="section-1" loading="lazy">
  274.           <div class="left_content_text container-desktop">
  275.             <p class="mb-8">CHEETAH WiFiとは契約、返却や月額料金なし、必要な時に必要な分ギガを買い切りで追加<br>チャージするだけですぐに利用できるポケットWiFiです。</p>
  276.             <p>追加できるギガは10GB・30GB・50GB・100GB、追加から365日間の有効期間があります。docomo・au・Softbankの3大キャリアはもちろん、主要な136カ国に対応しています。</p>
  277.           </div>
  278.           <div class="left_content_text container-mobile">
  279.             <p class="mb-8">CHEETAH WiFiとは契約、返却や月額料金なし、必要な時に必要な分ギガを買い切りで追加チャージするだけですぐに利用できるポケットWiFiです。</p>
  280.             <p>追加できるギガは10GB・30GB・50GB・100GB、追加から365日間の有効期間があります。docomo・au・Softbankの3大キャリアはもちろん、主要な136カ国に対応しています。</p>
  281.           </div>
  282.         </div>
  283.       <div class="right_content">
  284.         <img class="right_content_image" src="{{ asset('assets/img/default/banner/right_banner.png') }}" alt="section-1" loading="lazy">
  285.       </div>
  286.     </div>
  287.     <div class="curved-background"></div>
  288.   </div>
  289.   <!-- ranking section -->
  290.   <div class="ranking-section" id="ranking-section">
  291.     <div class="container-1200">
  292.     <div class="ranking-header-wrapper mb-40">
  293.       <div class="ranking-header mr-40">
  294.         <div class="title-base-subtitle">
  295.           <img src="{{ asset('assets/img/default/icons/icon-ranking.svg') }}" alt="Ranking" class="title-base-icon" loading="lazy">
  296.           <span>注目の商品</span>
  297.         </div>
  298.         <h2 class="title-base-title">PRODUCTS</h2>
  299.       </div>
  300.       <a href="{{ url('product_list') }}" class="btn-primary">
  301.         <span>商品一覧をみる</span>
  302.         <img src="{{ asset('assets/img/default/icons/icon-arrow-right-black.svg') }}" alt="Arrow" class="btn-arrow-black" loading="lazy">
  303.       </a>
  304.     </div>
  305.     {% if top_ranking_products|length > 0 %}
  306.       <!-- Main Ranking Item (No.1) -->
  307.       {# <div class="ranking-main">
  308.         <div class="ranking-card ranking-card--large">
  309.           <a href="{{ url('product_detail', {'id': firstProduct.id}) }}">
  310.             <div class="ranking-card__image">
  311.               <img src="{{ asset(firstProduct.main_list_image|no_image_product, 'save_image') }}" alt="{{ firstProduct.name }}" loading="lazy">
  312.             </div>
  313.           </a>
  314.           <div class="ranking-card__badge">No.1</div>
  315.           <div class="ranking-card__favorite">
  316.             <img src="{{ asset('assets/img/default/icons/icon-heart.svg') }}" alt="Favorite" loading="lazy">
  317.           </div>
  318.         </div>
  319.         <div class="ranking-info">
  320.           <h3 class="ranking-info__title" data-bs-toggle="tooltip" data-bs-placement="top" title="{{ firstProduct.name }}">{{ firstProduct.name }}</h3>
  321.           <div class="ranking-info__price">
  322.             <span class="price-symbol">¥</span>
  323.             <span class="price-amount">
  324.               {% if firstProduct.hasProductClass %}
  325.                 {% if firstProduct.getPrice02IncTaxMin == firstProduct.getPrice02IncTaxMax %}
  326.                   {{ firstProduct.getPrice02IncTaxMin|number_format }}
  327.                 {% else %}
  328.                   {{ firstProduct.getPrice02IncTaxMin|number_format }} ~ {{ firstProduct.getPrice02IncTaxMax|number_format }}
  329.                 {% endif %}
  330.               {% else %}
  331.                 {{ firstProduct.getPrice02IncTaxMin|number_format }}
  332.               {% endif %}
  333.             </span>
  334.             <span class="price-tax">(税込)</span>
  335.           </div>
  336.         </div>
  337.       </div> #}
  338.       <!-- Divider Line -->
  339.       <div class="ranking-divider"></div>
  340.       <!-- Ranking items (up to 4; missing IDs are skipped) -->
  341.       <div class="ranking-grid">
  342.         {% for Product in top_ranking_products %}
  343.           <div class="ranking-item">
  344.             <div class="ranking-card ranking-card--small">
  345.               <a href="{{ url('product_detail', {'id': Product.id}) }}">
  346.                 <div class="ranking-card__image">
  347.                   <img src="{{ asset(Product.main_list_image|no_image_product, 'save_image') }}" alt="{{ Product.name }}" loading="lazy">
  348.                 </div>
  349.               </a>
  350.               {# <div class="ranking-card__badge">No.{{ loop.index }}</div> #}
  351.               <div class="ranking-card__favorite">
  352.                 <img src="{{ asset('assets/img/default/icons/icon-heart.svg') }}" alt="Favorite" loading="lazy">
  353.               </div>
  354.             </div>
  355.             <div class="ranking-item__info">
  356.               <a href="{{ url('product_detail', {'id': Product.id}) }}">
  357.                 <h4 class="ranking-item__title" data-bs-toggle="tooltip" data-bs-placement="top" title="{{ Product.name }}">{{ Product.name }}</h4>
  358.               </a>
  359.               <div class="ranking-item__price">
  360.                 <span class="price-symbol">¥</span>
  361.                 <span class="price-amount">
  362.                   {% if Product.hasProductClass %}
  363.                     {% if Product.getPrice02IncTaxMin == Product.getPrice02IncTaxMax %}
  364.                       {{ Product.getPrice02IncTaxMin|number_format }}
  365.                     {% else %}
  366.                       {{ Product.getPrice02IncTaxMin|number_format }} ~ {{ Product.getPrice02IncTaxMax|number_format }}
  367.                     {% endif %}
  368.                   {% else %}
  369.                     {{ Product.getPrice02IncTaxMin|number_format }}
  370.                   {% endif %}
  371.                 </span>
  372.                 <span class="price-tax">(税込)</span>
  373.               </div>
  374.             </div>
  375.           </div>
  376.         {% endfor %}
  377.       </div>
  378.     {% else %}
  379.       <!-- Fallback nếu không có sản phẩm ranking -->
  380.     {% endif %}
  381.   </div>
  382.   </div>
  383.   <!-- banner 2 -->
  384.   <div class="banner-2">
  385.   </div>
  386.   <!-- news -->
  387.   <div class="news-section">
  388.     <div class="container-1200">
  389.       <div class="news-header">
  390.         <div class="news-title-wrapper">
  391.           <div class="title-base-subtitle" style="margin-top: 16px;">
  392.             <img src="{{ asset('assets/img/default/icons/icon-news.svg') }}" alt="News" class="title-base-icon" loading="lazy">
  393.             <span>お知らせ</span>
  394.           </div>
  395.           <h2 class="title-base-title news-title-desktop">NEWS</h2>
  396.           <a class="btn-primary news-list-btn news-list-btn-desktop" href="{{ url('news_list') }}">
  397.             <span>お知らせ一覧をみる</span>
  398.             <img src="{{ asset('assets/img/default/icons/icon-arrow-right-black.svg') }}" alt="Arrow" class="btn-arrow-black" loading="lazy">
  399.           </a>
  400.         </div>
  401.         <div class="news-list-wrapper pt-0" id="news-list-id">
  402.             {% set NewsList = repository('Eccube\\Entity\\News').getList()|slice(0, 5) %}
  403.             <div class="news-list">
  404.             {% for News in NewsList %}
  405.                 <a href="{{ url('news_detail', {id: News.id}) }}" class="news-item">
  406.                   <div class="news-date container-desktop">{{ News.publishDate|date('Y.m.d') }}</div>
  407.                   <div class="news-title container-desktop text-black">
  408.                     <span class="text-black">{{ News.title }}</span>
  409.                   </div>
  410.                   <div class="news-wrapper-mobile container-mobile">
  411.                     <div class="news-date news-date-mobile">{{ News.publishDate|date('Y.m.d') }}</div>
  412.                     <div class="news-title news-title-mobile text-black">
  413.                       <span class="text-black">{{ News.title }}</span>
  414.                     </div>
  415.                   </div>
  416.                   <div class="news-arrow">
  417.                     <img src="{{ asset('assets/img/default/icons/icon-arrow-gray.svg') }}" alt="Arrow">
  418.                   </div>
  419.                 </a>
  420.             {% else %}
  421.                 <p class="no-news">お知らせはありません。</p>
  422.             {% endfor %}
  423.             </div>
  424.         </div>
  425.         <a class="btn-primary news-list-btn news-list-btn-mobile" href="{{ url('news_list') }}">
  426.           <span>お知らせ一覧をみる</span>
  427.           <img src="{{ asset('assets/img/default/icons/icon-arrow-right-black.svg') }}" alt="Arrow" class="btn-arrow-black" loading="lazy">
  428.         </a>
  429.       </div>
  430.     </div>
  431.   </div>
  432.   <!-- feature section -->
  433.   <div class="feature-section">
  434.     <div class="container-1200">
  435.       <div class="feature-header mt-120 mb-40">
  436.         <div class="title-base-subtitle">
  437.           <img src="{{ asset('assets/img/default/icons/icon-features.svg') }}" alt="Feature" class="title-base-icon" loading="lazy">
  438.           <span>サービスの特徴</span>
  439.         </div>
  440.         <h2 class="title-base-title">FEATURES</h2>
  441.       </div>
  442.     </div>
  443.     <div class="container-1200 container-1200-desktop">
  444.       <div class="feature-grid">
  445.       <!-- Feature Card 1 -->
  446.       <div class="feature-card">
  447.         <div class="feature-card__icon">
  448.           <img src="{{ asset('assets/img/default/icons/icon-yen.svg') }}" alt="Yen" loading="lazy">
  449.         </div>
  450.         <div class="feature-card__content">
  451.           <div class="feature-card__badge">月額費用なし</div>
  452.           <p class="feature-card__description">必要な時だけチャージして使用可能</p>
  453.         </div>
  454.       </div>
  455.       <!-- Feature Card 2 -->
  456.       <div class="feature-card">
  457.         <div class="feature-card__icon">
  458.           <img src="{{ asset('assets/img/default/icons/icon-clock.svg') }}" alt="Clock" loading="lazy">
  459.         </div>
  460.         <div class="feature-card__content">
  461.           <div class="feature-card__badge">即時チャージ対応</div>
  462.           <p class="feature-card__description">マイページから24時間いつでも即チャージ</p>
  463.         </div>
  464.       </div>
  465.       <!-- Feature Card 3 -->
  466.       <div class="feature-card">
  467.         <div class="feature-card__icon">
  468.           <img src="{{ asset('assets/img/default/icons/icon-easy.svg') }}" alt="Easy" loading="lazy">
  469.         </div>
  470.         <div class="feature-card__content">
  471.           <div class="feature-card__badge">簡単すぐ使える</div>
  472.           <p class="feature-card__description">面倒な手続き不要、届いたらすぐ利用可能</p>
  473.         </div>
  474.       </div>
  475.       <!-- Feature Card 4 -->
  476.       <div class="feature-card">
  477.         <div class="feature-card__icon">
  478.           <img src="{{ asset('assets/img/default/icons/icon-world.svg') }}" alt="World" loading="lazy">
  479.         </div>
  480.         <div class="feature-card__content">
  481.           <div class="feature-card__badge">世界130カ国対応</div>
  482.           <p class="feature-card__description">海外でもそのまま使える</p>
  483.         </div>
  484.       </div>
  485.       <!-- Star Icon -->
  486.       <div class="feature-star">
  487.         <img src="{{ asset('assets/img/default/icons/icon-star.svg') }}" alt="Star" loading="lazy">
  488.       </div>
  489.       </div>
  490.     </div>
  491.   </div>
  492.   <!-- how to use section -->
  493.   <div class="how-to-use-section">
  494.     <div class="container-1200">
  495.       <div class="how-to-use-wrapper mt-120 mb-40">
  496.         <img class="how-to-use-header-image" src="{{ asset('assets/img/default/banner/how-to-use-header.png') }}" alt="how-to-use-header">
  497.         <div class="how-to-use-header mr-40">
  498.           <div class="title-base-subtitle">
  499.             <img src="{{ asset('assets/img/default/icons/icon-how-to-use.svg') }}" alt="How to Use" class="title-base-icon">
  500.             <span>チャージ方法</span>
  501.           </div>
  502.           <h2 class="title-base-title">HOW TO USE</h2>
  503.         </div>
  504.         <a href="{{ url('users_guide') }}" class="btn-primary">
  505.           <span>ご利用ガイドをみる</span>
  506.           <img src="{{ asset('assets/img/default/icons/icon-arrow-right-black.svg') }}" alt="Arrow" class="btn-arrow-black">
  507.         </a>
  508.       </div>
  509.     </div>
  510.     <div class="how-to-use-slider container-1200">
  511.       <div class="swiper howToUseSwiper" id="howToUseSwiperId">
  512.         <div class="swiper-wrapper">
  513.           <!-- Slide 1 -->
  514.           <div class="swiper-slide">
  515.             <div class="step-card">
  516.               <div class="step-card__header">
  517.                 <div class="step-card__badge">STEP01</div>
  518.                 <h3 class="step-card__title">届いたその日から、すぐに使える</h3>
  519.               </div>
  520.               <div class="step-card__image">
  521.                 <img src="{{ asset('assets/img/default/banner/slider-1.png') }}" alt="Step 1">
  522.               </div>
  523.               <p class="step-card__description">初回購入時にデータがセットになっているため、端末が届いたら電源を入れるだけですぐにインターネットをご利用いただけます。面倒な開通手続きは一切ありません。</p>
  524.             </div>
  525.           </div>
  526.           <!-- Slide 2 -->
  527.           <div class="swiper-slide">
  528.             <div class="step-card">
  529.               <div class="step-card__header">
  530.                 <div class="step-card__badge">STEP02</div>
  531.                 <h3 class="step-card__title">データ残量はいつでも確認</h3>
  532.               </div>
  533.               <div class="step-card__image">
  534.                 <img src="{{ asset('assets/img/default/banner/slider-2.png') }}" alt="Step 2">
  535.               </div>
  536.               <p class="step-card__description">「あとどれくらい使えるかな?」と思ったら、24時間いつでもお客様専用の<a href="javascript:void(0);" onclick="linkToMypage()" class="">マイページ</a>で現在のデータ残量をご確認いただけます。</p>
  537.             </div>
  538.           </div>
  539.           <!-- Slide 3 -->
  540.           <div class="swiper-slide">
  541.             <div class="step-card">
  542.               <div class="step-card__header">
  543.                 <div class="step-card__badge">STEP03</div>
  544.                 <h3 class="step-card__title">オンラインで手軽に追加チャージ</h3>
  545.               </div>
  546.               <div class="step-card__image">
  547.                 <img src="{{ asset('assets/img/default/banner/slider-3.png') }}" alt="Step 3">
  548.               </div>
  549.               <p class="step-card__description">データ残量が少なくなってきたら、<a href="javascript:void(0);" onclick="linkToMypage()" class="">マイページ</a>から簡単に追加データを購入(チャージ)できます。お店へ行く必要もなく、すべてオンラインで完結します。</p>
  550.             </div>
  551.           </div>
  552.           <!-- Slide 4 -->
  553.           <div class="swiper-slide">
  554.             <div class="step-card">
  555.               <div class="step-card__header">
  556.                 <div class="step-card__badge">STEP04</div>
  557.                 <h3 class="step-card__title">購入後、待ち時間なしで即反映</h3>
  558.               </div>
  559.               <div class="step-card__image">
  560.                 <img src="{{ asset('assets/img/default/banner/slider-4.png') }}" alt="Step 4">
  561.               </div>
  562.               <p class="step-card__description">チャージしたデータは、購入手続き完了後すぐに反映されます。急にデータが必要になった時でも、待つことなくインターネットを使い続けられます。</p>
  563.             </div>
  564.           </div>
  565.         </div>
  566.       </div>
  567.       <!-- Navigation and Progress Bar -->
  568.       <div class="slider-controls">
  569.         <!-- Progress Bar -->
  570.         <div class="slider-progress">
  571.           <div class="slider-progress-bar"></div>
  572.         </div>
  573.         <!-- Navigation Buttons -->
  574.         <div class="slider-navigation">
  575.           <button class="slider-nav-btn slider-nav-prev">
  576.             <img src="{{ asset('assets/img/default/icons/icon-arrow-left-nav.svg') }}" alt="Previous">
  577.           </button>
  578.           <button class="slider-nav-btn slider-nav-next">
  579.             <img src="{{ asset('assets/img/default/icons/icon-arrow-right-nav.svg') }}" alt="Next">
  580.           </button>
  581.         </div>
  582.       </div>
  583.     </div>
  584.   </div>
  585.   <!-- my page section -->
  586.   <div class="my-page-section">
  587.     <div class="container-1200">
  588.       <div class="my-page-wrapper mt-120 mb-40">
  589.         <img class="my-page-header-image container-desktop" src="{{ asset('assets/img/default/banner/my-page-header.png') }}" alt="my-page-header" loading="lazy">
  590.         <div class="my-page-header mr-40">
  591.           <div class="title-base-subtitle">
  592.             <img src="{{ asset('assets/img/default/icons/icon-my-page.svg') }}" alt="My Page" class="title-base-icon" loading="lazy">
  593.             <span>マイページ機能について</span>
  594.           </div>
  595.           <h2 class="title-base-title">MY PAGE</h2>
  596.         </div>
  597.         <a href="{{ url('mypage') }}" class="btn-primary">
  598.           <span>マイページをみる</span>
  599.           <img src="{{ asset('assets/img/default/icons/icon-arrow-right-black.svg') }}" alt="Arrow" class="btn-arrow-black" loading="lazy">
  600.         </a>
  601.       </div>
  602.        <div class="my-page-grid">
  603.          <!-- Card 1: ギガのリチャージ -->
  604.          <a class="my-page-card" onclick="linkToMypage()" href="javascript:void(0);">
  605.            <div class="my-page-card__image">
  606.              <img src="{{ asset('assets/img/default/banner/my-page-1.png') }}" alt="ギガのリチャージ" loading="lazy">
  607.            </div>
  608.            <div class="my-page-card__label">ギガのリチャージ</div>
  609.          </a>
  610.          <!-- Card 2: ギガ使用量、有効期間の確認 -->
  611.          <a class="my-page-card" onclick="linkToMypage()" href="javascript:void(0);">
  612.            <div class="my-page-card__image">
  613.              <img src="{{ asset('assets/img/default/banner/my-page-2.png') }}" alt="ギガ使用量、有効期間の確認" loading="lazy">
  614.            </div>
  615.            <div class="my-page-card__label">ギガ使用量、有効期間の確認</div>
  616.          </a>
  617.          <!-- Card 3: 購入情報の確認 -->
  618.          <a class="my-page-card" onclick="linkToHistoryOrder()" href="javascript:void(0);">
  619.            <div class="my-page-card__image">
  620.              <img src="{{ asset('assets/img/default/banner/my-page-3.png') }}" alt="購入情報の確認" loading="lazy">
  621.            </div>
  622.            <div class="my-page-card__label">購入情報の確認</div>
  623.          </a>
  624.          <!-- Card 4: サポート -->
  625.          <a class="my-page-card" href="{{ url('contact') }}">
  626.            <div class="my-page-card__image">
  627.              <img src="{{ asset('assets/img/default/banner/my-page-4.png') }}" alt="サポート" loading="lazy">
  628.            </div>
  629.            <div class="my-page-card__label">サポート</div>
  630.          </a>
  631.        </div>
  632.     </div>
  633.     <img src="{{ asset('assets/img/default/banner/my-page-header.png') }}" alt="My Page" class="my-page-header-mobile container-mobile" loading="lazy">
  634.   </div>
  635.   <!-- SPECIFICATIONS SECTION -->
  636.   <div class="specifications-section">
  637.     <div class="container-1200">
  638.       <div class="specifications-header mt-120 mb-40">
  639.         <div class="title-base-subtitle">
  640.           <img src="{{ asset('assets/img/default/icons/icon-specifications.svg') }}" alt="Specifications" class="title-base-icon" loading="lazy">
  641.           <span>商品スペック・仕様</span>
  642.         </div>
  643.         <h2 class="title-base-title">SPECIFICATIONS</h2>
  644.       </div>
  645.       <div class="specifications-wrapper">
  646.          <div class="specifications-left">
  647.            <div class="specifications-left-table mb-80">
  648.              <!-- Table Header -->
  649.              <div class="spec-table-header">
  650.                <h3>端末スペック</h3>
  651.              </div>
  652.              <div class="spec-table-top">
  653.                 <div class="spec-table-top-item spec-table-top-item-active" data-id="mr1">
  654.                   <div class="spec-table-top-item-text">MR1</div>
  655.                 </div>
  656.                 <div class="spec-table-top-item" data-id="u20">
  657.                   <div class="spec-table-top-item-text">U20</div>
  658.                 </div>
  659.                 {# TODO: tạm ẩn U3
  660.                 <div class="spec-table-top-item" data-id="u3">
  661.                   <div class="spec-table-top-item-text">U3</div>
  662.                 </div>
  663.                 #}
  664.              </div>
  665.              <!-- Table Body -->
  666.              <div class="spec-table-body" style="display: flex;" id="spec_mr1">
  667.               {% set specs = [
  668.                 { label: '最大接続数', value: '10台 (推奨5台)' },
  669.                 { label: 'サイズ', value: '125×68×12mm' },
  670.                 { label: '重量', value: '約133g' },
  671.                 { label: 'バッテリー', value: '3000mAh' },
  672.                 { label: '連続通信時間', value: '約13時間' },
  673.                 { label: '最大通信速度', value: '50Mbps/150Mbps' },
  674.                 { label: 'USBポート', value: 'Type-C(充電用)' },
  675.                 { label: 'WCDMA', value: 'バンド 1/2/4/5/8/19' },
  676.                 { label: 'GSM', value: '850/900/1800/1900' },
  677.                 { label: 'Wi-Fi', value: 'IEEE802.11b/g/n' }
  678.               ] %}
  679.                {% for spec in specs %}
  680.                  <div class="spec-table-row{% if spec.isLast is defined and spec.isLast %} spec-table-row--last{% endif %}">
  681.                    <div class="spec-table-label">{{ spec.label }}</div>
  682.                    <div class="spec-table-value">{{ spec.value|raw }}</div>
  683.                  </div>
  684.                {% endfor %}
  685.              </div>
  686.              <div class="spec-table-body" style="display: none;" id="spec_u20">
  687.               {% set specs = [
  688.                 { label: '最大接続数', value: '8台(推奨5台)' },
  689.                 { label: 'サイズ', value: '120×64×12mm' },
  690.                 { label: '重量', value: '約112g' },
  691.                 { label: 'バッテリー', value: '3000mAh' },
  692.                 { label: '連続通信時間', value: '約13時間' },
  693.                 { label: '最大通信速度', value: '50Mbps/150Mbps' },
  694.                 { label: 'USBポート', value: 'Type-C(充電用)' },
  695.                 { label: 'WCDMA', value: 'バンド 1/2/4/5/8/' },
  696.                 { label: 'GSM', value: '850/900/1800/1900' },
  697.                 { label: 'Wi-Fi', value: 'IEEE802.11b/g/n' }
  698.               ] %}
  699.                {% for spec in specs %}
  700.                  <div class="spec-table-row{% if spec.isLast is defined and spec.isLast %} spec-table-row--last{% endif %}">
  701.                    <div class="spec-table-label">{{ spec.label }}</div>
  702.                    <div class="spec-table-value">{{ spec.value|raw }}</div>
  703.                  </div>
  704.                {% endfor %}
  705.              </div>
  706.              <div class="spec-table-body" style="display: none;" id="spec_u3">
  707.               {% set specs = [
  708.                 { label: '最大接続数', value: '10台 (推奨 5台)' },
  709.                 { label: 'サイズ', value: '126×68×12mm' },
  710.                 { label: '重量', value: '約125 g' },
  711.                 { label: 'バッテリー', value: '3000mAh' },
  712.                 { label: '連続通信時間', value: '約12時間' },
  713.                 { label: '最大通信速度', value: '50Mbps/150Mbps' },
  714.                 { label: 'USBポート', value: 'Type-C (充電用)' },
  715.                 { label: 'WCDMA', value: 'バンド 1/2/4/5/6/8/9/19' },
  716.                 { label: 'GSM', value: '850/900/1800/1900' },
  717.                 { label: 'Wi-Fi', value: 'IEEE802.11b/g/n' }
  718.               ] %}
  719.                {% for spec in specs %}
  720.                  <div class="spec-table-row{% if spec.isLast is defined and spec.isLast %} spec-table-row--last{% endif %}">
  721.                    <div class="spec-table-label">{{ spec.label }}</div>
  722.                    <div class="spec-table-value">{{ spec.value|raw }}</div>
  723.                  </div>
  724.                {% endfor %}
  725.              </div>
  726.            </div>
  727.            <div class="specifications-left-image container-desktop-768">
  728.             <img src="{{ asset('assets/img/default/banner/specifi.png') }}" alt="Specifications Left Image" loading="lazy">
  729.            </div>
  730.          </div>
  731.          <div class="specifications-right">
  732.           <div class="specifications-top-image container-mobile-768 container-1200-full-mobile">
  733.             <img src="{{ asset('assets/img/default/banner/specifi_left.png') }}" alt="Specifications Left Image" loading="lazy">
  734.           </div>
  735.            <!-- Product Card 1: MR1 -->
  736.            <div class="product-card">
  737.              <div class="product-card__image">
  738.                <img src="{{ asset('assets/img/default/banner/spec_1.png') }}" alt="MR1" loading="lazy">
  739.                <div class="product-card__label">MR1</div>
  740.              </div>
  741.              <p class="product-card__description">契約不要、月額料金0円の国内外利用可能なクラウドSIM型Wi-Fiルーター3大キャリアに対応し、選べるギガをチャージして利用できます。</p>
  742.            </div>
  743.            <!-- Product Card 2: U20 -->
  744.            <div class="product-card">
  745.              <div class="product-card__image">
  746.                <img src="{{ asset('assets/img/default/banner/spec_2.png') }}" alt="U20" loading="lazy">
  747.                <div class="product-card__label">U20</div>
  748.              </div>
  749.              <p class="product-card__description">MR1に比べ価格が安く、液晶をなくした事で軽量、薄型を実現し、持ち運びが便利になりました。5GB〜100GBからギガを選び、期間は50日、100日、365日から選べます。30日間無制限プランも用意しています。</p>
  750.            </div>
  751.            <!-- Product Card 3: U3 -->
  752.            {# <div class="product-card">
  753.              <div class="product-card__image">
  754.                <img src="{{ asset('assets/img/default/banner/spec_3.png') }}" alt="U3" loading="lazy">
  755.                <div class="product-card__label">U3</div>
  756.              </div>
  757.              <p class="product-card__description">U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。</p>
  758.            </div> #}
  759.            <div class="specifications-bottom-image container-mobile-768 container-1200-full-mobile">
  760.             <img src="{{ asset('assets/img/default/banner/specifi_right.png') }}" alt="Specifications Right Image" loading="lazy">
  761.           </div>
  762.          </div>
  763.       </div>
  764.     </div>
  765.   </div>
  766.   <div class="text_footer_top">
  767.     <img src="{{ asset('assets/img/default/footer/footer-text-top.png') }}" alt="Footer Text Top" loading="lazy">
  768.   </div>
  769. {% endblock %}