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="title-base-header mb-40">
  293.       <div class="title-base-subtitle">
  294.         <img src="{{ asset('assets/img/default/icons/icon-ranking.svg') }}" alt="Ranking" class="title-base-icon" loading="lazy">
  295.         <span>注目の商品</span>
  296.       </div>
  297.       <h2 class="title-base-title">RANKING</h2>
  298.     </div>
  299.     {% if top_ranking_products|length > 0 %}
  300.       {% set firstProduct = top_ranking_products[0] %}
  301.       {% set otherProducts = top_ranking_products|slice(1, 4) %}
  302.       <!-- Main Ranking Item (No.1) -->
  303.       <div class="ranking-main">
  304.         <div class="ranking-card ranking-card--large">
  305.           <a href="{{ url('product_detail', {'id': firstProduct.id}) }}">
  306.             <div class="ranking-card__image">
  307.               <img src="{{ asset(firstProduct.main_list_image|no_image_product, 'save_image') }}" alt="{{ firstProduct.name }}" loading="lazy">
  308.             </div>
  309.           </a>
  310.           <div class="ranking-card__badge">No.1</div>
  311.           <div class="ranking-card__favorite">
  312.             <img src="{{ asset('assets/img/default/icons/icon-heart.svg') }}" alt="Favorite" loading="lazy">
  313.           </div>
  314.         </div>
  315.         <div class="ranking-info">
  316.           <h3 class="ranking-info__title" data-bs-toggle="tooltip" data-bs-placement="top" title="{{ firstProduct.name }}">{{ firstProduct.name }}</h3>
  317.           <div class="ranking-info__price">
  318.             <span class="price-symbol">¥</span>
  319.             <span class="price-amount">
  320.               {% if firstProduct.hasProductClass %}
  321.                 {% if firstProduct.getPrice02IncTaxMin == firstProduct.getPrice02IncTaxMax %}
  322.                   {{ firstProduct.getPrice02IncTaxMin|number_format }}
  323.                 {% else %}
  324.                   {{ firstProduct.getPrice02IncTaxMin|number_format }} ~ {{ firstProduct.getPrice02IncTaxMax|number_format }}
  325.                 {% endif %}
  326.               {% else %}
  327.                 {{ firstProduct.getPrice02IncTaxMin|number_format }}
  328.               {% endif %}
  329.             </span>
  330.             <span class="price-tax">(税込)</span>
  331.           </div>
  332.           <!-- View More Button -->
  333.           <div class="ranking-view-more">
  334.             <a href="{{ url('product_list') }}" class="btn-primary">
  335.               <span>商品一覧をみる</span>
  336.               <img src="{{ asset('assets/img/default/icons/icon-arrow-right.svg') }}" alt="Arrow" class="btn-arrow" loading="lazy">
  337.             </a>
  338.           </div>
  339.         </div>
  340.       </div>
  341.       <!-- Divider Line -->
  342.       <div class="ranking-divider"></div>
  343.       <!-- Other Ranking Items (No.2 - No.5) -->
  344.       <div class="ranking-grid">
  345.         {% for Product in otherProducts %}
  346.           <div class="ranking-item">
  347.             <div class="ranking-card ranking-card--small">
  348.               <a href="{{ url('product_detail', {'id': Product.id}) }}">
  349.                 <div class="ranking-card__image">
  350.                   <img src="{{ asset(Product.main_list_image|no_image_product, 'save_image') }}" alt="{{ Product.name }}" loading="lazy">
  351.                 </div>
  352.               </a>
  353.               <div class="ranking-card__badge">No.{{ loop.index + 1 }}</div>
  354.               <div class="ranking-card__favorite">
  355.                 <img src="{{ asset('assets/img/default/icons/icon-heart.svg') }}" alt="Favorite" loading="lazy">
  356.               </div>
  357.             </div>
  358.             <div class="ranking-item__info">
  359.               <a href="{{ url('product_detail', {'id': Product.id}) }}">
  360.                 <h4 class="ranking-item__title" data-bs-toggle="tooltip" data-bs-placement="top" title="{{ Product.name }}">{{ Product.name }}</h4>
  361.               </a>
  362.               <div class="ranking-item__price">
  363.                 <span class="price-symbol">¥</span>
  364.                 <span class="price-amount">
  365.                   {% if Product.hasProductClass %}
  366.                     {% if Product.getPrice02IncTaxMin == Product.getPrice02IncTaxMax %}
  367.                       {{ Product.getPrice02IncTaxMin|number_format }}
  368.                     {% else %}
  369.                       {{ Product.getPrice02IncTaxMin|number_format }} ~ {{ Product.getPrice02IncTaxMax|number_format }}
  370.                     {% endif %}
  371.                   {% else %}
  372.                     {{ Product.getPrice02IncTaxMin|number_format }}
  373.                   {% endif %}
  374.                 </span>
  375.                 <span class="price-tax">(税込)</span>
  376.               </div>
  377.             </div>
  378.           </div>
  379.         {% endfor %}
  380.       </div>
  381.     {% else %}
  382.       <!-- Fallback nếu không có sản phẩm ranking -->
  383.     {% endif %}
  384.   </div>
  385.   </div>
  386.   <!-- banner 2 -->
  387.   <div class="banner-2">
  388.   </div>
  389.   <!-- news -->
  390.   <div class="news-section">
  391.     <div class="container-1200">
  392.       <div class="news-header">
  393.         <div class="news-title-wrapper">
  394.           <div class="title-base-subtitle" style="margin-top: 16px;">
  395.             <img src="{{ asset('assets/img/default/icons/icon-news.svg') }}" alt="News" class="title-base-icon" loading="lazy">
  396.             <span>お知らせ</span>
  397.           </div>
  398.           <h2 class="title-base-title news-title-desktop">NEWS</h2>
  399.           <a class="btn-primary news-list-btn news-list-btn-desktop" href="{{ url('news_list') }}">
  400.             <span>お知らせ一覧をみる</span>
  401.             <img src="{{ asset('assets/img/default/icons/icon-arrow-right-black.svg') }}" alt="Arrow" class="btn-arrow-black" loading="lazy">
  402.           </a>
  403.         </div>
  404.         <div class="news-list-wrapper pt-0" id="news-list-id">
  405.             {% set NewsList = repository('Eccube\\Entity\\News').getList()|slice(0, 5) %}
  406.             <div class="news-list">
  407.             {% for News in NewsList %}
  408.                 <a href="{{ url('news_detail', {id: News.id}) }}" class="news-item">
  409.                   <div class="news-date container-desktop">{{ News.publishDate|date('Y.m.d') }}</div>
  410.                   <div class="news-title container-desktop text-black">
  411.                     <span class="text-black">{{ News.title }}</span>
  412.                   </div>
  413.                   <div class="news-wrapper-mobile container-mobile">
  414.                     <div class="news-date news-date-mobile">{{ News.publishDate|date('Y.m.d') }}</div>
  415.                     <div class="news-title news-title-mobile text-black">
  416.                       <span class="text-black">{{ News.title }}</span>
  417.                     </div>
  418.                   </div>
  419.                   <div class="news-arrow">
  420.                     <img src="{{ asset('assets/img/default/icons/icon-arrow-gray.svg') }}" alt="Arrow">
  421.                   </div>
  422.                 </a>
  423.             {% else %}
  424.                 <p class="no-news">お知らせはありません。</p>
  425.             {% endfor %}
  426.             </div>
  427.         </div>
  428.         <a class="btn-primary news-list-btn news-list-btn-mobile" href="{{ url('news_list') }}">
  429.           <span>お知らせ一覧をみる</span>
  430.           <img src="{{ asset('assets/img/default/icons/icon-arrow-right-black.svg') }}" alt="Arrow" class="btn-arrow-black" loading="lazy">
  431.         </a>
  432.       </div>
  433.     </div>
  434.   </div>
  435.   <!-- feature section -->
  436.   <div class="feature-section">
  437.     <div class="container-1200">
  438.       <div class="feature-header mt-120 mb-40">
  439.         <div class="title-base-subtitle">
  440.           <img src="{{ asset('assets/img/default/icons/icon-features.svg') }}" alt="Feature" class="title-base-icon" loading="lazy">
  441.           <span>サービスの特徴</span>
  442.         </div>
  443.         <h2 class="title-base-title">FEATURES</h2>
  444.       </div>
  445.     </div>
  446.     <div class="container-1200 container-1200-desktop">
  447.       <div class="feature-grid">
  448.       <!-- Feature Card 1 -->
  449.       <div class="feature-card">
  450.         <div class="feature-card__icon">
  451.           <img src="{{ asset('assets/img/default/icons/icon-yen.svg') }}" alt="Yen" loading="lazy">
  452.         </div>
  453.         <div class="feature-card__content">
  454.           <div class="feature-card__badge">月額費用なし</div>
  455.           <p class="feature-card__description">必要な時だけチャージして使用可能</p>
  456.         </div>
  457.       </div>
  458.       <!-- Feature Card 2 -->
  459.       <div class="feature-card">
  460.         <div class="feature-card__icon">
  461.           <img src="{{ asset('assets/img/default/icons/icon-clock.svg') }}" alt="Clock" loading="lazy">
  462.         </div>
  463.         <div class="feature-card__content">
  464.           <div class="feature-card__badge">即時チャージ対応</div>
  465.           <p class="feature-card__description">マイページから24時間いつでも即チャージ</p>
  466.         </div>
  467.       </div>
  468.       <!-- Feature Card 3 -->
  469.       <div class="feature-card">
  470.         <div class="feature-card__icon">
  471.           <img src="{{ asset('assets/img/default/icons/icon-easy.svg') }}" alt="Easy" loading="lazy">
  472.         </div>
  473.         <div class="feature-card__content">
  474.           <div class="feature-card__badge">簡単すぐ使える</div>
  475.           <p class="feature-card__description">面倒な手続き不要、届いたらすぐ利用可能</p>
  476.         </div>
  477.       </div>
  478.       <!-- Feature Card 4 -->
  479.       <div class="feature-card">
  480.         <div class="feature-card__icon">
  481.           <img src="{{ asset('assets/img/default/icons/icon-world.svg') }}" alt="World" loading="lazy">
  482.         </div>
  483.         <div class="feature-card__content">
  484.           <div class="feature-card__badge">世界130カ国対応</div>
  485.           <p class="feature-card__description">海外でもそのまま使える</p>
  486.         </div>
  487.       </div>
  488.       <!-- Star Icon -->
  489.       <div class="feature-star">
  490.         <img src="{{ asset('assets/img/default/icons/icon-star.svg') }}" alt="Star" loading="lazy">
  491.       </div>
  492.       </div>
  493.     </div>
  494.   </div>
  495.   <!-- how to use section -->
  496.   <div class="how-to-use-section">
  497.     <div class="container-1200">
  498.       <div class="how-to-use-wrapper mt-120 mb-40">
  499.         <img class="how-to-use-header-image" src="{{ asset('assets/img/default/banner/how-to-use-header.png') }}" alt="how-to-use-header">
  500.         <div class="how-to-use-header mr-40">
  501.           <div class="title-base-subtitle">
  502.             <img src="{{ asset('assets/img/default/icons/icon-how-to-use.svg') }}" alt="How to Use" class="title-base-icon">
  503.             <span>チャージ方法</span>
  504.           </div>
  505.           <h2 class="title-base-title">HOW TO USE</h2>
  506.         </div>
  507.         <a href="{{ url('users_guide') }}" class="btn-primary">
  508.           <span>ご利用ガイドをみる</span>
  509.           <img src="{{ asset('assets/img/default/icons/icon-arrow-right-black.svg') }}" alt="Arrow" class="btn-arrow-black">
  510.         </a>
  511.       </div>
  512.     </div>
  513.     <div class="how-to-use-slider container-1200">
  514.       <div class="swiper howToUseSwiper" id="howToUseSwiperId">
  515.         <div class="swiper-wrapper">
  516.           <!-- Slide 1 -->
  517.           <div class="swiper-slide">
  518.             <div class="step-card">
  519.               <div class="step-card__header">
  520.                 <div class="step-card__badge">STEP01</div>
  521.                 <h3 class="step-card__title">届いたその日から、すぐに使える</h3>
  522.               </div>
  523.               <div class="step-card__image">
  524.                 <img src="{{ asset('assets/img/default/banner/slider-1.png') }}" alt="Step 1">
  525.               </div>
  526.               <p class="step-card__description">初回購入時にデータがセットになっているため、端末が届いたら電源を入れるだけですぐにインターネットをご利用いただけます。面倒な開通手続きは一切ありません。</p>
  527.             </div>
  528.           </div>
  529.           <!-- Slide 2 -->
  530.           <div class="swiper-slide">
  531.             <div class="step-card">
  532.               <div class="step-card__header">
  533.                 <div class="step-card__badge">STEP02</div>
  534.                 <h3 class="step-card__title">データ残量はいつでも確認</h3>
  535.               </div>
  536.               <div class="step-card__image">
  537.                 <img src="{{ asset('assets/img/default/banner/slider-2.png') }}" alt="Step 2">
  538.               </div>
  539.               <p class="step-card__description">「あとどれくらい使えるかな?」と思ったら、24時間いつでもお客様専用の<a href="javascript:void(0);" onclick="linkToMypage()" class="">マイページ</a>で現在のデータ残量をご確認いただけます。</p>
  540.             </div>
  541.           </div>
  542.           <!-- Slide 3 -->
  543.           <div class="swiper-slide">
  544.             <div class="step-card">
  545.               <div class="step-card__header">
  546.                 <div class="step-card__badge">STEP03</div>
  547.                 <h3 class="step-card__title">オンラインで手軽に追加チャージ</h3>
  548.               </div>
  549.               <div class="step-card__image">
  550.                 <img src="{{ asset('assets/img/default/banner/slider-3.png') }}" alt="Step 3">
  551.               </div>
  552.               <p class="step-card__description">データ残量が少なくなってきたら、<a href="javascript:void(0);" onclick="linkToMypage()" class="">マイページ</a>から簡単に追加データを購入(チャージ)できます。お店へ行く必要もなく、すべてオンラインで完結します。</p>
  553.             </div>
  554.           </div>
  555.           <!-- Slide 4 -->
  556.           <div class="swiper-slide">
  557.             <div class="step-card">
  558.               <div class="step-card__header">
  559.                 <div class="step-card__badge">STEP04</div>
  560.                 <h3 class="step-card__title">購入後、待ち時間なしで即反映</h3>
  561.               </div>
  562.               <div class="step-card__image">
  563.                 <img src="{{ asset('assets/img/default/banner/slider-4.png') }}" alt="Step 4">
  564.               </div>
  565.               <p class="step-card__description">チャージしたデータは、購入手続き完了後すぐに反映されます。急にデータが必要になった時でも、待つことなくインターネットを使い続けられます。</p>
  566.             </div>
  567.           </div>
  568.         </div>
  569.       </div>
  570.       <!-- Navigation and Progress Bar -->
  571.       <div class="slider-controls">
  572.         <!-- Progress Bar -->
  573.         <div class="slider-progress">
  574.           <div class="slider-progress-bar"></div>
  575.         </div>
  576.         <!-- Navigation Buttons -->
  577.         <div class="slider-navigation">
  578.           <button class="slider-nav-btn slider-nav-prev">
  579.             <img src="{{ asset('assets/img/default/icons/icon-arrow-left-nav.svg') }}" alt="Previous">
  580.           </button>
  581.           <button class="slider-nav-btn slider-nav-next">
  582.             <img src="{{ asset('assets/img/default/icons/icon-arrow-right-nav.svg') }}" alt="Next">
  583.           </button>
  584.         </div>
  585.       </div>
  586.     </div>
  587.   </div>
  588.   <!-- my page section -->
  589.   <div class="my-page-section">
  590.     <div class="container-1200">
  591.       <div class="my-page-wrapper mt-120 mb-40">
  592.         <img class="my-page-header-image container-desktop" src="{{ asset('assets/img/default/banner/my-page-header.png') }}" alt="my-page-header" loading="lazy">
  593.         <div class="my-page-header mr-40">
  594.           <div class="title-base-subtitle">
  595.             <img src="{{ asset('assets/img/default/icons/icon-my-page.svg') }}" alt="My Page" class="title-base-icon" loading="lazy">
  596.             <span>マイページ機能について</span>
  597.           </div>
  598.           <h2 class="title-base-title">MY PAGE</h2>
  599.         </div>
  600.         <a href="{{ url('mypage') }}" class="btn-primary">
  601.           <span>マイページをみる</span>
  602.           <img src="{{ asset('assets/img/default/icons/icon-arrow-right-black.svg') }}" alt="Arrow" class="btn-arrow-black" loading="lazy">
  603.         </a>
  604.       </div>
  605.        <div class="my-page-grid">
  606.          <!-- Card 1: ギガのリチャージ -->
  607.          <div class="my-page-card">
  608.            <div class="my-page-card__image">
  609.              <img src="{{ asset('assets/img/default/banner/my-page-1.png') }}" alt="ギガのリチャージ" loading="lazy">
  610.            </div>
  611.            <div class="my-page-card__label">ギガのリチャージ</div>
  612.          </div>
  613.          <!-- Card 2: ギガ使用量、有効期間の確認 -->
  614.          <div class="my-page-card">
  615.            <div class="my-page-card__image">
  616.              <img src="{{ asset('assets/img/default/banner/my-page-2.png') }}" alt="ギガ使用量、有効期間の確認" loading="lazy">
  617.            </div>
  618.            <div class="my-page-card__label">ギガ使用量、有効期間の確認</div>
  619.          </div>
  620.          <!-- Card 3: 購入情報の確認 -->
  621.          <div class="my-page-card">
  622.            <div class="my-page-card__image">
  623.              <img src="{{ asset('assets/img/default/banner/my-page-3.png') }}" alt="購入情報の確認" loading="lazy">
  624.            </div>
  625.            <div class="my-page-card__label">購入情報の確認</div>
  626.          </div>
  627.          <!-- Card 4: サポート -->
  628.          <div class="my-page-card">
  629.            <div class="my-page-card__image">
  630.              <img src="{{ asset('assets/img/default/banner/my-page-4.png') }}" alt="サポート" loading="lazy">
  631.            </div>
  632.            <div class="my-page-card__label">サポート</div>
  633.          </div>
  634.        </div>
  635.     </div>
  636.     <img src="{{ asset('assets/img/default/banner/my-page-header.png') }}" alt="My Page" class="my-page-header-mobile container-mobile" loading="lazy">
  637.   </div>
  638.   <!-- SPECIFICATIONS SECTION -->
  639.   <div class="specifications-section">
  640.     <div class="container-1200">
  641.       <div class="specifications-header mt-120 mb-40">
  642.         <div class="title-base-subtitle">
  643.           <img src="{{ asset('assets/img/default/icons/icon-specifications.svg') }}" alt="Specifications" class="title-base-icon" loading="lazy">
  644.           <span>商品スペック・仕様</span>
  645.         </div>
  646.         <h2 class="title-base-title">SPECIFICATIONS</h2>
  647.       </div>
  648.       <div class="specifications-wrapper">
  649.          <div class="specifications-left">
  650.            <div class="specifications-left-table mb-80">
  651.              <!-- Table Header -->
  652.              <div class="spec-table-header">
  653.                <h3>端末スペック</h3>
  654.              </div>
  655.              <div class="spec-table-top">
  656.                 <div class="spec-table-top-item spec-table-top-item-active" data-id="mr1">
  657.                   <div class="spec-table-top-item-text">MR1</div>
  658.                 </div>
  659.                 <div class="spec-table-top-item" data-id="u20">
  660.                   <div class="spec-table-top-item-text">U20</div>
  661.                 </div>
  662.                 {# TODO: tạm ẩn U3
  663.                 <div class="spec-table-top-item" data-id="u3">
  664.                   <div class="spec-table-top-item-text">U3</div>
  665.                 </div>
  666.                 #}
  667.              </div>
  668.              <!-- Table Body -->
  669.              <div class="spec-table-body" style="display: flex;" id="spec_mr1">
  670.               {% set specs = [
  671.                 { label: '最大接続数', value: '10台 (推奨5台)' },
  672.                 { label: 'サイズ', value: '125×68×12mm' },
  673.                 { label: '重量', value: '約133g' },
  674.                 { label: 'バッテリー', value: '3000mAh' },
  675.                 { label: '連続通信時間', value: '約13時間' },
  676.                 { label: '最大通信速度', value: '50Mbps/150Mbps' },
  677.                 { label: 'USBポート', value: 'Type-C(充電用)' },
  678.                 { label: 'WCDMA', value: 'バンド 1/2/4/5/8/19' },
  679.                 { label: 'GSM', value: '850/900/1800/1900' },
  680.                 { label: 'Wi-Fi', value: 'IEEE802.11b/g/n' }
  681.               ] %}
  682.                {% for spec in specs %}
  683.                  <div class="spec-table-row{% if spec.isLast is defined and spec.isLast %} spec-table-row--last{% endif %}">
  684.                    <div class="spec-table-label">{{ spec.label }}</div>
  685.                    <div class="spec-table-value">{{ spec.value|raw }}</div>
  686.                  </div>
  687.                {% endfor %}
  688.              </div>
  689.              <div class="spec-table-body" style="display: none;" id="spec_u20">
  690.               {% set specs = [
  691.                 { label: '最大接続数', value: '8台(推奨5台)' },
  692.                 { label: 'サイズ', value: '120×64×12mm' },
  693.                 { label: '重量', value: '約112g' },
  694.                 { label: 'バッテリー', value: '3000mAh' },
  695.                 { label: '連続通信時間', value: '約13時間' },
  696.                 { label: '最大通信速度', value: '50Mbps/150Mbps' },
  697.                 { label: 'USBポート', value: 'Type-C(充電用)' },
  698.                 { label: 'WCDMA', value: 'バンド 1/2/4/5/8/' },
  699.                 { label: 'GSM', value: '850/900/1800/1900' },
  700.                 { label: 'Wi-Fi', value: 'IEEE802.11b/g/n' }
  701.               ] %}
  702.                {% for spec in specs %}
  703.                  <div class="spec-table-row{% if spec.isLast is defined and spec.isLast %} spec-table-row--last{% endif %}">
  704.                    <div class="spec-table-label">{{ spec.label }}</div>
  705.                    <div class="spec-table-value">{{ spec.value|raw }}</div>
  706.                  </div>
  707.                {% endfor %}
  708.              </div>
  709.              <div class="spec-table-body" style="display: none;" id="spec_u3">
  710.               {% set specs = [
  711.                 { label: '最大接続数', value: '10台 (推奨 5台)' },
  712.                 { label: 'サイズ', value: '126×68×12mm' },
  713.                 { label: '重量', value: '約125 g' },
  714.                 { label: 'バッテリー', value: '3000mAh' },
  715.                 { label: '連続通信時間', value: '約12時間' },
  716.                 { label: '最大通信速度', value: '50Mbps/150Mbps' },
  717.                 { label: 'USBポート', value: 'Type-C (充電用)' },
  718.                 { label: 'WCDMA', value: 'バンド 1/2/4/5/6/8/9/19' },
  719.                 { label: 'GSM', value: '850/900/1800/1900' },
  720.                 { label: 'Wi-Fi', value: 'IEEE802.11b/g/n' }
  721.               ] %}
  722.                {% for spec in specs %}
  723.                  <div class="spec-table-row{% if spec.isLast is defined and spec.isLast %} spec-table-row--last{% endif %}">
  724.                    <div class="spec-table-label">{{ spec.label }}</div>
  725.                    <div class="spec-table-value">{{ spec.value|raw }}</div>
  726.                  </div>
  727.                {% endfor %}
  728.              </div>
  729.            </div>
  730.            <div class="specifications-left-image container-desktop-768">
  731.             <img src="{{ asset('assets/img/default/banner/specifi.png') }}" alt="Specifications Left Image" loading="lazy">
  732.            </div>
  733.          </div>
  734.          <div class="specifications-right">
  735.           <div class="specifications-top-image container-mobile-768 container-1200-full-mobile">
  736.             <img src="{{ asset('assets/img/default/banner/specifi_left.png') }}" alt="Specifications Left Image" loading="lazy">
  737.           </div>
  738.            <!-- Product Card 1: MR1 -->
  739.            <div class="product-card">
  740.              <div class="product-card__image">
  741.                <img src="{{ asset('assets/img/default/banner/spec_1.png') }}" alt="MR1" loading="lazy">
  742.                <div class="product-card__label">MR1</div>
  743.              </div>
  744.              <p class="product-card__description">契約不要、月額料金0円の国内外利用可能なクラウドSIM型Wi-Fiルーター3大キャリアに対応し、選べるギガをチャージして利用できます。</p>
  745.            </div>
  746.            <!-- Product Card 2: U20 -->
  747.            <div class="product-card">
  748.              <div class="product-card__image">
  749.                <img src="{{ asset('assets/img/default/banner/spec_2.png') }}" alt="U20" loading="lazy">
  750.                <div class="product-card__label">U20</div>
  751.              </div>
  752.              <p class="product-card__description">MR1に比べ価格が安く、液晶をなくした事で軽量、薄型を実現し、持ち運びが便利になりました。5GB〜100GBからギガを選び、期間は50日、100日、365日から選べます。30日間無制限プランも用意しています。</p>
  753.            </div>
  754.            <!-- Product Card 3: U3 -->
  755.            {# <div class="product-card">
  756.              <div class="product-card__image">
  757.                <img src="{{ asset('assets/img/default/banner/spec_3.png') }}" alt="U3" loading="lazy">
  758.                <div class="product-card__label">U3</div>
  759.              </div>
  760.              <p class="product-card__description">U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。U3の特徴が入ります。</p>
  761.            </div> #}
  762.            <div class="specifications-bottom-image container-mobile-768 container-1200-full-mobile">
  763.             <img src="{{ asset('assets/img/default/banner/specifi_right.png') }}" alt="Specifications Right Image" loading="lazy">
  764.           </div>
  765.          </div>
  766.       </div>
  767.     </div>
  768.   </div>
  769.   <div class="text_footer_top">
  770.     <img src="{{ asset('assets/img/default/footer/footer-text-top.png') }}" alt="Footer Text Top" loading="lazy">
  771.   </div>
  772. {% endblock %}