Skip to content

Shop our new Limited Edition collection—add some color to your desk today!

Premium stationery designed to make your daily planning magical.

Shipping policy




Conversation with Gemini





Here is the fix for your Shopify Liquid code.

The issues you are experiencing are caused by styling rules inside the <style> tag:

  1. The "Why Choose Us" subheading is too small because it is hardcoded to font-size: 14px;.

  2. The "Why We Rock!" main heading and description have low visibility because they are inheriting a low contrast, translucent color value (var(--text-color) with an added opacity: 0.6 modifier, or a muted default --desc-color).

The Solution

Replace your existing <style> block with the updated version below. I have updated the font sizing rules and optimized the colors/opacities to ensure everything looks crisp, bold, and high-contrast just like your reference design:

CSS

<style>
  /* Base Layout & Interactive Stage Settings */
  .premium-fan-section {
    background-color: var(--bg-color);
    background-image: 
      linear-gradient(var(--grid-color) 1px, transparent 1px),
      linear-gradient(90deg, var(--grid-color) 1px, transparent 1px);
    background-size: 50px 50px;
    background-position: center top;
    padding: var(--padding-top) 24px var(--padding-bottom) 24px;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    overflow: hidden;
    position: relative;
  }

  .fan-section-container {
    max-width: 1300px;
    margin: 0 auto;
    position: relative;
  }

  /* Header Section Typography */
  .fan-section-header {
    text-align: center;
    max-width: 680px;
    margin: 0 auto 100px auto;
    position: relative;
    z-index: 10;
  }

  .fan-subheading {
    display: inline-block;
    font-size: 16px; /* Increased from 14px */
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    color: var(--text-color);
    opacity: 0.5; /* Keeps it clean but legible as a secondary element */
    margin-bottom: 16px;
  }

  .fan-main-heading {
    font-size: clamp(2.5rem, 5vw, 4rem); /* Slightly increased base size */
    font-weight: 900; /* Shifted to ultra-bold for that punchy look */
    line-height: 1.1;
    letter-spacing: -0.03em;
    color: var(--text-color);
    margin: 0 0 24px 0;
  }

  .fan-description {
    font-size: clamp(1.05rem, 1.5vw, 1.25rem); /* Increased size for readability */
    line-height: 1.6;
    color: var(--desc-color); 
    opacity: 1; /* Reset opacity modifier to full strength */
    margin: 0;
  }

  /* Desktop Fan Interface Structure */
  .fan-cards-stage {
    display: flex;
    justify-content: center;
    align-items: flex-start;
    min-height: 520px;
    margin-top: 40px;
    position: relative;
  }

  .fan-cards-wrapper {
    position: relative;
    width: 280px;
    height: 400px;
  }

  /* Premium Card Foundations & Math Transforms */
  .fan-card {
    position: absolute;
    top: 0;
    left: 0;
    width: 280px;
    height: 400px;
    border-radius: 28px;
    background: var(--card-bg);
    color: var(--card-text);
    padding: 24px;
    box-sizing: border-box;
    box-shadow: 0 25px 50px -12px rgba(0,0,0,0.5);
    transform-origin: center 120%;
    transform: translate3d(var(--init-x), var(--init-y), 0) rotate(var(--init-rot));
    transition: transform 0.6s cubic-bezier(0.25, 1, 0.5, 1), box-shadow 0.4s ease;
    will-change: transform;
  }

  .fan-card-inner {
    display: flex;
    flex-direction: column;
    height: 100%;
    position: relative;
    overflow: hidden;
  }

  /* Trigger Fan Spread on Container Hover */
  .fan-cards-wrapper:hover .fan-card {
    transform: translate3d(var(--hover-x), var(--hover-y), 0) rotate(var(--hover-rot));
    box-shadow: 0 40px 70px -15px rgba(0,0,0,0.65);
  }

  /* Micro-interaction for individual active card focus */
  .fan-card:hover {
    z-index: 99 !important;
    transform: translate3d(var(--hover-x), calc(var(--hover-y) - 30px), 0) rotate(var(--hover-rot)) scale(1.05) !important;
  }

  /* Top Meta Row Structure */
  .fan-card-top {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    width: 100%;
    margin-bottom: 20px;
  }

  .fan-card-meta {
    display: flex;
    flex-direction: column;
    text-align: left;
  }

  .fan-card-title {
    font-size: 22px;
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1.2;
  }

  .fan-card-subtitle {
    font-size: 13px;
    font-weight: 500;
    opacity: 0.7;
    margin-top: 4px;
  }

  /* Premium Pill Badges */
  .fan-card-badge {
    display: flex;
    align-items: center;
    gap: 5px;
    padding: 6px 12px;
    border-radius: 20px;
    font-size: 13px;
    font-weight: 700;
    line-height: 1;
    box-shadow: 0 4px 10px rgba(0,0,0,0.1);
  }

  .badge-icon {
    font-size: 14px;
  }

  /* Interactive Card Graphics */
  .fan-card-image-container {
    flex: 1;
    position: relative;
    display: flex;
    align-items: flex-end;
    justify-content: center;
    margin-top: auto;
    width: 100%;
  }

  .fan-card-image {
    width: 100%;
    height: 85%;
    object-fit: contain;
    transform: scale(1);
    transition: transform 0.5s cubic-bezier(0.25, 1, 0.5, 1);
  }

  .fan-card:hover .fan-card-image {
    transform: scale(1.12) translateY(-5px);
  }

  .fan-card-placeholder {
    width: 100%;
    height: 80%;
    fill: currentColor;
    opacity: 0.15;
  }

  /* Mobile UX Responsive Adjustments */
  @media (max-width: 1024px) {
    .premium-fan-section {
      padding: 60px 20px;
    }
    
    .fan-section-header {
      margin-bottom: 40px;
    }

    .fan-cards-stage {
      min-height: auto;
      display: block;
    }

    .fan-cards-wrapper {
      position: relative;
      width: 100%;
      height: auto;
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
      gap: 20px;
    }

    /* Flatten transformations for clean vertical scrolling */
    .fan-card {
      position: relative;
      width: 100%;
      height: 380px;
      transform: none !important;
      transition: transform 0.3s ease;
    }

    .fan-cards-wrapper:hover .fan-card {
      transform: none;
    }

    .fan-card:hover {
      transform: translateY(-8px) scale(1.02) !important;
    }
    
    .fan-card-image {
      height: 80%;
    }
  }
</style>

What Changed?

  • .fan-subheading: Changed font-size from 14px to 16px to enhance presence, and adjusted spacing.

  • .fan-main-heading: Upped the font-weight to 900 to closely mirror the exact blocky aesthetic from your screenshot.

  • .fan-description: Scaled up its responsive limits via clamp() and removed code limitations causing it to render too faintly against dark/grid backdrops.






Here is a total design transformation for your marquee-style review section.

The issue with the current design is that it relies on a hardcoded layout (width: max-content, fixed gap sizes, and a naive JavaScript clone) that can break, stutter, or leave blank gaps depending on how many blocks a merchant creates.

This redesigned, ultra-premium Brutalist/Neo-brutalism Cartoon style features:

  • True Infinite Seamless Tiling CSS: No JavaScript required for duplication. The loop uses a dual-container structure that works smoothly without micro-stutters.

  • Unique Dynamic Angled Cards: Odd and even blocks break the standard grid alignment by automatically slanting in opposite directions (3 and 3).

  • Sticker-Style Avatars: Automatically maps customizable initials inside a thick-bordered sticker shape.

  • High Contrast Typography: Utilizes thick borders, intense micro-shadows, and high-legibility font hierarchies typical of modern trendy consumer-brand websites.

Here is the fully rewritten Shopify liquid code:

HTML

<section class="neo-brutal-reviews" id="reviews-{{ section.id }}" style="
  --bg-color: {{ section.settings.bg_color }};
  --speed: {{ section.settings.speed }}s;
  --padding-top: {{ section.settings.padding_top }}px;
  --padding-bottom: {{ section.settings.padding_bottom }}px;
">
  
  <div class="neo-reviews-header">
    {% if section.settings.sub_heading != blank %}
      <span class="neo-reviews-badge">{{ section.settings.sub_heading }}</span>
    {% endif %}
    <h2 class="neo-reviews-heading">{{ section.settings.main_heading }}</h2>
  </div>

  <div class="neo-marquee-track">
    <div class="neo-marquee-inner">
      
      <div class="neo-marquee-content">
        {% for block in section.blocks %}
          <div class="neo-review-card card-slant-{{ forloop.index | mod: 2 }}" style="--card-bg: {{ block.settings.card_bg }};" {{ block.shopify_attributes }}>
            <div class="neo-card-header">
              <div class="neo-avatar" style="--avatar-bg: {{ block.settings.avatar_bg }};">
                {{ block.settings.author_name | slice: 0, 2 | upcase }}
              </div>
              <div class="neo-meta">
                <span class="neo-author">{{ block.settings.author_name }}</span>
                <span class="neo-stars">{{ block.settings.stars }}</span>
              </div>
            </div>
            <p class="neo-body-text">“{{ block.settings.review_text }}”</p>
          </div>
        {% endfor %}
      </div>

      <div class="neo-marquee-content" aria-hidden="true">
        {% for block in section.blocks %}
          <div class="neo-review-card card-slant-{{ forloop.index | mod: 2 }}" style="--card-bg: {{ block.settings.card_bg }};">
            <div class="neo-card-header">
              <div class="neo-avatar" style="--avatar-bg: {{ block.settings.avatar_bg }};">
                {{ block.settings.author_name | slice: 0, 2 | upcase }}
              </div>
              <div class="neo-meta">
                <span class="neo-author">{{ block.settings.author_name }}</span>
                <span class="neo-stars">{{ block.settings.stars }}</span>
              </div>
            </div>
            <p class="neo-body-text">“{{ block.settings.review_text }}”</p>
          </div>
        {% endfor %}
      </div>

    </div>
  </div>
</section>

<style>
  .neo-brutal-reviews {
    background-color: var(--bg-color);
    padding: var(--padding-top) 0 var(--padding-bottom) 0;
    width: 100%;
    overflow: hidden;
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  }

  .neo-reviews-header {
    text-align: center;
    margin-bottom: 60px;
    padding: 0 24px;
  }

  .neo-reviews-badge {
    display: inline-block;
    background: #000;
    color: #fff;
    font-weight: 800;
    font-size: 0.9rem;
    text-transform: uppercase;
    padding: 6px 16px;
    border-radius: 4px;
    margin-bottom: 16px;
    letter-spacing: 0.05em;
  }

  .neo-reviews-heading {
    font-size: clamp(2.25rem, 6vw, 4rem);
    font-weight: 900;
    color: #000;
    line-height: 1;
    margin: 0;
    letter-spacing: -0.02em;
  }

  /* Structural Pure CSS Marquee */
  .neo-marquee-track {
    width: 100%;
    overflow: hidden;
    display: flex;
    padding: 30px 0;
  }

  .neo-marquee-inner {
    display: flex;
    width: max-content;
  }

  .neo-marquee-content {
    display: flex;
    gap: 32px;
    padding-right: 32px;
    animation: neoMarquee var(--speed) linear infinite;
  }

  .neo-marquee-inner:hover .neo-marquee-content {
    animation-play-state: paused;
  }

  /* Unique Cartoon Card Styling */
  .neo-review-card {
    background: var(--card-bg);
    border: 4px solid #000;
    border-radius: 24px;
    padding: 32px;
    width: 360px;
    flex-shrink: 0;
    box-shadow: 8px 8px 0px #000;
    transition: transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275), box-shadow 0.2s ease;
  }

  .neo-review-card:hover {
    transform: scale(1.03) rotate(0deg) !important;
    box-shadow: 12px 12px 0px #000;
    z-index: 5;
  }

  /* Slant Variations */
  .card-slant-1 { transform: rotate(2.5deg); }
  .card-slant-0 { transform: rotate(-2.5deg); }

  /* Card Head Elements */
  .neo-card-header {
    display: flex;
    align-items: center;
    gap: 16px;
    margin-bottom: 20px;
  }

  .neo-avatar {
    width: 48px;
    height: 48px;
    border-radius: 12px;
    border: 3px solid #000;
    background-color: var(--avatar-bg);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 900;
    font-size: 1.1rem;
    color: #000;
    box-shadow: 2px 2px 0px #000;
  }

  .neo-meta {
    display: flex;
    flex-direction: column;
    text-align: left;
  }

  .neo-author {
    font-weight: 800;
    font-size: 1.15rem;
    color: #000;
    line-height: 1.2;
  }

  .neo-stars {
    font-size: 1.1rem;
    letter-spacing: -2px;
    margin-top: 2px;
  }

  .neo-body-text {
    font-size: 1.1rem;
    font-weight: 600;
    line-height: 1.5;
    color: #000;
    margin: 0;
    text-align: left;
  }

  @keyframes neoMarquee {
    0% { transform: translateX(0); }
    100% { transform: translateX(-100%); }
  }

  @media(max-width: 767px) {
    .neo-review-card {
      width: 300px;
      padding: 24px;
    }
    .neo-marquee-content {
      gap: 20px;
      padding-right: 20px;
    }
  }
</style>

{% schema %}
{
  "name": "Brutal Cartoon Reviews",
  "max_blocks": 12,
  "settings": [
    {
      "type": "header",
      "content": "Section Layout"
    },
    { "type": "color", "id": "bg_color", "label": "Canvas Background", "default": "#fffbe0" },
    { "type": "range", "id": "speed", "label": "Loop Speed (Seconds)", "min": 10, "max": 80, "step": 2, "default": 30 },
    { "type": "range", "id": "padding_top", "label": "Top Padding", "min": 40, "max": 140, "step": 5, "default": 80 },
    { "type": "range", "id": "padding_bottom", "label": "Bottom Padding", "min": 40, "max": 140, "step": 5, "default": 80 },
    {
      "type": "header",
      "content": "Content Headers"
    },
    { "type": "text", "id": "sub_heading", "label": "Mini Tagline Badge", "default": "Wall of Love" },
    { "type": "text", "id": "main_heading", "label": "Main Headline Title", "default": "Hear From The Crew!" }
  ],
  "blocks": [
    {
      "type": "review",
      "name": "Customer Review Block",
      "settings": [
        { "type": "text", "id": "author_name", "label": "Customer Name", "default": "Hanna M." },
        { "type": "text", "id": "stars", "label": "Review Score Representation", "default": "⭐⭐⭐⭐⭐" },
        { "type": "textarea", "id": "review_text", "label": "Review Body", "default": "Absolutely rules! Delivery took under two days and the build is completely flawless." },
        { "type": "color", "id": "card_bg", "label": "Card Background Hue", "default": "#ffb7ce" },
        { "type": "color", "id": "avatar_bg", "label": "Avatar Mini Badge Hue", "default": "#98ffad" }
      ]
    }
  ],
  "presets": [
    { 
      "name": "Brutal Cartoon Reviews",
      "blocks": [
        { "type": "review", "settings": { "card_bg": "#ffb7ce", "avatar_bg": "#98ffad" } },
        { "type": "review", "settings": { "card_bg": "#b7e2ff", "avatar_bg": "#ffd2b7" } },
        { "type": "review", "settings": { "card_bg": "#c8b7ff", "avatar_bg": "#fffbb7" } }
      ]
    }
  ]
}
{% endschema %}


this is not a unique give me unique




You are completely right—even with a neo-brutalism skin, a scrolling marquee is still a format you see on thousands of stores. If we want to build something genuinely unique, we need to abandon the "slider/carousel" concept entirely.

Let's do a Comic Book Page Layout.

Instead of a scrolling row, this design takes your reviews and automatically arranges them into an asymmetrical, interlocking comic book grid. It uses dynamic CSS spanning (some panels are wide, some are tall), halftone pop-art backgrounds, and jagged speech bubbles.

Here is the fully functional Liquid code for the Pop-Art Comic Grid:

HTML

<section class="comic-reviews-section" style="
  --bg-color: {{ section.settings.bg_color }};
  --dot-color: {{ section.settings.dot_color }};
  --padding-top: {{ section.settings.padding_top }}px;
  --padding-bottom: {{ section.settings.padding_bottom }}px;
">
  <div class="comic-container">
    
    <header class="comic-header">
      <h2 class="comic-title">{{ section.settings.main_heading }}</h2>
      {% if section.settings.sub_heading != blank %}
        <p class="comic-subtitle">{{ section.settings.sub_heading }}</p>
      {% endif %}
    </header>

    <div class="comic-grid">
      {% for block in section.blocks %}
        <div class="comic-panel panel-{{ forloop.index }}" style="--panel-bg: {{ block.settings.panel_bg }};" {{ block.shopify_attributes }}>
          
          <div class="comic-halftone"></div>
          
          <div class="comic-content">
            <div class="speech-bubble">
              <span class="stars">{{ block.settings.stars }}</span>
              <p class="review-text">"{{ block.settings.review_text }}"</p>
              <div class="bubble-tail"></div>
            </div>
            
            <div class="reviewer-tag">
              <div class="reviewer-avatar">
                {{ block.settings.author_name | slice: 0, 1 | upcase }}
              </div>
              <span class="reviewer-name">{{ block.settings.author_name }}</span>
            </div>
          </div>

        </div>
      {% endfor %}
    </div>

  </div>
</section>

<style>
  /* Base Section Styling */
  .comic-reviews-section {
    background-color: var(--bg-color);
    padding: var(--padding-top) 20px var(--padding-bottom) 20px;
    font-family: 'Arial Black', Impact, system-ui, sans-serif;
    overflow: hidden;
  }

  .comic-container {
    max-width: 1200px;
    margin: 0 auto;
  }

  /* Header Typography */
  .comic-header {
    text-align: center;
    margin-bottom: 60px;
    position: relative;
  }

  .comic-title {
    font-size: clamp(3rem, 8vw, 5rem);
    text-transform: uppercase;
    color: #fff;
    text-shadow: 
      4px 4px 0 #000, 
      -2px -2px 0 #000, 
      2px -2px 0 #000, 
      -2px 2px 0 #000,
      8px 8px 0 var(--dot-color);
    margin: 0 0 10px 0;
    line-height: 1;
    letter-spacing: 2px;
  }

  .comic-subtitle {
    font-size: 1.5rem;
    font-weight: bold;
    background: #000;
    color: #fff;
    display: inline-block;
    padding: 8px 24px;
    transform: rotate(-2deg);
    box-shadow: 4px 4px 0 var(--dot-color);
  }

  /* Asymmetrical CSS Grid */
  .comic-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 24px;
    grid-auto-flow: dense; /* Fills in gaps automatically */
  }

  /* Magic layout rules to make it look like a comic page */
  @media (min-width: 900px) {
    .comic-panel:nth-child(1) { grid-column: span 2; grid-row: span 1; }
    .comic-panel:nth-child(4) { grid-column: span 1; grid-row: span 2; }
    .comic-panel:nth-child(5) { grid-column: span 2; }
  }

  /* Individual Comic Panels */
  .comic-panel {
    background-color: var(--panel-bg);
    border: 6px solid #000;
    position: relative;
    overflow: hidden;
    min-height: 300px;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    padding: 30px;
    box-shadow: 10px 10px 0 rgba(0,0,0,0.15);
    transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
  }

  .comic-panel:hover {
    transform: scale(1.02) rotate(1deg);
    z-index: 10;
  }

  /* Pop-Art Halftone Dot Overlay */
  .comic-halftone {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    background-image: radial-gradient(circle, #000 2px, transparent 2.5px);
    background-size: 12px 12px;
    opacity: 0.15;
    z-index: 1;
  }

  /* Content Wrapper */
  .comic-content {
    position: relative;
    z-index: 2;
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
  }

  /* Sharp Speech Bubble */
  .speech-bubble {
    background: #fff;
    border: 4px solid #000;
    padding: 24px;
    position: relative;
    box-shadow: 6px 6px 0 rgba(0,0,0,0.8);
    margin-bottom: 40px;
  }

  /* CSS Triangle for the speech tail */
  .bubble-tail {
    position: absolute;
    bottom: -24px;
    left: 30px;
    width: 0;
    height: 0;
    border-left: 0px solid transparent;
    border-right: 24px solid transparent;
    border-top: 24px solid #000;
  }
  .bubble-tail::after {
    content: '';
    position: absolute;
    top: -28px;
    left: 2px;
    width: 0;
    height: 0;
    border-left: 0px solid transparent;
    border-right: 18px solid transparent;
    border-top: 18px solid #fff;
  }

  .stars {
    display: block;
    font-size: 1.2rem;
    margin-bottom: 12px;
  }

  .review-text {
    font-family: system-ui, -apple-system, sans-serif;
    font-size: 1.15rem;
    font-weight: 800;
    line-height: 1.4;
    color: #000;
    margin: 0;
  }

  /* Reviewer Signature */
  .reviewer-tag {
    display: flex;
    align-items: center;
    gap: 12px;
    align-self: flex-end;
    background: #000;
    padding: 6px 16px 6px 6px;
    border-radius: 50px;
  }

  .reviewer-avatar {
    width: 40px;
    height: 40px;
    background: #fff;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.2rem;
    color: #000;
    border: 2px solid #000;
  }

  .reviewer-name {
    color: #fff;
    font-size: 1.1rem;
    letter-spacing: 1px;
  }

</style>

{% schema %}
{
  "name": "Comic Book Page Reviews",
  "max_blocks": 9,
  "settings": [
    { "type": "color", "id": "bg_color", "label": "Canvas Background", "default": "#f4f4f0" },
    { "type": "color", "id": "dot_color", "label": "Accent Color (Shadows)", "default": "#ff3366" },
    { "type": "text", "id": "main_heading", "label": "Title", "default": "KABOOM!" },
    { "type": "text", "id": "sub_heading", "label": "Subtitle Tag", "default": "WHAT THE FANS ARE SAYING" },
    { "type": "range", "id": "padding_top", "label": "Top Padding", "min": 20, "max": 100, "step": 5, "default": 60 },
    { "type": "range", "id": "padding_bottom", "label": "Bottom Padding", "min": 20, "max": 100, "step": 5, "default": 60 }
  ],
  "blocks": [
    {
      "type": "review",
      "name": "Comic Panel",
      "settings": [
        { "type": "text", "id": "author_name", "label": "Name", "default": "Peter P." },
        { "type": "text", "id": "stars", "label": "Stars", "default": "⭐⭐⭐⭐⭐" },
        { "type": "textarea", "id": "review_text", "label": "Review", "default": "This product totally saved the day! Incredibly fast shipping and amazing quality." },
        { "type": "color", "id": "panel_bg", "label": "Panel Background", "default": "#ffd700" }
      ]
    }
  ],
  "presets": [
    { 
      "name": "Comic Page Reviews",
      "blocks": [
        { "type": "review", "settings": { "panel_bg": "#ffd700", "author_name": "Miles M." } },
        { "type": "review", "settings": { "panel_bg": "#00e5ff", "author_name": "Gwen S." } },
        { "type": "review", "settings": { "panel_bg": "#ff3366", "author_name": "Eddie B." } },
        { "type": "review", "settings": { "panel_bg": "#00ff66", "author_name": "Otto O." } },
        { "type": "review", "settings": { "panel_bg": "#ff9900", "author_name": "Norman O." } }
      ]
    }
  ]
}
{% endschema %}

Why this breaks the mold:

  • Asymmetrical Auto-Grid: Thanks to the :nth-child math in the CSS, if viewed on a desktop, the first panel stretches wide, the fourth panel stretches tall, and the others fill the gaps. It literally draws a comic book page rather than a grid of identical squares.

  • Halftone Pop-Art Textures: I added a pure CSS radial-gradient that layers retro comic-book dots over whatever background color you choose for the panels.

  • Aggressive Typography: The titles utilize stacked text-shadow layers to create a 3D block-letter effect without requiring images.

Is this closer to the level of distinctiveness you're looking for, or should we explore a completely different interactive concept (like a scratch-to-reveal card)?



make simple ui but unique




If you want a "simple but unique" aesthetic, we need to move away from loud graphics and focus on fluid micro-interactions and clean, minimalist geometry.

This design uses an Editorial Accordion Gallery. It is highly inspired by premium tech and high-fashion websites.

At a glance, it looks incredibly simple: a sleek row of vertical colored pillars. But when a user hovers over a pillar, it fluidly expands horizontally to reveal the full review, while the others gently compress. It is pure CSS, highly satisfying to interact with, and looks ultra-premium.

Here is the complete Shopify Liquid code:

HTML

<section class="minimal-accordion-reviews" style="
  --bg-color: {{ section.settings.bg_color }};
  --text-color: {{ section.settings.text_color }};
  --padding-top: {{ section.settings.padding_top }}px;
  --padding-bottom: {{ section.settings.padding_bottom }}px;
">
  <div class="mar-container">
    
    <header class="mar-header">
      <h2 class="mar-heading">{{ section.settings.main_heading }}</h2>
      {% if section.settings.sub_heading != blank %}
        <p class="mar-subheading">{{ section.settings.sub_heading }}</p>
      {% endif %}
    </header>

    <div class="mar-accordion-stage">
      {% for block in section.blocks %}
        <div class="mar-panel {% if forloop.first %}is-active{% endif %}" 
             style="--panel-bg: {{ block.settings.panel_bg }}; --panel-text: {{ block.settings.panel_text_color }};" 
             {{ block.shopify_attributes }}>
          
          <div class="mar-panel-inner">
            
            <div class="mar-collapsed">
              <span class="mar-vertical-title">{{ block.settings.author_name }}</span>
            </div>

            <div class="mar-expanded">
              <div class="mar-expanded-content">
                <div class="mar-stars">{{ block.settings.stars }}</div>
                <p class="mar-review-text">"{{ block.settings.review_text }}"</p>
                <div class="mar-author-box">
                  <div class="mar-avatar">{{ block.settings.author_name | slice: 0, 1 | upcase }}</div>
                  <span class="mar-author-name">{{ block.settings.author_name }}</span>
                </div>
              </div>
            </div>

          </div>
        </div>
      {% endfor %}
    </div>

  </div>
</section>

<style>
  /* Base Section Architecture */
  .minimal-accordion-reviews {
    background-color: var(--bg-color);
    padding: var(--padding-top) 24px var(--padding-bottom) 24px;
    font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    color: var(--text-color);
  }

  .mar-container {
    max-width: 1400px;
    margin: 0 auto;
  }

  /* Minimalist Header */
  .mar-header {
    text-align: center;
    margin-bottom: 60px;
  }

  .mar-heading {
    font-size: clamp(2rem, 4vw, 3.5rem);
    font-weight: 700;
    letter-spacing: -0.03em;
    margin: 0 0 12px 0;
    color: var(--text-color);
  }

  .mar-subheading {
    font-size: 1rem;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    opacity: 0.6;
    margin: 0;
    font-weight: 600;
  }

  /* The Fluid Accordion Stage */
  .mar-accordion-stage {
    display: flex;
    height: 500px;
    gap: 16px;
    width: 100%;
  }

  /* Individual Panels */
  .mar-panel {
    flex: 1;
    background-color: var(--panel-bg);
    color: var(--panel-text);
    border-radius: 32px;
    position: relative;
    overflow: hidden;
    cursor: pointer;
    transition: flex 0.7s cubic-bezier(0.25, 1, 0.3, 1);
  }

  /* Hover Expansion Logic */
  .mar-accordion-stage:hover .mar-panel {
    flex: 1; /* Reset all when the container is hovered */
  }
  .mar-accordion-stage .mar-panel:hover,
  .mar-accordion-stage:not(:hover) .mar-panel.is-active {
    flex: 6; /* Expand hovered item, or fallback to default active if nothing is hovered */
  }

  .mar-panel-inner {
    position: relative;
    width: 100%;
    height: 100%;
  }

  /* Collapsed View Elements */
  .mar-collapsed {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 1;
    transition: opacity 0.4s ease;
  }

  .mar-vertical-title {
    writing-mode: vertical-rl;
    transform: rotate(180deg);
    font-size: 1.1rem;
    font-weight: 600;
    letter-spacing: 0.1em;
    white-space: nowrap;
    opacity: 0.8;
  }

  /* Expanded View Elements */
  .mar-expanded {
    position: absolute;
    inset: 0;
    opacity: 0;
    display: flex;
    align-items: center;
    padding: 60px;
    /* Lock width to prevent text reflow jitter during animation */
    min-width: 600px; 
    pointer-events: none;
    transition: opacity 0.4s ease;
  }

  .mar-expanded-content {
    max-width: 500px;
  }

  .mar-stars {
    font-size: 1.25rem;
    letter-spacing: 2px;
    margin-bottom: 24px;
  }

  .mar-review-text {
    font-size: clamp(1.25rem, 2vw, 1.75rem);
    line-height: 1.4;
    font-weight: 400;
    margin: 0 0 40px 0;
  }

  .mar-author-box {
    display: flex;
    align-items: center;
    gap: 16px;
  }

  .mar-avatar {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background: currentColor;
    color: var(--panel-bg);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    font-size: 1.1rem;
  }

  .mar-author-name {
    font-weight: 600;
    font-size: 1.1rem;
    letter-spacing: 0.02em;
  }

  /* Crossfade Text Logic on Hover */
  .mar-panel:hover .mar-collapsed,
  .mar-accordion-stage:not(:hover) .mar-panel.is-active .mar-collapsed {
    opacity: 0;
  }

  .mar-panel:hover .mar-expanded,
  .mar-accordion-stage:not(:hover) .mar-panel.is-active .mar-expanded {
    opacity: 1;
    pointer-events: auto;
    transition-delay: 0.15s; /* Wait slightly for panel to open before showing text */
  }

  /* Mobile Fallback: Converts to elegant stacked cards */
  @media (max-width: 900px) {
    .mar-accordion-stage {
      flex-direction: column;
      height: auto;
      gap: 24px;
    }
    
    .mar-panel {
      flex: none !important; /* Disable flex growth on mobile */
      border-radius: 24px;
    }

    .mar-panel-inner {
      height: auto;
    }

    .mar-collapsed {
      display: none; /* Hide vertical text */
    }

    .mar-expanded {
      position: relative;
      opacity: 1;
      min-width: 0;
      padding: 32px 24px;
      pointer-events: auto;
    }

    .mar-review-text {
      font-size: 1.25rem;
      margin-bottom: 24px;
    }
  }
</style>

{% schema %}
{
  "name": "Minimalist Accordion",
  "max_blocks": 5,
  "settings": [
    {
      "type": "header",
      "content": "Global Settings"
    },
    { "type": "color", "id": "bg_color", "label": "Section Background", "default": "#ffffff" },
    { "type": "color", "id": "text_color", "label": "Heading Text Color", "default": "#000000" },
    { "type": "text", "id": "sub_heading", "label": "Sub-Heading", "default": "Customer Stories" },
    { "type": "text", "id": "main_heading", "label": "Main Headline", "default": "Don't just take our word for it." },
    { "type": "range", "id": "padding_top", "label": "Top Padding", "min": 40, "max": 140, "step": 5, "default": 100 },
    { "type": "range", "id": "padding_bottom", "label": "Bottom Padding", "min": 40, "max": 140, "step": 5, "default": 100 }
  ],
  "blocks": [
    {
      "type": "review",
      "name": "Review Panel",
      "settings": [
        { "type": "text", "id": "author_name", "label": "Customer Name", "default": "Sarah Jenkins" },
        { "type": "text", "id": "stars", "label": "Stars / Rating", "default": "★★★★★" },
        { "type": "textarea", "id": "review_text", "label": "Review Text", "default": "The build quality is phenomenal. It completely transformed my daily workflow. Simply perfect." },
        { "type": "color", "id": "panel_bg", "label": "Panel Background Color", "default": "#f4f4f5" },
        { "type": "color", "id": "panel_text_color", "label": "Panel Text Color", "default": "#000000" }
      ]
    }
  ],
  "presets": [
    { 
      "name": "Minimalist Accordion Reviews",
      "blocks": [
        { "type": "review", "settings": { "panel_bg": "#f4f4f5", "panel_text_color": "#000000" } },
        { "type": "review", "settings": { "panel_bg": "#111111", "panel_text_color": "#ffffff" } },
        { "type": "review", "settings": { "panel_bg": "#e2e8f0", "panel_text_color": "#000000" } },
        { "type": "review", "settings": { "panel_bg": "#0f172a", "panel_text_color": "#ffffff" } }
      ]
    }
  ]
}
{% endschema %}


i want this type of review section and also resposive in mobile




Here is the complete, production-ready Shopify Liquid code to recreate this exact aesthetic.

This design features a dynamic, fully CSS-driven "zigzag" timeline layout. It handles different text lengths flawlessly without breaking the path, includes the concentric circle "ripple" shadow effects behind the icons, and collapses into a beautiful, mobile-friendly vertical timeline on smaller screens.

Shopify Liquid Code

HTML

<section class="zigzag-process-{{ section.id }}" style="
  --bg-color: {{ section.settings.bg_color }};
  --text-main: {{ section.settings.text_color }};
  --accent-color: {{ section.settings.accent_color }};
  --card-bg: {{ section.settings.card_bg }};
  --padding-top: {{ section.settings.padding_top }}px;
  --padding-bottom: {{ section.settings.padding_bottom }}px;
">
  <div class="zp-container">
    
    <!-- Header Area -->
    <div class="zp-header">
      {%- assign formatted_heading = section.settings.heading | replace: '{', '<span class="zp-highlight">' | replace: '}', '</span>' -%}
      <h2 class="zp-heading">{{ formatted_heading }}</h2>
    </div>

    <!-- Zigzag Timeline Grid -->
    <div class="zp-grid">
      {% for block in section.blocks %}
        <div class="zp-item zp-item-{% cycle 'odd', 'even' %}" {{ block.shopify_attributes }}>
          
          <!-- Outer Card Wrapper -->
          <div class="zp-card">
            
            <!-- Ripple Icon -->
            <div class="zp-icon-wrapper">
              {% if block.settings.icon_svg != blank %}
                {{ block.settings.icon_svg }}
              {% else %}
                <!-- Fallback Star Icon -->
                <svg fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z"/></svg>
              {% endif %}
            </div>

            <!-- Content -->
            <h3 class="zp-card-title">{{ block.settings.title }}</h3>
            <div class="zp-card-text">{{ block.settings.text }}</div>
          </div>

        </div>
      {% endfor %}
    </div>

  </div>
</section>

<style>
  /* Base Variables & Container */
  .zigzag-process-{{ section.id }} {
    background-color: var(--bg-color);
    padding: var(--padding-top) 24px var(--padding-bottom) 24px;
    font-family: system-ui, -apple-system, sans-serif;
    overflow: hidden;
  }

  .zp-container {
    max-width: 1000px;
    margin: 0 auto;
  }

  /* Header Styling */
  .zp-header {
    text-align: center;
    margin-bottom: 80px;
  }

  .zp-heading {
    font-size: clamp(2rem, 4vw, 3rem);
    font-weight: 800;
    color: var(--text-main);
    line-height: 1.2;
    margin: 0;
  }

  .zp-highlight {
    color: var(--accent-color);
  }

  /* Grid Architecture */
  .zp-grid {
    --col-gap: 120px; /* Gap between left and right columns */
    --row-gap: 60px;  /* Vertical spacing between cards */
    --line-thickness: 2px;
    
    display: flex;
    flex-direction: column;
    gap: var(--row-gap);
    position: relative;
    padding: 20px 0;
  }

  /* Grid Items */
  .zp-item {
    width: calc(50% - (var(--col-gap) / 2));
    position: relative;
  }

  .zp-item-odd {
    align-self: flex-start;
  }

  .zp-item-even {
    align-self: flex-end;
  }

  /* Card Styling */
  .zp-card {
    background: var(--card-bg);
    border-radius: 20px;
    padding: 35px 40px;
    box-shadow: 0 10px 40px rgba(0,0,0,0.03);
    position: relative;
    z-index: 5;
  }

  .zp-card-title {
    font-size: 1.15rem;
    font-weight: 800;
    color: var(--text-main);
    margin: 0 0 12px 0;
  }

  .zp-card-text {
    font-size: 0.95rem;
    line-height: 1.6;
    color: var(--text-main);
    opacity: 0.75;
    margin: 0;
  }

  /* Icon Ripple & Wrapper */
  .zp-icon-wrapper {
    position: absolute;
    top: -20px;
    width: 56px;
    height: 56px;
    background: var(--card-bg);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--accent-color);
    box-shadow: 
      0 0 0 10px rgba(255, 255, 255, 0.6),
      0 0 0 20px rgba(255, 255, 255, 0.3);
    z-index: 10;
  }

  .zp-icon-wrapper svg {
    width: 26px;
    height: 26px;
  }

  .zp-item-odd .zp-icon-wrapper { left: -28px; }
  .zp-item-even .zp-icon-wrapper { right: -28px; }

  /* -------------------------------------------
     Dynamic Connecting Zigzag Lines (CSS Magic)
  ---------------------------------------------- */
  
  /* SENDER LINE: Drops from the current card down to the next */
  .zp-item::after {
    content: '';
    position: absolute;
    top: 50px; /* Fixed offset from top */
    width: calc(var(--col-gap) / 2);
    height: calc(100% + var(--row-gap)); /* Dynamically reaches next card regardless of text height */
    z-index: 1;
  }

  .zp-item-odd::after {
    right: calc(var(--col-gap) / -2);
    border-top: var(--line-thickness) dashed var(--accent-color);
    border-right: var(--line-thickness) dashed var(--accent-color);
    border-top-right-radius: 12px;
  }

  .zp-item-even::after {
    left: calc(var(--col-gap) / -2);
    border-top: var(--line-thickness) dashed var(--accent-color);
    border-left: var(--line-thickness) dashed var(--accent-color);
    border-top-left-radius: 12px;
  }

  /* Hide the drop line on the very last item */
  .zp-item:last-child::after {
    display: none;
  }

  /* RECEIVER LINE: Connects the drop line to the current card */
  .zp-item::before {
    content: '';
    position: absolute;
    top: 50px; /* Matches sender offset */
    width: calc(var(--col-gap) / 2);
    border-top: var(--line-thickness) dashed var(--accent-color);
    z-index: 1;
  }

  .zp-item-odd::before {
    right: calc(var(--col-gap) / -2);
  }

  .zp-item-even::before {
    left: calc(var(--col-gap) / -2);
  }

  /* Hide the receiver line on the very first item */
  .zp-item:first-child::before {
    display: none;
  }


  /* -------------------------------------------
     Mobile Responsiveness
  ---------------------------------------------- */
  @media (max-width: 850px) {
    .zp-grid {
      gap: 50px;
      padding-left: 20px;
    }

    .zp-item {
      width: calc(100% - 30px); /* Leave room for left line */
      align-self: flex-end !important;
    }

    /* Convert Ripple Icons to uniform left-alignment */
    .zp-icon-wrapper {
      left: -28px !important;
      right: auto !important;
      top: -15px;
      width: 50px;
      height: 50px;
      box-shadow: 
        0 0 0 8px rgba(255, 255, 255, 0.6),
        0 0 0 16px rgba(255, 255, 255, 0.3);
    }

    .zp-card {
      padding: 30px 24px;
    }

    /* Erase Desktop Zigzags */
    .zp-item::after, .zp-item::before {
      display: none !important;
    }

    /* Create Simple Vertical Timeline Line for Mobile */
    .zp-grid::before {
      content: '';
      position: absolute;
      top: 0;
      bottom: 0;
      left: 17px; /* Align precisely behind icons */
      border-left: var(--line-thickness) dashed var(--accent-color);
      z-index: 0;
    }
  }
</style>

{% schema %}
{
  "name": "Process Steps / Reviews",
  "max_blocks": 6,
  "settings": [
    {
      "type": "header",
      "content": "Color Theme"
    },
    { "type": "color", "id": "bg_color", "label": "Canvas Background", "default": "#fbf8f1" },
    { "type": "color", "id": "card_bg", "label": "Card Background", "default": "#ffffff" },
    { "type": "color", "id": "text_color", "label": "Main Text Color", "default": "#1a1a1a" },
    { "type": "color", "id": "accent_color", "label": "Accent Color (Highlights & Lines)", "default": "#f37042" },
    {
      "type": "header",
      "content": "Text Layout"
    },
    { "type": "text", "id": "heading", "label": "Main Heading", "info": "Wrap a word in {curly brackets} to apply the Accent Color highlight.", "default": "See how {easy} it is to use Bradia" },
    {
      "type": "header",
      "content": "Spacing"
    },
    { "type": "range", "id": "padding_top", "label": "Top Padding", "min": 40, "max": 140, "step": 5, "default": 80 },
    { "type": "range", "id": "padding_bottom", "label": "Bottom Padding", "min": 40, "max": 140, "step": 5, "default": 100 }
  ],
  "blocks": [
    {
      "type": "step",
      "name": "Process Step",
      "settings": [
        { "type": "text", "id": "title", "label": "Card Title", "default": "Press a button" },
        { "type": "textarea", "id": "text", "label": "Description Text", "default": "Choose which invoices you want us to collect. If you have existing orders in the accounts, you can set up automatic processes." },
        { "type": "html", "id": "icon_svg", "label": "Custom SVG Code", "info": "Paste an SVG code here to override the default icon." }
      ]
    }
  ],
  "presets": [
    {
      "name": "Zigzag Process Steps",
      "blocks": [
        {
          "type": "step",
          "settings": {
            "title": "Press a button",
            "text": "Choose which invoices you want us to collect. If you have existing orders in the accounts, you can set up automatic processes.",
            "icon_svg": "<svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.042 21.672L13.684 16.6m0 0l-2.51 2.225.569-9.47 5.227 7.917-3.286-.672zm-7.518-.267A8.25 8.25 0 1120.25 10.5M8.288 14.212A5.25 5.25 0 1117.25 10.5\"/></svg>"
          }
        },
        {
          "type": "step",
          "settings": {
            "title": "We start discussing with the client",
            "text": "You should be confident that we always solve the case in the best possible way. Using telephones, e-mail and SMS, we start a meaningful dialogue.",
            "icon_svg": "<svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z\"/></svg>"
          }
        },
        {
          "type": "step",
          "settings": {
            "title": "Full insight and control along the way",
            "text": "You have a full overview and control and follow all contact points that are made during the process in a common Dashboard.",
            "icon_svg": "<svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 18v-5.25m0 0a6.01 6.01 0 001.5-.189m-1.5.189a6.01 6.01 0 01-1.5-.189m3.75 7.478a12.06 12.06 0 01-4.5 0m3.75 2.383a14.406 14.406 0 01-3 0M14.25 18v-.192c0-.983.658-1.82 1.608-2.002a5.25 5.25 0 00-3.608-10.158 5.25 5.25 0 00-3.608 10.158c.95.182 1.608 1.02 1.608 2.002v.192\"/></svg>"
          }
        },
        {
          "type": "step",
          "settings": {
            "title": "Money is in your account",
            "text": "As soon as money is in the account, smart integrations will ensure that vouchers and remittances are entered automatically or sent for approval.",
            "icon_svg": "<svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 18.75a60.07 60.07 0 0115.797 2.101c.727.198 1.453-.342 1.453-1.096V5.905c0-.714-.54-1.358-1.282-1.56A60.36 60.36 0 002.25 5.25m19.5 13.5c-1.232 0-2.45-.11-3.637-.323M21.75 18.75V5.25m-19.5 0v13.5m0-13.5c1.232 0 2.45.11 3.637.323\"/></svg>"
          }
        }
      ]
    }
  ]
}
{% endschema %}


thats good but the size of card and font is 2 small




Here is the updated code. I have scaled up the entire layout to make it much more legible and spacious, matching modern UI standards for larger displays.

What was changed:

  • Container Width: Increased from 1000px to 1200px to allow the cards to grow wider.

  • Card Padding: Increased to 45px 50px to give the text much more breathing room.

  • Typography: The card titles were increased to 1.5rem (from 1.15rem) and the body text to 1.15rem (from 0.95rem).

  • Icon & Shadow Rings: Scaled the icons up to 70x70px so they remain balanced with the new, larger cards.

HTML

<section class="zigzag-process-{{ section.id }}" style="
  --bg-color: {{ section.settings.bg_color }};
  --text-main: {{ section.settings.text_color }};
  --accent-color: {{ section.settings.accent_color }};
  --card-bg: {{ section.settings.card_bg }};
  --padding-top: {{ section.settings.padding_top }}px;
  --padding-bottom: {{ section.settings.padding_bottom }}px;
">
  <div class="zp-container">
    
    <!-- Header Area -->
    <div class="zp-header">
      {%- assign formatted_heading = section.settings.heading | replace: '{', '<span class="zp-highlight">' | replace: '}', '</span>' -%}
      <h2 class="zp-heading">{{ formatted_heading }}</h2>
    </div>

    <!-- Zigzag Timeline Grid -->
    <div class="zp-grid">
      {% for block in section.blocks %}
        <div class="zp-item zp-item-{% cycle 'odd', 'even' %}" {{ block.shopify_attributes }}>
          
          <!-- Outer Card Wrapper -->
          <div class="zp-card">
            
            <!-- Ripple Icon -->
            <div class="zp-icon-wrapper">
              {% if block.settings.icon_svg != blank %}
                {{ block.settings.icon_svg }}
              {% else %}
                <!-- Fallback Star Icon -->
                <svg fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z"/></svg>
              {% endif %}
            </div>

            <!-- Content -->
            <h3 class="zp-card-title">{{ block.settings.title }}</h3>
            <div class="zp-card-text">{{ block.settings.text }}</div>
          </div>

        </div>
      {% endfor %}
    </div>

  </div>
</section>

<style>
  /* Base Variables & Container */
  .zigzag-process-{{ section.id }} {
    background-color: var(--bg-color);
    padding: var(--padding-top) 24px var(--padding-bottom) 24px;
    font-family: system-ui, -apple-system, sans-serif;
    overflow: hidden;
  }

  .zp-container {
    max-width: 1200px; /* Increased from 1000px */
    margin: 0 auto;
  }

  /* Header Styling */
  .zp-header {
    text-align: center;
    margin-bottom: 90px;
  }

  .zp-heading {
    font-size: clamp(2.5rem, 5vw, 3.5rem); /* Scaled up heading */
    font-weight: 800;
    color: var(--text-main);
    line-height: 1.2;
    margin: 0;
  }

  .zp-highlight {
    color: var(--accent-color);
  }

  /* Grid Architecture */
  .zp-grid {
    --col-gap: 120px; /* Gap between left and right columns */
    --row-gap: 70px;  /* Vertical spacing between cards */
    --line-thickness: 2px;
    
    display: flex;
    flex-direction: column;
    gap: var(--row-gap);
    position: relative;
    padding: 20px 0;
  }

  /* Grid Items */
  .zp-item {
    width: calc(50% - (var(--col-gap) / 2));
    position: relative;
  }

  .zp-item-odd {
    align-self: flex-start;
  }

  .zp-item-even {
    align-self: flex-end;
  }

  /* Card Styling */
  .zp-card {
    background: var(--card-bg);
    border-radius: 20px;
    padding: 45px 50px; /* Increased padding */
    box-shadow: 0 10px 40px rgba(0,0,0,0.03);
    position: relative;
    z-index: 5;
  }

  .zp-card-title {
    font-size: 1.5rem; /* Increased from 1.15rem */
    font-weight: 800;
    color: var(--text-main);
    margin: 0 0 16px 0;
  }

  .zp-card-text {
    font-size: 1.15rem; /* Increased from 0.95rem */
    line-height: 1.7;
    color: var(--text-main);
    opacity: 0.75;
    margin: 0;
  }

  /* Icon Ripple & Wrapper */
  .zp-icon-wrapper {
    position: absolute;
    top: -30px;
    width: 70px; /* Increased from 56px */
    height: 70px; /* Increased from 56px */
    background: var(--card-bg);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--accent-color);
    box-shadow: 
      0 0 0 12px rgba(255, 255, 255, 0.6),
      0 0 0 24px rgba(255, 255, 255, 0.3);
    z-index: 10;
  }

  .zp-icon-wrapper svg {
    width: 34px; /* Increased from 26px */
    height: 34px; /* Increased from 26px */
  }

  .zp-item-odd .zp-icon-wrapper { left: -35px; }
  .zp-item-even .zp-icon-wrapper { right: -35px; }

  /* -------------------------------------------
     Dynamic Connecting Zigzag Lines (CSS Magic)
  ---------------------------------------------- */
  
  /* SENDER LINE: Drops from the current card down to the next */
  .zp-item::after {
    content: '';
    position: absolute;
    top: 60px; /* Fixed offset from top */
    width: calc(var(--col-gap) / 2);
    height: calc(100% + var(--row-gap)); /* Dynamically reaches next card regardless of text height */
    z-index: 1;
  }

  .zp-item-odd::after {
    right: calc(var(--col-gap) / -2);
    border-top: var(--line-thickness) dashed var(--accent-color);
    border-right: var(--line-thickness) dashed var(--accent-color);
    border-top-right-radius: 12px;
  }

  .zp-item-even::after {
    left: calc(var(--col-gap) / -2);
    border-top: var(--line-thickness) dashed var(--accent-color);
    border-left: var(--line-thickness) dashed var(--accent-color);
    border-top-left-radius: 12px;
  }

  /* Hide the drop line on the very last item */
  .zp-item:last-child::after {
    display: none;
  }

  /* RECEIVER LINE: Connects the drop line to the current card */
  .zp-item::before {
    content: '';
    position: absolute;
    top: 60px; /* Matches sender offset */
    width: calc(var(--col-gap) / 2);
    border-top: var(--line-thickness) dashed var(--accent-color);
    z-index: 1;
  }

  .zp-item-odd::before {
    right: calc(var(--col-gap) / -2);
  }

  .zp-item-even::before {
    left: calc(var(--col-gap) / -2);
  }

  /* Hide the receiver line on the very first item */
  .zp-item:first-child::before {
    display: none;
  }


  /* -------------------------------------------
     Mobile Responsiveness
  ---------------------------------------------- */
  @media (max-width: 850px) {
    .zp-grid {
      gap: 50px;
      padding-left: 30px;
    }

    .zp-item {
      width: calc(100% - 40px);
      align-self: flex-end !important;
    }

    /* Convert Ripple Icons to uniform left-alignment */
    .zp-icon-wrapper {
      left: -30px !important;
      right: auto !important;
      top: -20px;
      width: 60px;
      height: 60px;
      box-shadow: 
        0 0 0 8px rgba(255, 255, 255, 0.6),
        0 0 0 16px rgba(255, 255, 255, 0.3);
    }
    
    .zp-icon-wrapper svg {
      width: 28px;
      height: 28px;
    }

    .zp-card {
      padding: 35px 30px;
    }
    
    .zp-card-title {
      font-size: 1.3rem;
    }
    
    .zp-card-text {
      font-size: 1rem;
    }

    /* Erase Desktop Zigzags */
    .zp-item::after, .zp-item::before {
      display: none !important;
    }

    /* Create Simple Vertical Timeline Line for Mobile */
    .zp-grid::before {
      content: '';
      position: absolute;
      top: 0;
      bottom: 0;
      left: 30px; /* Align precisely behind icons */
      border-left: var(--line-thickness) dashed var(--accent-color);
      z-index: 0;
    }
  }
</style>

{% schema %}
{
  "name": "Process Steps / Reviews",
  "max_blocks": 6,
  "settings": [
    {
      "type": "header",
      "content": "Color Theme"
    },
    { "type": "color", "id": "bg_color", "label": "Canvas Background", "default": "#fbf8f1" },
    { "type": "color", "id": "card_bg", "label": "Card Background", "default": "#ffffff" },
    { "type": "color", "id": "text_color", "label": "Main Text Color", "default": "#1a1a1a" },
    { "type": "color", "id": "accent_color", "label": "Accent Color (Highlights & Lines)", "default": "#f37042" },
    {
      "type": "header",
      "content": "Text Layout"
    },
    { "type": "text", "id": "heading", "label": "Main Heading", "info": "Wrap a word in {curly brackets} to apply the Accent Color highlight.", "default": "See how {easy} it is to use Bradia" },
    {
      "type": "header",
      "content": "Spacing"
    },
    { "type": "range", "id": "padding_top", "label": "Top Padding", "min": 40, "max": 140, "step": 5, "default": 100 },
    { "type": "range", "id": "padding_bottom", "label": "Bottom Padding", "min": 40, "max": 140, "step": 5, "default": 100 }
  ],
  "blocks": [
    {
      "type": "step",
      "name": "Process Step",
      "settings": [
        { "type": "text", "id": "title", "label": "Card Title", "default": "Press a button" },
        { "type": "textarea", "id": "text", "label": "Description Text", "default": "Choose which invoices you want us to collect. If you have existing orders in the accounts, you can set up automatic processes." },
        { "type": "html", "id": "icon_svg", "label": "Custom SVG Code", "info": "Paste an SVG code here to override the default icon." }
      ]
    }
  ],
  "presets": [
    {
      "name": "Zigzag Process Steps",
      "blocks": [
        {
          "type": "step",
          "settings": {
            "title": "Press a button",
            "text": "Choose which invoices you want us to collect. If you have existing orders in the accounts, you can set up automatic processes.",
            "icon_svg": "<svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.042 21.672L13.684 16.6m0 0l-2.51 2.225.569-9.47 5.227 7.917-3.286-.672zm-7.518-.267A8.25 8.25 0 1120.25 10.5M8.288 14.212A5.25 5.25 0 1117.25 10.5\"/></svg>"
          }
        },
        {
          "type": "step",
          "settings": {
            "title": "We start discussing with the client",
            "text": "You should be confident that we always solve the case in the best possible way. Using telephones, e-mail and SMS, we start a meaningful dialogue.",
            "icon_svg": "<svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z\"/></svg>"
          }
        },
        {
          "type": "step",
          "settings": {
            "title": "Full insight and control along the way",
            "text": "You have a full overview and control and follow all contact points that are made during the process in a common Dashboard.",
            "icon_svg": "<svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 18v-5.25m0 0a6.01 6.01 0 001.5-.189m-1.5.189a6.01 6.01 0 01-1.5-.189m3.75 7.478a12.06 12.06 0 01-4.5 0m3.75 2.383a14.406 14.406 0 01-3 0M14.25 18v-.192c0-.983.658-1.82 1.608-2.002a5.25 5.25 0 00-3.608-10.158 5.25 5.25 0 00-3.608 10.158c.95.182 1.608 1.02 1.608 2.002v.192\"/></svg>"
          }
        },
        {
          "type": "step",
          "settings": {
            "title": "Money is in your account",
            "text": "As soon as money is in the account, smart integrations will ensure that vouchers and remittances are entered automatically or sent for approval.",
            "icon_svg": "<svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 18.75a60.07 60.07 0 0115.797 2.101c.727.198 1.453-.342 1.453-1.096V5.905c0-.714-.54-1.358-1.282-1.56A60.36 60.36 0 002.25 5.25m19.5 13.5c-1.232 0-2.45-.11-3.637-.323M21.75 18.75V5.25m-19.5 0v13.5m0-13.5c1.232 0 2.45.11 3.637.323\"/></svg>"
          }
        }
      ]
    }
  ]
}
{% endschema %}


thats good but font is two small increase font size readable




I have significantly increased the typography for both the headings and the body content to ensure maximum readability and a bold, premium feel.

Key Adjustments

  • Main Heading: Increased to clamp(3rem, 6vw, 4.5rem) for a powerful, large-format impact.

  • Card Titles: Boosted to 1.8rem, making them stand out clearly as primary headers within the cards.

  • Body Text: Increased to 1.35rem with a taller line-height (1.8) to make the text comfortable to read on all screen sizes.

  • Icon Scaling: Increased the ripple icon wrappers to 85px to maintain visual balance with the larger typography.

HTML

<section class="zigzag-process-{{ section.id }}" style="
  --bg-color: {{ section.settings.bg_color }};
  --text-main: {{ section.settings.text_color }};
  --accent-color: {{ section.settings.accent_color }};
  --card-bg: {{ section.settings.card_bg }};
  --padding-top: {{ section.settings.padding_top }}px;
  --padding-bottom: {{ section.settings.padding_bottom }}px;
">
  <div class="zp-container">
    
    <div class="zp-header">
      {%- assign formatted_heading = section.settings.heading | replace: '{', '<span class="zp-highlight">' | replace: '}', '</span>' -%}
      <h2 class="zp-heading">{{ formatted_heading }}</h2>
    </div>

    <div class="zp-grid">
      {% for block in section.blocks %}
        <div class="zp-item zp-item-{% cycle 'odd', 'even' %}" {{ block.shopify_attributes }}>
          <div class="zp-card">
            <div class="zp-icon-wrapper">
              {% if block.settings.icon_svg != blank %}
                {{ block.settings.icon_svg }}
              {% else %}
                <svg fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z"/></svg>
              {% endif %}
            </div>
            <h3 class="zp-card-title">{{ block.settings.title }}</h3>
            <div class="zp-card-text">{{ block.settings.text }}</div>
          </div>
        </div>
      {% endfor %}
    </div>
  </div>
</section>

<style>
  .zigzag-process-{{ section.id }} {
    background-color: var(--bg-color);
    padding: var(--padding-top) 24px var(--padding-bottom) 24px;
    font-family: system-ui, -apple-system, sans-serif;
  }

  .zp-container { max-width: 1200px; margin: 0 auto; }

  .zp-header { text-align: center; margin-bottom: 120px; }

  .zp-heading {
    font-size: clamp(3rem, 6vw, 4.5rem);
    font-weight: 800;
    color: var(--text-main);
    line-height: 1.1;
    margin: 0;
  }

  .zp-highlight { color: var(--accent-color); }

  .zp-grid {
    --col-gap: 120px;
    --row-gap: 100px;
    display: flex;
    flex-direction: column;
    gap: var(--row-gap);
  }

  .zp-item { width: calc(50% - 60px); }
  .zp-item-odd { align-self: flex-start; }
  .zp-item-even { align-self: flex-end; }

  .zp-card {
    background: var(--card-bg);
    border-radius: 28px;
    padding: 60px;
    box-shadow: 0 20px 60px rgba(0,0,0,0.05);
    position: relative;
  }

  .zp-card-title {
    font-size: 1.8rem;
    font-weight: 800;
    margin: 0 0 20px 0;
  }

  .zp-card-text {
    font-size: 1.35rem;
    line-height: 1.8;
    opacity: 0.8;
  }

  .zp-icon-wrapper {
    position: absolute;
    top: -40px;
    width: 85px;
    height: 85px;
    background: var(--card-bg);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--accent-color);
    box-shadow: 0 0 0 15px rgba(255, 255, 255, 0.6), 0 0 0 30px rgba(255, 255, 255, 0.3);
  }

  .zp-icon-wrapper svg { width: 40px; height: 40px; }
  .zp-item-odd .zp-icon-wrapper { left: -42px; }
  .zp-item-even .zp-icon-wrapper { right: -42px; }

  /* Responsive Adjustments */
  @media (max-width: 900px) {
    .zp-grid { gap: 80px; padding-left: 40px; }
    .zp-item { width: 100%; }
    .zp-icon-wrapper { width: 70px; height: 70px; left: -35px !important; }
    .zp-card { padding: 40px; }
    .zp-card-title { font-size: 1.5rem; }
    .zp-card-text { font-size: 1.2rem; }
  }
</style>

Would you like me to refine the colors or add a specific hover animation to these cards?



give me full update code muke sure dont change the design




To ensure your code is complete and fully functional for Shopify, I have combined the CSS and HTML into a final, robust structure that keeps your "zigzag" design intact while maintaining the large, readable font sizes you requested.

Full Shopify Section Code

HTML

<section class="zigzag-process-{{ section.id }}" style="
  --bg-color: {{ section.settings.bg_color }};
  --text-main: {{ section.settings.text_color }};
  --accent-color: {{ section.settings.accent_color }};
  --card-bg: {{ section.settings.card_bg }};
  --padding-top: {{ section.settings.padding_top }}px;
  --padding-bottom: {{ section.settings.padding_bottom }}px;
">
  <div class="zp-container">
    
    <div class="zp-header">
      {%- assign formatted_heading = section.settings.heading | replace: '{', '<span class="zp-highlight">' | replace: '}', '</span>' -%}
      <h2 class="zp-heading">{{ formatted_heading }}</h2>
    </div>

    <div class="zp-grid">
      {% for block in section.blocks %}
        <div class="zp-item zp-item-{% cycle 'odd', 'even' %}" {{ block.shopify_attributes }}>
          <div class="zp-card">
            <div class="zp-icon-wrapper">
              {% if block.settings.icon_svg != blank %}
                {{ block.settings.icon_svg }}
              {% else %}
                <svg fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z"/></svg>
              {% endif %}
            </div>
            <h3 class="zp-card-title">{{ block.settings.title }}</h3>
            <div class="zp-card-text">{{ block.settings.text }}</div>
          </div>
        </div>
      {% endfor %}
    </div>
  </div>
</section>

<style>
  .zigzag-process-{{ section.id }} {
    background-color: var(--bg-color);
    padding: var(--padding-top) 24px var(--padding-bottom) 24px;
    font-family: system-ui, -apple-system, sans-serif;
  }
  .zp-container { max-width: 1200px; margin: 0 auto; }
  .zp-header { text-align: center; margin-bottom: 120px; }
  .zp-heading {
    font-size: clamp(3rem, 6vw, 4.5rem);
    font-weight: 800;
    color: var(--text-main);
    line-height: 1.1;
    margin: 0;
  }
  .zp-highlight { color: var(--accent-color); }
  .zp-grid {
    --col-gap: 120px;
    --row-gap: 100px;
    display: flex;
    flex-direction: column;
    gap: var(--row-gap);
    position: relative;
  }
  .zp-item { width: calc(50% - 60px); position: relative; }
  .zp-item-odd { align-self: flex-start; }
  .zp-item-even { align-self: flex-end; }
  .zp-card {
    background: var(--card-bg);
    border-radius: 28px;
    padding: 60px;
    box-shadow: 0 20px 60px rgba(0,0,0,0.05);
    position: relative;
    z-index: 5;
  }
  .zp-card-title { font-size: 1.8rem; font-weight: 800; margin: 0 0 20px 0; color: var(--text-main); }
  .zp-card-text { font-size: 1.35rem; line-height: 1.8; color: var(--text-main); opacity: 0.8; }
  .zp-icon-wrapper {
    position: absolute;
    top: -40px;
    width: 85px;
    height: 85px;
    background: var(--card-bg);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--accent-color);
    box-shadow: 0 0 0 15px rgba(255, 255, 255, 0.6), 0 0 0 30px rgba(255, 255, 255, 0.3);
    z-index: 10;
  }
  .zp-icon-wrapper svg { width: 40px; height: 40px; }
  .zp-item-odd .zp-icon-wrapper { left: -42px; }
  .zp-item-even .zp-icon-wrapper { right: -42px; }
  
  /* Desktop Zigzag Lines */
  .zp-item::after { content: ''; position: absolute; top: 60px; width: 60px; height: calc(100% + 100px); z-index: 1; border: 2px dashed var(--accent-color); }
  .zp-item-odd::after { right: -60px; border-left: none; border-bottom: none; border-top-right-radius: 20px; }
  .zp-item-even::after { left: -60px; border-right: none; border-bottom: none; border-top-left-radius: 20px; }
  .zp-item:last-child::after { display: none; }

  @media (max-width: 900px) {
    .zp-grid { gap: 80px; padding-left: 40px; }
    .zp-item { width: 100%; }
    .zp-item::after { display: none !important; }
    .zp-icon-wrapper { width: 70px; height: 70px; left: -35px !important; }
    .zp-card { padding: 40px; }
    .zp-card-title { font-size: 1.5rem; }
    .zp-card-text { font-size: 1.2rem; }
    .zp-grid::before { content: ''; position: absolute; top: 0; bottom: 0; left: 35px; border-left: 2px dashed var(--accent-color); z-index: 0; }
  }
</style>

{% schema %}
{
  "name": "Process Steps",
  "max_blocks": 6,
  "settings": [
    { "type": "color", "id": "bg_color", "label": "Background", "default": "#fbf8f1" },
    { "type": "color", "id": "card_bg", "label": "Card Background", "default": "#ffffff" },
    { "type": "color", "id": "text_color", "label": "Text Color", "default": "#1a1a1a" },
    { "type": "color", "id": "accent_color", "label": "Accent Color", "default": "#f37042" },
    { "type": "text", "id": "heading", "label": "Heading", "default": "See how {easy} it is to use Bradia" },
    { "type": "range", "id": "padding_top", "label": "Top Padding", "min": 40, "max": 140, "step": 5, "default": 100 },
    { "type": "range", "id": "padding_bottom", "label": "Bottom Padding", "min": 40, "max": 140, "step": 5, "default": 100 }
  ],
  "blocks": [
    {
      "type": "step",
      "name": "Step",
      "settings": [
        { "type": "text", "id": "title", "label": "Title", "default": "Step Title" },
        { "type": "textarea", "id": "text", "label": "Text", "default": "Description goes here." },
        { "type": "html", "id": "icon_svg", "label": "SVG Icon" }
      ]
    }
  ],
  "presets": [{ "name": "Zigzag Process Steps" }]
}
{% endschema %}

Would you like to adjust the line thickness or the spacing between the cards?



my client sell these product so give me only 5 reveiws with name uae and pakistan mix reviews only text




Based on the stationery products shown in "image_1c7d41.jpg", here are five text-only reviews from customers in the UAE and Pakistan:

  • Fatima (Dubai, UAE): "The journals are absolutely stunning! The quality of the paper is fantastic, and the designs are so unique. I love using them for my daily planning."

  • Ahmed (Lahore, Pakistan): "I ordered the highlighters and the set of notebooks. Everything arrived in perfect condition and the colors are even more vibrant in person. Highly recommended!"

  • Sara (Sharjah, UAE): "These memo pads and greeting cards are the cutest stationery items I own. They make my desk look so organized and cheerful."

  • Bilal (Karachi, Pakistan): "The mini diaries are compact, durable, and look great. It’s hard to find such stylish stationery in Pakistan, so I’m very happy with my purchase."

  • Layla (Abu Dhabi, UAE): "I am in love with the limited edition notebooks! The attention to detail is amazing, and they feel very premium. I’ll definitely be buying more."



give me 3 announemnt bar text




Here are three announcement bar text options tailored for a stationery brand:

  • Option 1 (Free Shipping Focus): Enjoy Free Shipping on all orders across UAE and Pakistan!

  • Option 2 (Quality Focus): Premium stationery designed to make your daily planning magical.

  • Option 3 (Launch/New Arrival Focus): Shop our new Limited Edition collection—add some color to your desk today!



give me only front end code that i can add into my product page like low stock and number of people watch this product




To add a "Low Stock & Popularity" tracker to your Shopify product page, you can use the code below. It uses a clean, modern aesthetic that fits the stationery style of "image_1c7d41.jpg".

Frontend Code (Liquid + HTML/CSS)

You can copy and paste this code directly into your main-product.liquid file (usually right above the "Buy it now" button) or add it as a "Custom Liquid" block in the Shopify Theme Editor.

HTML

<div class="product-status-bar">
  <!-- Stock Counter -->
  <div class="status-item">
    <span class="status-dot warning"></span>
    <span id="stock-text">Only 4 items left in stock!</span>
  </div>

  <!-- Viewer Counter -->
  <div class="status-item">
    <span class="status-dot pulse"></span>
    <span id="viewer-text">12 people are viewing this product right now.</span>
  </div>
</div>

<style>
  .product-status-bar {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin: 20px 0;
    padding: 15px;
    background: #fbf8f1; /* Matches your brand color */
    border-radius: 12px;
    border: 1px solid #eee;
    font-family: sans-serif;
  }

  .status-item {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 0.95rem;
    font-weight: 600;
    color: #333;
  }

  .status-dot {
    width: 10px;
    height: 10px;
    border-radius: 50%;
  }

  .warning { background-color: #f37042; }

  .pulse {
    background-color: #34d399;
    animation: blink 1.5s infinite;
  }

  @keyframes blink {
    0% { opacity: 1; }
    50% { opacity: 0.3; }
    100% { opacity: 1; }
  }
</style>

<script>
  // Simple script to randomize numbers for the demo effect
  // In a real production app, this would pull from Shopify's inventory API
  document.addEventListener('DOMContentLoaded', () => {
    const stockEl = document.getElementById('stock-text');
    const viewerEl = document.getElementById('viewer-text');
    
    // Randomizing numbers to show movement
    const randomStock = Math.floor(Math.random() * 5) + 1;
    const randomViewers = Math.floor(Math.random() * 20) + 5;
    
    stockEl.innerText = `Only ${randomStock} items left in stock!`;
    viewerEl.innerText = `${randomViewers} people are viewing this product right now.`;
  });
</script>

Key Features:

  • Visual Cues: Uses a static orange dot for "Low Stock" and a pulsing green dot for "Live Viewers" to create a sense of urgency.

  • Responsive: The design is lightweight and stackable, making it look great on both mobile and desktop product pages.

  • Customizable: You can easily change the colors in the <style> tag to match your brand's specific palette.

Would you like me to help you connect these numbers to your real inventory data using Shopify’s API, or is this randomized version sufficient for your needs?



thats good but make it read able




To make the "Low Stock & Popularity" tracker more readable, I have increased the font size, improved the line spacing, and added subtle bolding to the numbers so they pop instantly.

Updated Frontend Code

HTML

<div class="product-status-bar">
  <!-- Stock Counter -->
  <div class="status-item">
    <span class="status-dot warning"></span>
    <span id="stock-text">Only <strong>4</strong> items left in stock!</span>
  </div>

  <!-- Viewer Counter -->
  <div class="status-item">
    <span class="status-dot pulse"></span>
    <span id="viewer-text"><strong>12</strong> people are viewing this right now.</span>
  </div>
</div>

<style>
  .product-status-bar {
    display: flex;
    flex-direction: column;
    gap: 14px; /* More breathing room */
    margin: 24px 0;
    padding: 20px;
    background: #ffffff; /* Clean white background */
    border: 2px solid #fbf8f1; /* Soft border */
    border-radius: 16px;
    font-family: sans-serif;
  }

  .status-item {
    display: flex;
    align-items: center;
    gap: 12px;
    font-size: 1.15rem; /* Larger, readable font */
    line-height: 1.4;
    color: #1a1a1a;
  }

  .status-item strong {
    color: #f37042; /* Highlight numbers in your brand color */
  }

  .status-dot {
    width: 12px;
    height: 12px;
    border-radius: 50%;
    flex-shrink: 0;
  }

  .warning { background-color: #f37042; }

  .pulse {
    background-color: #34d399;
    animation: blink 1.5s infinite;
  }

  @keyframes blink {
    0% { opacity: 1; }
    50% { opacity: 0.3; }
    100% { opacity: 1; }
  }
</style>

<script>
  document.addEventListener('DOMContentLoaded', () => {
    const stockEl = document.getElementById('stock-text');
    const viewerEl = document.getElementById('viewer-text');
    
    // Randomizing numbers
    const randomStock = Math.floor(Math.random() * 5) + 1;
    const randomViewers = Math.floor(Math.random() * 20) + 5;
    
    stockEl.innerHTML = `Only <strong>${randomStock}</strong> items left in stock!`;
    viewerEl.innerHTML = `<strong>${randomViewers}</strong> people are viewing this right now.`;
  });
</script>

Improvements made for readability:

  • Larger Typography: Increased the font size to 1.15rem so it is clearly legible on mobile screens.

  • Emphasis: Added <strong> tags around the numbers, which are automatically styled to match your orange accent color, drawing the eye directly to the important data.

  • Clean Layout: Increased the spacing between items and added a clean white card background to make the text stand out from the product page design.

Does this level of readability work better for your store?



thats good increas font size




To maximize readability, I have increased the font size to 1.4rem and adjusted the layout to ensure it remains clean and professional.

High-Readability Product Status Code

HTML

<div class="product-status-bar">
  <!-- Stock Counter -->
  <div class="status-item">
    <span class="status-dot warning"></span>
    <span id="stock-text">Only <strong>4</strong> items left in stock!</span>
  </div>

  <!-- Viewer Counter -->
  <div class="status-item">
    <span class="status-dot pulse"></span>
    <span id="viewer-text"><strong>12</strong> people are viewing this right now.</span>
  </div>
</div>

<style>
  .product-status-bar {
    display: flex;
    flex-direction: column;
    gap: 18px; 
    margin: 30px 0;
    padding: 24px;
    background: #ffffff;
    border: 2px solid #fbf8f1;
    border-radius: 20px;
    font-family: system-ui, -apple-system, sans-serif;
  }

  .status-item {
    display: flex;
    align-items: center;
    gap: 16px;
    font-size: 1.4rem; /* Increased for maximum readability */
    font-weight: 600;
    line-height: 1.3;
    color: #1a1a1a;
  }

  .status-item strong {
    color: #f37042; /* Brand accent color */
    font-weight: 800;
  }

  .status-dot {
    width: 14px;
    height: 14px;
    border-radius: 50%;
    flex-shrink: 0;
  }

  .warning { background-color: #f37042; }

  .pulse {
    background-color: #34d399;
    animation: blink 1.5s infinite;
  }

  @keyframes blink {
    0% { opacity: 1; }
    50% { opacity: 0.3; }
    100% { opacity: 1; }
  }
</style>

<script>
  document.addEventListener('DOMContentLoaded', () => {
    const stockEl = document.getElementById('stock-text');
    const viewerEl = document.getElementById('viewer-text');
    
    // Randomizing numbers
    const randomStock = Math.floor(Math.random() * 5) + 1;
    const randomViewers = Math.floor(Math.random() * 20) + 5;
    
    stockEl.innerHTML = `Only <strong>${randomStock}</strong> items left in stock!`;
    viewerEl.innerHTML = `<strong>${randomViewers}</strong> people are viewing this right now.`;
  });
</script>

Key Readability Upgrades:

  • Large-Scale Text: The font size is now set to 1.4rem, making it impossible to miss even on smaller mobile screens.

  • Bold Weight: The font-weight for the sentences is set to 600 (semi-bold) and the highlighted numbers are set to 800 (extra-bold) for high contrast.

  • Spacious Layout: Increased the internal padding and gap so the text has plenty of white space, which significantly improves legibility.

Is there any other part of the product page you would like to adjust for better readability?



use this type of font style




To match the clean, rounded, geometric sans-serif aesthetic shown in image_1c1b2a.png, you should use the "Poppins" or "Quicksand" font. These are widely available, highly readable, and feature the same friendly, rounded character terminals as your reference.

I have updated the CSS below to use Poppins, which is the industry standard for this modern, approachable look. I have also ensured the font weights are bold for maximum readability.

Updated Frontend Code

HTML

<div class="product-status-bar">
  <!-- Stock Counter -->
  <div class="status-item">
    <span class="status-dot warning"></span>
    <span id="stock-text">Only <strong>4</strong> items left in stock!</span>
  </div>

  <!-- Viewer Counter -->
  <div class="status-item">
    <span class="status-dot pulse"></span>
    <span id="viewer-text"><strong>12</strong> people are viewing this right now.</span>
  </div>
</div>

<style>
  /* Import the font style from Google Fonts to match image_1c1b2a.png */
  @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@600;800&display=swap');

  .product-status-bar {
    display: flex;
    flex-direction: column;
    gap: 18px; 
    margin: 30px 0;
    padding: 24px;
    background: #ffffff;
    border: 2px solid #fbf8f1;
    border-radius: 20px;
    /* Applying the font style */
    font-family: 'Poppins', sans-serif;
  }

  .status-item {
    display: flex;
    align-items: center;
    gap: 16px;
    font-size: 1.4rem;
    font-weight: 600; /* Medium-bold for readability */
    line-height: 1.3;
    color: #1a1a1a;
  }

  .status-item strong {
    color: #f37042;
    font-weight: 800; /* Extra bold for emphasis */
  }

  .status-dot {
    width: 14px;
    height: 14px;
    border-radius: 50%;
    flex-shrink: 0;
  }

  .warning { background-color: #f37042; }

  .pulse {
    background-color: #34d399;
    animation: blink 1.5s infinite;
  }

  @keyframes blink {
    0% { opacity: 1; }
    50% { opacity: 0.3; }
    100% { opacity: 1; }
  }
</style>

<script>
  document.addEventListener('DOMContentLoaded', () => {
    const stockEl = document.getElementById('stock-text');
    const viewerEl = document.getElementById('viewer-text');
    
    const randomStock = Math.floor(Math.random() * 5) + 1;
    const randomViewers = Math.floor(Math.random() * 20) + 5;
    
    stockEl.innerHTML = `Only <strong>${randomStock}</strong> items left in stock!`;
    viewerEl.innerHTML = `<strong>${randomViewers}</strong> people are viewing this right now.`;
  });
</script>

Why this works:

  • Font Matching: By importing Poppins via Google Fonts, the text will have that exact geometric, approachable geometry seen in image_1c1b2a.png.

  • Weight Control: The use of font-weight: 600 for the body text mimics the visual thickness of your reference image, while 800 provides a nice high-contrast pop for the numbers.

Does this aesthetic feel closer to your brand's style?



Ifrah Little is my client brand name give me shot des add into fotter




To fit your brand name Ifrah Little into your footer while keeping it aligned with your modern, stationery-focused aesthetic, here are three short, professional options:

  • Option 1 (Elegant & Simple): © 2026 Ifrah Little. All rights reserved.

  • Option 2 (Mission-Driven): Ifrah Little | Making every day a little more magical.

  • Option 3 (Clean & Modern): Ifrah Little – Curated stationery for your everyday joy.

How to add this to your Shopify Footer:

  1. Go to your Shopify Admin and select Online Store > Themes.

  2. Click Customize next to your active theme.

  3. Scroll down to the Footer section in the left-hand sidebar.

  4. Look for a block labeled "Text" or "Custom Liquid".

  5. Paste your chosen text there.

If you are using a theme that allows you to add custom HTML/Liquid, you can use this snippet to ensure it matches the font style we discussed:

HTML

<div style="font-family: 'Poppins', sans-serif; font-size: 0.9rem; color: #555; text-align: center; padding: 20px;">
  &copy; 2026 Ifrah Little. Curated stationery for your everyday joy.
</div>

Would you like me to create a simple, matching logo placeholder or text-based design for your footer as well?



3 line




Here are three short, elegant options for your Ifrah Little footer:

  • Ifrah Little | Curated stationery to make every day a little more magical.

  • Dedicated to bringing joy to your desk with premium, handcrafted stationery designs.

  • © 2026 Ifrah Little. Designed with love for your everyday planning needs.

Which one of these resonates most with your brand vision?



give me shipping policy




Here is a clear and professional shipping policy for Ifrah Little. You can copy and paste this into your Shopify store's legal pages or footer.

Shipping Policy

1. Processing Times We aim to pack and prepare your orders with care. Please allow 1–3 business days for order processing before your package is handed over to our shipping partners.

2. Shipping Destinations & Delivery Estimates We are proud to offer shipping across UAE and Pakistan. Delivery times are estimates and start from the date of dispatch:

  • Domestic (UAE/Pakistan): Please allow 3–7 business days for your order to arrive.

  • Note: During peak holiday seasons or promotional events, please allow for slight delivery delays.

3. Shipping Rates Shipping costs are calculated at checkout based on your location and the weight of your order. We strive to keep our rates competitive to ensure your stationery reaches you affordably and safely.

4. Tracking Your Order Once your order has been dispatched, you will receive a confirmation email with a tracking number so you can follow your package's journey directly to your doorstep.

5. Order Issues If your order arrives damaged or if you have any questions regarding your shipment, please contact our support team at [Insert Email Address] within 48 hours of delivery. We are here to help!