@press2ai/theme-specialist-glossy 0.10.0 → 0.11.0

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.10.0",
3
+ "version": "0.11.0",
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",
@@ -35,6 +35,7 @@
35
35
  "./ProfileArticle.astro": "./src/components/ProfileArticle.astro",
36
36
  "./ProfileCard.astro": "./src/components/ProfileCard.astro",
37
37
  "./Hero.astro": "./src/components/Hero.astro",
38
+ "./styles": "./src/styles/index.ts",
38
39
  "./styles/glossy.css": "./src/styles/glossy.css",
39
40
  "./schema": "./src/schema.ts",
40
41
  "./ai": "./src/ai.ts"
package/src/index.ts CHANGED
@@ -1,11 +1,3 @@
1
1
  export { profileSchema, type Profile } from './schema.ts';
2
2
  export { getJsonSchema, getAiManifest, getJsonLd } from './ai.ts';
3
- // Framework-agnostic templates (Hono, Cloudflare Workers, plain Node):
4
- // import { layout, hero, profileCard, profileArticle } from '@press2ai/theme-specialist-glossy/templates';
5
- //
6
- // Astro components (thin wrappers over templates):
7
- // import Layout from '@press2ai/theme-specialist-glossy/Layout.astro';
8
- // import ProfileArticle from '@press2ai/theme-specialist-glossy/ProfileArticle.astro';
9
- //
10
- // CSS (classless, works with any framework):
11
- // import '@press2ai/theme-specialist-glossy/styles/glossy.css';
3
+ export { composeCss, allCss } from './styles/index.ts';
@@ -0,0 +1,46 @@
1
+ export const css = `@import url('https://rsms.me/inter/inter.css');
2
+
3
+ :root {
4
+ --font: 'Inter', system-ui, sans-serif;
5
+ --g1: 0.5rem; --g2: 0.8125rem; --g3: 1.3125rem; --g4: 2.125rem; --g5: 3.4375rem; --g6: 5.5625rem; --g7: 9rem;
6
+ --t-xs: 0.8rem; --t-sm: 1rem; --t-md: 1.25rem; --t-lg: 1.563rem; --t-xl: 1.953rem; --t-2xl: 2.441rem;
7
+ --container: 1080px; --pad: var(--g4);
8
+ --w-6: 495px; --w-8: 667px; --w-10: 839px; --measure: 38rem;
9
+ --white: #ffffff; --bg: #f8f9fb; --card: #ffffff;
10
+ --ink: #1a1a2e; --ink-2: #4a4a68; --ink-3: #8b8ba3;
11
+ --line: #e8e8ef; --line-h: #d0d0de;
12
+ --violet: #7c5cfc; --violet-s: #f3f0ff; --violet-glow: rgba(124,92,252,.18);
13
+ --teal: #0d9488; --teal-s: #ecfdf5;
14
+ --rose: #e11d63; --rose-s: #fff1f5;
15
+ --amber: #d97706; --amber-s: #fffbeb;
16
+ --sky: #0284c7; --sky-s: #f0f9ff;
17
+ --r: 16px; --r-lg: 20px; --pill: 999px;
18
+ --shadow: 0 1px 3px rgba(0,0,0,.04);
19
+ --shadow-md: 0 4px 16px rgba(0,0,0,.06), 0 1px 3px rgba(0,0,0,.04);
20
+ --shadow-up: 0 8px 24px rgba(0,0,0,.08), 0 2px 6px rgba(0,0,0,.03);
21
+ --ease: 200ms cubic-bezier(.4,0,.2,1);
22
+ }
23
+ *, *::before, *::after { box-sizing: border-box; margin: 0; }
24
+ html { font-size: 16px; -webkit-font-smoothing: antialiased; scroll-behavior: smooth; }
25
+ body {
26
+ font-family: var(--font); font-feature-settings: 'cv11', 'ss01';
27
+ color: var(--ink); background: var(--bg); line-height: 1.6; overflow-x: clip;
28
+ }
29
+ h1, h2, h3 { color: var(--ink); letter-spacing: -0.02em; }
30
+ h1 { font-size: clamp(var(--t-xl), 5vw, var(--t-2xl)); font-weight: 800; line-height: 1.1; letter-spacing: -0.035em; margin-bottom: var(--g3); }
31
+ h2 { font-size: var(--t-lg); font-weight: 700; line-height: 1.25; margin-bottom: var(--g2); }
32
+ h3 { font-size: var(--t-md); font-weight: 600; line-height: 1.35; margin-bottom: var(--g2); }
33
+ p { font-size: var(--t-sm); line-height: 1.6; color: var(--ink-2); margin-bottom: var(--g2); max-width: var(--measure); }
34
+ a { color: var(--violet); text-decoration: none; transition: color var(--ease); }
35
+ a:hover { color: var(--ink); }
36
+ small { font-size: var(--t-xs); color: var(--ink-3); }
37
+ strong { color: var(--ink); font-weight: 600; }
38
+ main {
39
+ max-width: var(--container); margin-inline: auto;
40
+ padding-inline: var(--pad); padding-top: 0; padding-bottom: 0;
41
+ }
42
+ main > * + * { margin-top: var(--g5); }
43
+ @media (max-width: 640px) {
44
+ :root { --pad: var(--g3); }
45
+ main { padding: 0 var(--pad) var(--g4); }
46
+ }`;
@@ -0,0 +1,8 @@
1
+ export const css = `section:has(> article[itemscope]) {
2
+ display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--g3);
3
+ }
4
+ section:has(> article[itemscope]) > h2 { grid-column: 1 / -1; margin-bottom: var(--g2); }
5
+ section:has(> article[itemscope]) > nav[aria-label] { grid-column: 1 / -1; margin-bottom: var(--g2); }
6
+ @media (max-width: 640px) {
7
+ section:has(> article[itemscope]) { grid-template-columns: 1fr; }
8
+ }`;
@@ -0,0 +1,7 @@
1
+ export const css = `nav[aria-label] { display: flex; flex-wrap: wrap; gap: var(--g1); }
2
+ nav[aria-label] a {
3
+ display: inline-flex; align-items: center; height: 32px; padding: 0 var(--g2);
4
+ border-radius: var(--pill); font-size: var(--t-xs); font-weight: 500;
5
+ background: var(--white); border: 1px solid var(--line); color: var(--ink-2); transition: all var(--ease);
6
+ }
7
+ nav[aria-label] a:hover { border-color: var(--violet); color: var(--violet); background: var(--violet-s); }`;
@@ -0,0 +1,29 @@
1
+ export const css = `body > footer {
2
+ border-top: 1px solid var(--line); background: var(--white);
3
+ padding: var(--g5) 0 var(--g4);
4
+ }
5
+ body > footer > small {
6
+ display: block; max-width: var(--container); margin-inline: auto; padding-inline: var(--pad);
7
+ color: var(--ink-3); font-size: var(--t-xs);
8
+ }
9
+ body > footer a { color: var(--ink-2); transition: color var(--ease); }
10
+ body > footer a:hover { color: var(--violet); }
11
+ body > footer > small > nav {
12
+ display: grid; grid-template-columns: 2fr 1fr 1fr; gap: var(--g4);
13
+ margin-bottom: var(--g4);
14
+ }
15
+ body > footer > small > nav section { all: unset; display: block; }
16
+ body > footer > small > nav strong {
17
+ display: block; font-size: var(--t-xs); font-weight: 600; color: var(--ink);
18
+ text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: var(--g2);
19
+ }
20
+ body > footer > small > nav p { font-size: var(--t-xs); line-height: 1.6; color: var(--ink-3); margin: 0; max-width: 36ch; }
21
+ body > footer > small > nav a { display: block; font-size: var(--t-xs); line-height: 2; color: var(--ink-3); }
22
+ body > footer > small > nav a:hover { color: var(--violet); }
23
+ body > footer > small > p {
24
+ padding-top: var(--g3); border-top: 1px solid var(--line);
25
+ font-size: var(--t-xs); color: var(--ink-3); text-align: left;
26
+ }
27
+ @media (max-width: 640px) {
28
+ body > footer > small > nav { grid-template-columns: 1fr; gap: var(--g3); }
29
+ }`;
@@ -0,0 +1,15 @@
1
+ export const css = `label { display: block; font-size: var(--t-sm); color: var(--ink-2); font-weight: 500; margin-bottom: var(--g1); }
2
+ input[type="text"] {
3
+ display: block; width: 100%; margin-top: var(--g1); height: 44px;
4
+ padding: 0 var(--g3); background: var(--white); border: 1px solid var(--line);
5
+ border-radius: var(--r); color: var(--ink); font-size: var(--t-sm); font-family: var(--font);
6
+ transition: border-color var(--ease);
7
+ }
8
+ input[type="text"]:focus { outline: none; border-color: var(--violet); box-shadow: 0 0 0 3px var(--violet-glow); }
9
+ form:not([role="search"]) button[type="submit"] {
10
+ margin-top: var(--g3); height: 44px; padding: 0 var(--g4);
11
+ border: none; border-radius: var(--pill); background: var(--violet); color: var(--white);
12
+ font-size: var(--t-sm); font-weight: 600; font-family: var(--font); cursor: pointer;
13
+ transition: all var(--ease); box-shadow: 0 4px 14px var(--violet-glow);
14
+ }
15
+ form:not([role="search"]) button[type="submit"]:hover { background: var(--ink); transform: translateY(-1px); }`;
@@ -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; margin-bottom: var(--g2); }
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); }
@@ -289,10 +287,9 @@ main > article ul li {
289
287
  main > article dl { display: grid; grid-template-columns: max-content 1fr; gap: var(--g1) var(--g3); }
290
288
  main > article dt { font-size: var(--t-xs); color: var(--ink-3); font-weight: 500; }
291
289
  main > article dd { margin: 0; font-size: var(--t-sm); }
292
- main > article > footer { margin-top: var(--g4); padding-top: var(--g3); border-top: 1px solid var(--line); text-align: center; }
290
+
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) {
@@ -0,0 +1,12 @@
1
+ export const css = `body > header {
2
+ position: sticky; top: 0; z-index: 50;
3
+ background: rgba(255,255,255,.82);
4
+ backdrop-filter: saturate(180%) blur(16px); -webkit-backdrop-filter: saturate(180%) blur(16px);
5
+ border-bottom: 1px solid var(--line);
6
+ }
7
+ body > header nav {
8
+ max-width: var(--container); margin-inline: auto; padding-inline: var(--pad);
9
+ height: 48px; display: flex; align-items: center; justify-content: space-between;
10
+ }
11
+ body > header nav a { color: var(--ink-2); text-decoration: none; font-size: var(--t-sm); font-weight: 500; }
12
+ body > header nav a strong { font-size: var(--t-md); font-weight: 700; color: var(--ink); }`;
@@ -0,0 +1,72 @@
1
+ export const css = `hgroup {
2
+ position: relative; text-align: center; isolation: isolate; overflow: hidden;
3
+ padding: var(--g6) var(--pad) var(--g5);
4
+ margin-inline: calc(50% - 50vw);
5
+ background:
6
+ radial-gradient(ellipse 70% 50% at 20% 30%, var(--violet-glow) 0%, transparent 60%),
7
+ radial-gradient(ellipse 50% 60% at 80% 20%, rgba(13,148,136,.12) 0%, transparent 55%),
8
+ radial-gradient(ellipse 60% 40% at 50% 100%, rgba(225,29,99,.08) 0%, transparent 50%),
9
+ linear-gradient(180deg, #fff 0%, var(--bg) 100%);
10
+ border-bottom: 1px solid var(--line);
11
+ }
12
+ hgroup::before {
13
+ content: ''; position: absolute; inset: 0;
14
+ background-image:
15
+ linear-gradient(rgba(124,92,252,.04) 1px, transparent 1px),
16
+ linear-gradient(90deg, rgba(124,92,252,.04) 1px, transparent 1px);
17
+ background-size: 48px 48px;
18
+ mask-image: radial-gradient(ellipse 60% 50% at 50% 40%, black 0%, transparent 70%);
19
+ -webkit-mask-image: radial-gradient(ellipse 60% 50% at 50% 40%, black 0%, transparent 70%);
20
+ z-index: -1;
21
+ }
22
+ hgroup > * { position: relative; }
23
+ hgroup > p:first-child { display: inline-flex; margin-bottom: var(--g4); padding: 0; }
24
+ hgroup > p:first-child small {
25
+ display: inline-flex; align-items: center; gap: var(--g1);
26
+ background: rgba(255,255,255,.7); backdrop-filter: blur(8px);
27
+ padding: var(--g1) var(--g2); border: 1px solid var(--line);
28
+ border-radius: var(--pill); font-size: var(--t-xs); font-weight: 600; color: var(--teal);
29
+ box-shadow: var(--shadow);
30
+ }
31
+ hgroup > p:first-child small::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: #00d24a; box-shadow: 0 0 0 3px rgba(0,210,74,.2); }
32
+ hgroup h1 { max-width: 18ch; margin: 0 auto var(--g4); color: var(--ink); }
33
+ hgroup p { font-size: var(--t-md); line-height: 1.55; color: var(--ink-2); max-width: var(--measure); margin: 0 auto var(--g4); }
34
+ hgroup > nav {
35
+ display: flex; gap: var(--g2); flex-wrap: wrap; justify-content: center;
36
+ margin-top: var(--g4); margin-bottom: 0;
37
+ }
38
+ hgroup > nav > a {
39
+ display: inline-flex; align-items: center; height: 44px; padding: 0 var(--g4);
40
+ border-radius: var(--pill); font-weight: 600; font-size: var(--t-sm); transition: all var(--ease);
41
+ background: var(--white); color: var(--ink); border: 1px solid var(--line);
42
+ }
43
+ hgroup > nav > a:first-child {
44
+ background: var(--violet); color: var(--white); border-color: transparent;
45
+ box-shadow: 0 4px 14px var(--violet-glow);
46
+ }
47
+ hgroup > nav > a:first-child:hover { background: var(--ink); color: var(--white); transform: translateY(-1px); box-shadow: 0 6px 20px rgba(26,26,46,.2); }
48
+ hgroup > nav > a:not(:first-child):hover { border-color: var(--line-h); background: var(--bg); }
49
+ form[role="search"] {
50
+ display: flex; max-width: var(--w-6); height: 48px;
51
+ margin: var(--g4) auto 0; background: var(--white);
52
+ border: 1px solid var(--line); border-radius: var(--pill);
53
+ overflow: hidden; box-shadow: var(--shadow-md); transition: all var(--ease);
54
+ }
55
+ form[role="search"]:focus-within { border-color: var(--violet); box-shadow: 0 4px 16px var(--violet-glow); }
56
+ form[role="search"] input {
57
+ flex: 1; min-width: 0; border: none; background: transparent; color: var(--ink);
58
+ padding: 0 var(--g3); font-size: var(--t-sm); font-family: var(--font); outline: none;
59
+ -webkit-appearance: none; appearance: none;
60
+ }
61
+ form[role="search"] input::placeholder { color: var(--ink-3); }
62
+ form[role="search"] button {
63
+ flex-shrink: 0; height: 100%; border: none; background: var(--violet); color: var(--white);
64
+ padding: 0 var(--g4); font-size: var(--t-sm); font-weight: 600;
65
+ font-family: var(--font); cursor: pointer; transition: background var(--ease);
66
+ }
67
+ form[role="search"] button:hover { background: var(--ink); }
68
+ @media (max-width: 640px) {
69
+ hgroup { padding: var(--g5) var(--pad) var(--g4); }
70
+ form[role="search"] { height: 40px; }
71
+ form[role="search"] input { font-size: var(--t-xs); }
72
+ }`;
@@ -0,0 +1,34 @@
1
+ import { css as base } from './base.ts';
2
+ import { css as header } from './header.ts';
3
+ import { css as footer } from './footer.ts';
4
+ import { css as hero } from './hero.ts';
5
+ import { css as statBar } from './stat-bar.ts';
6
+ import { css as categoryNav } from './category-nav.ts';
7
+ import { css as steps } from './steps.ts';
8
+ import { css as catalogGrid } from './catalog-grid.ts';
9
+ import { css as profileCard } from './profile-card.ts';
10
+ import { css as profileArticle } from './profile-article.ts';
11
+ import { css as pagination } from './pagination.ts';
12
+ import { css as forms } from './forms.ts';
13
+
14
+ const components: Record<string, string> = {
15
+ hero,
16
+ statBar,
17
+ categoryNav,
18
+ steps,
19
+ catalogGrid,
20
+ profileCard,
21
+ profileArticle,
22
+ pagination,
23
+ forms,
24
+ };
25
+
26
+ const layoutCss = base + '\n' + header + '\n' + footer;
27
+
28
+ export function composeCss(...names: string[]): string {
29
+ return layoutCss + '\n' + names.map(n => components[n] ?? '').join('\n');
30
+ }
31
+
32
+ export const allCss = layoutCss + '\n' + Object.values(components).join('\n');
33
+
34
+ export { base, header, footer, hero, statBar, categoryNav, steps, catalogGrid, profileCard, profileArticle, pagination, forms };
@@ -0,0 +1,7 @@
1
+ export const css = `main > nav p { display: flex; align-items: center; justify-content: center; gap: var(--g3); font-size: var(--t-sm); color: var(--ink-3); }
2
+ main > nav a {
3
+ height: 32px; display: inline-flex; align-items: center; padding: 0 var(--g2);
4
+ border-radius: var(--pill); background: var(--white); border: 1px solid var(--line);
5
+ font-size: var(--t-xs); font-weight: 500; transition: all var(--ease);
6
+ }
7
+ main > nav a:hover { border-color: var(--violet); color: var(--violet); transform: translateY(-1px); }`;
@@ -0,0 +1,27 @@
1
+ export const css = `main > article {
2
+ max-width: var(--w-8); margin-inline: auto; background: var(--card);
3
+ border: 1px solid var(--line); border-radius: var(--r-lg); padding: var(--g5); box-shadow: var(--shadow-md);
4
+ }
5
+ main > article > header { border-bottom: 1px solid var(--line); padding-bottom: var(--g3); margin-bottom: var(--g4); }
6
+ main > article > header h1 { margin-bottom: var(--g2); }
7
+ main > article > header p { font-size: var(--t-md); color: var(--ink-3); margin: 0; }
8
+ main > article address {
9
+ font-style: normal; display: inline-block; background: var(--bg);
10
+ padding: var(--g1) var(--g2); border-radius: var(--r); margin-bottom: var(--g3);
11
+ color: var(--ink-2); border: 1px solid var(--line); font-size: var(--t-sm);
12
+ }
13
+ main > article section { margin: var(--g4) 0; }
14
+ main > article section h2 { font-size: var(--t-xs); font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-3); margin: 0 0 var(--g2); }
15
+ main > article ul { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: var(--g1); }
16
+ main > article ul li {
17
+ background: var(--violet-s); color: var(--violet);
18
+ padding: calc(var(--g1) / 2) var(--g2); border-radius: var(--pill); font-size: var(--t-xs); font-weight: 500;
19
+ }
20
+ main > article dl { display: grid; grid-template-columns: max-content 1fr; gap: var(--g1) var(--g3); }
21
+ main > article dt { font-size: var(--t-xs); color: var(--ink-3); font-weight: 500; }
22
+ main > article dd { margin: 0; font-size: var(--t-sm); }
23
+ @media (max-width: 640px) {
24
+ main > article { padding: var(--g3); }
25
+ main > article dl { grid-template-columns: 1fr; gap: calc(var(--g1) / 2) 0; }
26
+ main > article dt { margin-top: var(--g2); }
27
+ }`;
@@ -0,0 +1,35 @@
1
+ export const css = `article[itemscope] {
2
+ position: relative; background: var(--card); border: 1px solid var(--line);
3
+ border-radius: var(--r-lg); padding: var(--g3);
4
+ display: flex; flex-direction: column;
5
+ box-shadow: var(--shadow); transition: all var(--ease);
6
+ }
7
+ article[itemscope]:hover { transform: translateY(-2px); box-shadow: var(--shadow-up); border-color: var(--line-h); }
8
+ article[itemscope] > div[aria-hidden] {
9
+ width: 40px; height: 40px; border-radius: 50%;
10
+ display: flex; align-items: center; justify-content: center;
11
+ font-size: var(--t-xs); font-weight: 700; color: var(--white);
12
+ margin-bottom: var(--g2); flex-shrink: 0; background: var(--violet);
13
+ }
14
+ article[itemscope] header { margin-bottom: var(--g1); }
15
+ article[itemscope] h2 { font-size: var(--t-sm); font-weight: 600; line-height: 1.3; margin: 0 0 2px; }
16
+ article[itemscope] h2 a { color: var(--ink); }
17
+ article[itemscope] h2 a:hover { color: var(--violet); }
18
+ article[itemscope] header p { font-size: var(--t-xs); line-height: 1.4; color: var(--ink-3); margin: 0; }
19
+ article[itemscope] header p:has([itemprop="address"]) {
20
+ display: inline-flex; align-items: center; gap: 4px; margin-top: 2px;
21
+ }
22
+ article[itemscope] header p:has([itemprop="address"])::before {
23
+ content: ''; display: inline-block; width: 3px; height: 3px; border-radius: 50%; background: var(--ink-3);
24
+ }
25
+ article[itemscope] [itemprop="description"] { font-size: var(--t-xs); line-height: 1.5; margin: var(--g1) 0 0; color: var(--ink-2); }
26
+ article[itemscope] ul { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: 4px; margin-top: var(--g1); }
27
+ article[itemscope] ul li {
28
+ background: var(--violet-s); color: var(--violet);
29
+ padding: 1px var(--g1); border-radius: var(--pill); font-size: 0.7rem; font-weight: 500;
30
+ }
31
+ article[itemscope] > a:last-child {
32
+ display: inline-flex; align-items: center; margin-top: auto; padding-top: var(--g2);
33
+ font-size: var(--t-xs); font-weight: 600; color: var(--violet); transition: all var(--ease);
34
+ }
35
+ article[itemscope] > a:last-child:hover { color: var(--ink); gap: 4px; }`;
@@ -0,0 +1,19 @@
1
+ export const css = `section:has(> dl) > p {
2
+ text-align: center; font-size: var(--t-md); font-weight: 500; line-height: 1.55;
3
+ color: var(--ink); margin: 0 auto var(--g4); max-width: var(--measure);
4
+ }
5
+ section:has(> dl) > dl {
6
+ display: flex; justify-content: center; gap: var(--g5); margin: 0 auto; padding: 0;
7
+ border: none; background: none; box-shadow: none;
8
+ }
9
+ section:has(> dl) > dl div { text-align: center; }
10
+ section:has(> dl) > dl div > span:has(> svg) {
11
+ display: flex; align-items: center; justify-content: center; width: 36px; height: 36px;
12
+ margin: 0 auto var(--g1); background: var(--violet-s); border-radius: 50%; color: var(--violet);
13
+ }
14
+ section:has(> dl) > dl div > span:has(> svg) > svg { width: 18px; height: 18px; }
15
+ section:has(> dl) > dl dt { font-size: var(--t-lg); font-weight: 800; line-height: 1.2; color: var(--violet); }
16
+ 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; }
17
+ @media (max-width: 640px) {
18
+ section:has(> dl) > dl { gap: var(--g3); }
19
+ }`;
@@ -0,0 +1,29 @@
1
+ export const css = `section:has(> ol) {
2
+ margin-inline: calc(50% - 50vw);
3
+ padding: var(--g5) var(--pad);
4
+ background: var(--white);
5
+ border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
6
+ }
7
+ section:has(> ol) > * { max-width: var(--container); margin-inline: auto; }
8
+ section:has(> ol) > h2 { text-align: center; margin-bottom: var(--g4); }
9
+ section > ol {
10
+ list-style: none; padding: 0; display: grid;
11
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--g3); margin: 0 auto; counter-reset: steps;
12
+ }
13
+ section > ol li {
14
+ counter-increment: steps; background: var(--bg); border: 1px solid var(--line);
15
+ border-radius: var(--r-lg); padding: var(--g4) var(--g3); text-align: center; transition: all var(--ease);
16
+ }
17
+ section > ol li:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
18
+ section > ol li::before {
19
+ content: counter(steps); display: flex; align-items: center; justify-content: center;
20
+ width: 40px; height: 40px; margin: 0 auto var(--g2);
21
+ border-radius: 50%; font-size: var(--t-sm); font-weight: 700;
22
+ background: var(--violet-s); color: var(--violet);
23
+ }
24
+ section > ol li strong { display: block; font-size: var(--t-sm); line-height: 1.4; margin-bottom: 4px; color: var(--ink); }
25
+ section > ol li span { font-size: var(--t-xs); line-height: 1.5; color: var(--ink-3); }
26
+ @media (max-width: 640px) {
27
+ section > ol { grid-template-columns: 1fr; }
28
+ section:has(> ol) { padding: var(--g4) var(--pad); }
29
+ }`;
@@ -12,7 +12,7 @@ export interface LayoutProps {
12
12
  footerContent?: string;
13
13
  }
14
14
 
15
- const THEME_VERSION = '0.10.0';
15
+ const THEME_VERSION = '0.11.0';
16
16
 
17
17
  export function layout(props: LayoutProps, body: string): string {
18
18
  const {