# Store Page

Source-code showcase landing page: search hero, wave-divided code gallery, featured and latest product grids, and image/text rows.

## Overview

| Item | Value |
|---|---|
| Created | 2023-03-14 |
| Category | Business Examples |
| HTML files | `index.html` |
| Source | [target/20230314](https://github.com/pardnio/demo-web/tree/main/target/20230314) |

## Live Preview

<iframe src="/target/20230314/" title="Store Page" loading="lazy" style="width:100%;height:640px;border:1px solid #e5e7eb;border-radius:8px"></iframe>

[Open the example in a new tab](/target/20230314/)

## Page Sections

| Section | Description |
|---|---|
| Top navigation (nav num=2) | #top-nav using solid + underline style (nav/_002) |
| Search hero (header=2) | Background-image hero with white h1 and Search input |
| Gallery (num=22) | Wave divider, 其他源碼 title, six 3-column image cards |
| Featured products (num=21) | 精選內容 header nav with tag pill and three 3-column product cards |
| Latest products (num=21) | Purple #4200d0 band, 最新內容 header and four 4-column cards |
| Image cards (num=5) | Wave divider and two image cards |
| Icon text cards (num=6) | Arc divider and 2-column cards |
| Footer (footer num=1) | Bordered light footer with four link columns |

## Interactions

- js/index.js: body.onscroll toggles .scroll on #top-nav past 48px using PDRenderKit string helpers ("top-nav".$._class / class_)
- js/index.js: converts custom attributes top / bottom / bg-col / col / bg-img into inline padding-top, padding-bottom, background-color, color, background-image (values starting with -- become var(--x))
- js/index.js: replaces span[mask=arc|arc-up|arc-down|slash-left|slash-right|wave] with generated inline SVG dividers sized from the viewport width (64/128px above 1024px)
- js/index.js wraps logic in DOMContentLoaded and relies on PDRenderKit prototype extensions ($all, $attr, _style, $style, $parent, _class, class_)

## Dependencies

| Name | Version | Source |
|---|---|---|
| Font Awesome Free | 6.5.2 | https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.5.2/css/all.min.css |
| PDRenderKit | 1.0.0 | https://cdn.jsdelivr.net/npm/pdrenderkit@1.0.0/dist/PDRenderKit.js |
| Google Analytics (gtag.js) | G-L5VYEZPVXX | https://www.googletagmanager.com/gtag/js?id=G-L5VYEZPVXX |
| Page stylesheet (compiled SCSS) | - | ./css/index.css |
| Page script | - | ./js/index.js |

## Styling

| Item | Value |
|---|---|
| SCSS entry | `sass/index.scss` |
| Output CSS | `css/index.css` |
| Partials | `nav/_001.scss`, `nav/_002.scss`, `nav/_body.scss`, `header/_001.scss`, `header/_002.scss`, `header/_003.scss`, `section/_000.scss ... section/_022.scss`, `section/_015-top.scss`, `section/_015-center.scss`, `section/_015-bottom.scss`, `footer/_001.scss`, `comp/_div-info.scss`, `comp/_innerText.scss`, `comp/_li-r2.scss`, `comp/_li-r3.scss`, `comp/_li-r4.scss`, `comp/_ul-button.scss` |

Shared section library: index.scss imports every nav/header/section/footer partial inside body; each partial is keyed by an attribute selector (nav[num], section[header=N], section[num=N], footer[num]); comp/* are mixin-like snippets imported inside sections (r2/r3/r4 responsive column widths, div-info title block). component/_info.scss, comp/_w-h-rate.scss and section/_rm-1st-top.scss exist but are not imported. This copy's header/_002.scss and section/_015-center.scss differ from 20230302. image/full.svg and half.svg exist but are not referenced.

```bash
cd target/20230314
npx sass sass/index.scss css/index.css --no-source-map || exit 1
```

## Techniques

- Theme via CSS custom properties in an inline &lt;style&gt; :root (--col-nav, --col-system, --col-txt, --col-border, --max-width)
- Attribute-driven layout: section[num=N] / section[header=N] / nav[num] select a pre-built SCSS block; ul.r2/.r3/.r4 pick 2/3/4 column cards
- Fixed top nav with collapsed hamburger button; media queries at 413/479/639/799/1023/1139px max-width and 480/640/768/1024px min-width
- JS-generated SVG section dividers (arc / slash / wave) via span[mask]
- SEO head: Open Graph, Twitter card, canonical, JSON-LD WebPage schema
- Same section num (21) reused twice with different bg-col to vary appearance

## External Assets

- https://pardn.io/image/head.png (favicon)
- https://pardn.io/web-template/image/20230314.jpg (og:image / twitter:image)
- https://pardn.io/web-template/target/20230314 (canonical / og:url)
- https://fakeimg.pl/1024/282828/eae0d0/?text=sample (placeholder images)

## Related

- [Project Structure](/project-structure)
- [Styling Workflow](/styling-workflow)
- [Frameworks](/frameworks)
