@press2ai/theme-specialist-glossy 0.9.2 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@press2ai/theme-specialist-glossy",
3
- "version": "0.9.2",
3
+ "version": "0.10.1",
4
4
  "description": "Classless, AI-first theme inspired by Stripe. Framework-agnostic templates (Hono, Astro, raw HTML). Semantic HTML, Schema.org microdata, JSON-LD — built for LLM crawlers.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -57,12 +57,12 @@ body > header nav {
57
57
  body > header nav a { color: var(--ink-2); text-decoration: none; font-size: var(--t-sm); font-weight: 500; }
58
58
  body > header nav a strong { font-size: var(--t-md); font-weight: 700; color: var(--ink); }
59
59
 
60
- /* Main — each block carries its own margin-top, no position-dependent rules */
60
+ /* Main — systemic gap between blocks, no per-block hacks */
61
61
  main {
62
62
  max-width: var(--container); margin-inline: auto;
63
63
  padding-inline: var(--pad); padding-top: 0; padding-bottom: 0;
64
64
  }
65
- main > h1 { margin-top: var(--g5); }
65
+ main > * + * { margin-top: var(--g5); }
66
66
 
67
67
  /* Footer */
68
68
  body > footer {
@@ -96,7 +96,7 @@ body > footer > small > p {
96
96
  hgroup {
97
97
  position: relative; text-align: center; isolation: isolate; overflow: hidden;
98
98
  padding: var(--g6) var(--pad) var(--g5);
99
- margin: 0 calc(50% - 50vw) 0 calc(50% - 50vw);
99
+ margin-inline: calc(50% - 50vw);
100
100
  background:
101
101
  radial-gradient(ellipse 70% 50% at 20% 30%, var(--violet-glow) 0%, transparent 60%),
102
102
  radial-gradient(ellipse 50% 60% at 80% 20%, rgba(13,148,136,.12) 0%, transparent 55%),
@@ -166,7 +166,6 @@ form[role="search"] button {
166
166
  form[role="search"] button:hover { background: var(--ink); }
167
167
 
168
168
  /* Stats — structural selector, no hardcoded aria-label */
169
- section:has(> dl) { margin-top: var(--g6); }
170
169
  section:has(> dl) > p {
171
170
  text-align: center; font-size: var(--t-md); font-weight: 500; line-height: 1.55;
172
171
  color: var(--ink); margin: 0 auto var(--g4); max-width: var(--measure);
@@ -185,7 +184,7 @@ section:has(> dl) > dl dt { font-size: var(--t-lg); font-weight: 800; line-heigh
185
184
  section:has(> dl) > dl dd { margin: 2px 0 0; font-size: var(--t-xs); line-height: 1.4; color: var(--ink-3); font-weight: 500; text-transform: uppercase; letter-spacing: 0.06em; }
186
185
 
187
186
  /* Category pills — single accent, no position-dependent colors */
188
- nav[aria-label] { display: flex; flex-wrap: wrap; gap: var(--g1); margin-top: var(--g5); }
187
+ nav[aria-label] { display: flex; flex-wrap: wrap; gap: var(--g1); }
189
188
  nav[aria-label] a {
190
189
  display: inline-flex; align-items: center; height: 32px; padding: 0 var(--g2);
191
190
  border-radius: var(--pill); font-size: var(--t-xs); font-weight: 500;
@@ -195,7 +194,7 @@ nav[aria-label] a:hover { border-color: var(--violet); color: var(--violet); bac
195
194
 
196
195
  /* Steps — full-bleed white band */
197
196
  section:has(> ol) {
198
- margin: 0 calc(50% - 50vw) 0 calc(50% - 50vw);
197
+ margin-inline: calc(50% - 50vw);
199
198
  padding: var(--g5) var(--pad);
200
199
  background: var(--white);
201
200
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
@@ -222,11 +221,10 @@ section > ol li span { font-size: var(--t-xs); line-height: 1.5; color: var(--in
222
221
 
223
222
  /* Trainer cards — no position-dependent colors */
224
223
  section:has(> article[itemscope]) {
225
- margin-top: var(--g6);
226
224
  display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--g3);
227
225
  }
228
226
  section:has(> article[itemscope]) > h2 { grid-column: 1 / -1; margin-bottom: var(--g2); }
229
- section:has(> article[itemscope]) > nav[aria-label] { grid-column: 1 / -1; margin-top: 0; }
227
+ section:has(> article[itemscope]) > nav[aria-label] { grid-column: 1 / -1; margin-bottom: var(--g2); }
230
228
  article[itemscope] {
231
229
  position: relative; background: var(--card); border: 1px solid var(--line);
232
230
  border-radius: var(--r-lg); padding: var(--g3);
@@ -268,7 +266,7 @@ article[itemscope] > a:last-child:hover { color: var(--ink); gap: 4px; }
268
266
 
269
267
  /* Single trainer */
270
268
  main > article {
271
- max-width: var(--w-8); margin: var(--g5) auto 0; background: var(--card);
269
+ max-width: var(--w-8); margin-inline: auto; background: var(--card);
272
270
  border: 1px solid var(--line); border-radius: var(--r-lg); padding: var(--g5); box-shadow: var(--shadow-md);
273
271
  }
274
272
  main > article > header { border-bottom: 1px solid var(--line); padding-bottom: var(--g3); margin-bottom: var(--g4); }
@@ -292,7 +290,6 @@ main > article dd { margin: 0; font-size: var(--t-sm); }
292
290
  main > article > footer { margin-top: var(--g4); padding-top: var(--g3); border-top: 1px solid var(--line); text-align: center; }
293
291
 
294
292
  /* Pagination */
295
- main > nav { margin-top: var(--g4); }
296
293
  main > nav p { display: flex; align-items: center; justify-content: center; gap: var(--g3); font-size: var(--t-sm); color: var(--ink-3); }
297
294
  main > nav a {
298
295
  height: 32px; display: inline-flex; align-items: center; padding: 0 var(--g2);
@@ -319,7 +316,6 @@ form:not([role="search"]) button[type="submit"] {
319
316
  form:not([role="search"]) button[type="submit"]:hover { background: var(--ink); transform: translateY(-1px); }
320
317
 
321
318
  /* Trust block */
322
- aside:has(> ul) { margin-top: var(--g5); }
323
319
 
324
320
  /* Responsive */
325
321
  @media (max-width: 640px) {
@@ -55,6 +55,14 @@ export function steps(title: string, items: { title: string; description: string
55
55
  return `<section>\n<h2>${esc(title)}</h2>\n<ol>\n${lis}\n</ol>\n</section>`;
56
56
  }
57
57
 
58
+ export function catalogGrid(p: { title: string; filters?: string; cards: string }): string {
59
+ return `<section>
60
+ <h2>${esc(p.title)}</h2>
61
+ ${p.filters ?? ''}
62
+ ${p.cards}
63
+ </section>`;
64
+ }
65
+
58
66
  export function trustBlock(title: string, points: string[]): string {
59
67
  const items = points.map(p => `<li>${esc(p)}</li>`).join('\n');
60
68
  return `<aside>
@@ -2,5 +2,5 @@ export { layout, type LayoutProps } from './layout.ts';
2
2
  export { hero } from './hero.ts';
3
3
  export { profileCard } from './profile-card.ts';
4
4
  export { profileArticle } from './profile-article.ts';
5
- export { catalogHero, statBar, categoryNav, steps, trustBlock, pagination, type CatalogHeroProps, type PaginationProps } from './catalog.ts';
5
+ export { catalogHero, catalogGrid, statBar, categoryNav, steps, trustBlock, pagination, type CatalogHeroProps, type PaginationProps } from './catalog.ts';
6
6
  export { esc, fullName } from './helpers.ts';
@@ -12,7 +12,7 @@ export interface LayoutProps {
12
12
  footerContent?: string;
13
13
  }
14
14
 
15
- const THEME_VERSION = '0.9.2';
15
+ const THEME_VERSION = '0.10.1';
16
16
 
17
17
  export function layout(props: LayoutProps, body: string): string {
18
18
  const {