@md-plugins/quasar-app-extension-q-press 0.1.0-beta.21 → 0.1.0-beta.22

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.
Files changed (30) hide show
  1. package/README.md +2 -2
  2. package/dist/index.js +1 -1
  3. package/dist/install.js +1 -1
  4. package/dist/templates/init/src/_q-press/components/MarkdownApi.vue +1 -1
  5. package/dist/templates/init/src/_q-press/css/app.scss +73 -0
  6. package/dist/templates/init/src/_q-press/css/themes/newspaper.scss +4 -4
  7. package/dist/templates/init/src/components/LandingPage/LandingPage.vue +1068 -225
  8. package/dist/templates/init/src/markdown/other/upgrade-guide.md +8 -7
  9. package/dist/templates/init/src/markdown/quasar-app-extensions/qpress/overview.md +1 -1
  10. package/dist/templates/init/src/markdown/quasar-app-extensions/vite-md-plugin-app-ext/overview.md +1 -1
  11. package/dist/templates/init/src/pages/Error404.vue +19 -0
  12. package/dist/templates/init/src/pages/ErrorNotFound.vue +19 -0
  13. package/dist/templates/update/src/_q-press/components/MarkdownApi.vue +1 -1
  14. package/dist/templates/update/src/_q-press/css/app.scss +73 -0
  15. package/dist/templates/update/src/_q-press/css/themes/newspaper.scss +4 -4
  16. package/package.json +17 -17
  17. package/src/index.ts +1 -1
  18. package/src/install.ts +1 -1
  19. package/src/templates/init/src/_q-press/components/MarkdownApi.vue +1 -1
  20. package/src/templates/init/src/_q-press/css/app.scss +73 -0
  21. package/src/templates/init/src/_q-press/css/themes/newspaper.scss +4 -4
  22. package/src/templates/init/src/components/LandingPage/LandingPage.vue +1068 -225
  23. package/src/templates/init/src/markdown/other/upgrade-guide.md +8 -7
  24. package/src/templates/init/src/markdown/quasar-app-extensions/qpress/overview.md +1 -1
  25. package/src/templates/init/src/markdown/quasar-app-extensions/vite-md-plugin-app-ext/overview.md +1 -1
  26. package/src/templates/init/src/pages/Error404.vue +19 -0
  27. package/src/templates/init/src/pages/ErrorNotFound.vue +19 -0
  28. package/src/templates/update/src/_q-press/components/MarkdownApi.vue +1 -1
  29. package/src/templates/update/src/_q-press/css/app.scss +73 -0
  30. package/src/templates/update/src/_q-press/css/themes/newspaper.scss +4 -4
@@ -1,205 +1,371 @@
1
1
  <template>
2
- <div class="landing-page markdown-brand">
2
+ <section class="landing-page markdown-brand">
3
3
  <header class="hero">
4
- <img
5
- src="https://raw.githubusercontent.com/md-plugins/md-plugins/refs/heads/main/media/markdown-1024x1024.png"
6
- alt="Markdown Plugins Logo"
7
- class="hero-logo"
8
- />
9
- <h1 class="hero-title">Markdown Plugins</h1>
10
- <h2 class="hero-subtitle">(@md-plugins)</h2>
11
- <div class="row justify-center">
12
- <p class="hero-subtitle2" style="max-width: 660px">
13
- {{ siteConfig.description }}
14
- </p>
15
- </div>
4
+ <div class="hero__mesh hero__mesh--left" />
5
+ <div class="hero__mesh hero__mesh--right" />
16
6
 
17
- <div class="hero-buttons">
18
- <router-link
19
- to="/getting-started/introduction"
20
- class="hero-button q-btn q-btn-item non-selectable no-outline q-btn--standard q-btn--rectangle q-btn--actionable q-focusable q-hoverable q-btn--no-uppercase q-btn--rounded q-btn--dense"
21
- >
22
- <span
23
- class="q-btn__content text-center col items-center q-anchor--skip justify-center row"
24
- >
25
- Get Started
26
- </span>
27
- </router-link>
28
- <router-link
29
- to="/other/upgrade-guide"
30
- class="hero-button q-btn q-btn-item non-selectable no-outline q-btn--standard q-btn--rectangle q-btn--actionable q-focusable q-hoverable q-btn--no-uppercase q-btn--rounded q-btn--dense"
31
- >
32
- <span
33
- class="q-btn__content text-center col items-center q-anchor--skip justify-center row"
34
- >
35
- Upgrade Guide
36
- </span>
37
- </router-link>
38
- <a
39
- href="https://github.com/md-plugins/md-plugins"
40
- target="_blank"
41
- class="hero-button q-btn q-btn-item non-selectable no-outline q-btn--standard q-btn--rectangle q-btn--actionable q-focusable q-hoverable q-btn--no-uppercase q-btn--rounded q-btn--dense"
42
- >
43
- <span
44
- class="q-btn__content text-center col items-center q-anchor--skip justify-center row"
45
- >
46
- <q-icon :name="fabGithub" class="q-mr-sm" />
47
- GitHub Repo
48
- </span>
49
- </a>
7
+ <div class="hero__grid">
8
+ <div class="hero__copy">
9
+ <div class="hero__eyebrow">{{ heroEyebrow }}</div>
10
+ <img :src="logoSrc" :alt="logoAlt" class="hero-logo" />
11
+ <h1 class="hero-title">{{ productName }}</h1>
12
+
13
+ <p class="hero-subtitle">{{ siteConfig.description }}</p>
14
+ <p class="hero-lede">{{ heroLede }}</p>
15
+
16
+ <div class="hero-buttons">
17
+ <q-btn
18
+ to="/getting-started/introduction"
19
+ no-caps
20
+ rounded
21
+ unelevated
22
+ class="hero-button hero-button--solid"
23
+ >
24
+ <div class="hero-button__content q-anchor--skip">
25
+ <span class="hero-button__slot hero-button__slot--empty" aria-hidden="true" />
26
+ <span class="hero-button__label">Get Started</span>
27
+ <span class="hero-button__slot">
28
+ <q-icon :name="biArrowRightCircle" />
29
+ </span>
30
+ </div>
31
+ </q-btn>
32
+
33
+ <q-btn
34
+ to="/other/upgrade-guide"
35
+ no-caps
36
+ rounded
37
+ unelevated
38
+ class="hero-button hero-button--ghost"
39
+ >
40
+ <div class="hero-button__content q-anchor--skip">
41
+ <span class="hero-button__slot hero-button__slot--empty" aria-hidden="true" />
42
+ <span class="hero-button__label">Upgrade Guide</span>
43
+ <span class="hero-button__slot">
44
+ <q-icon name="upgrade" />
45
+ </span>
46
+ </div>
47
+ </q-btn>
48
+
49
+ <q-btn
50
+ :href="githubRepoUrl"
51
+ target="_blank"
52
+ rel="noopener noreferrer"
53
+ no-caps
54
+ rounded
55
+ unelevated
56
+ class="hero-button hero-button--ghost"
57
+ >
58
+ <div class="hero-button__content q-anchor--skip">
59
+ <span class="hero-button__slot">
60
+ <q-icon :name="fabGithub" />
61
+ </span>
62
+ <span class="hero-button__label">GitHub Repo</span>
63
+ <span class="hero-button__slot hero-button__slot--empty" aria-hidden="true" />
64
+ </div>
65
+ </q-btn>
66
+ </div>
67
+
68
+ <div class="hero-pills">
69
+ <span v-for="pill in heroPills" :key="pill" class="hero-pill">
70
+ {{ pill }}
71
+ </span>
72
+ </div>
73
+ </div>
74
+
75
+ <div class="hero__visual">
76
+ <div class="preview-panel">
77
+ <div class="preview-panel__header">
78
+ <span class="preview-panel__kicker">{{ previewKicker }}</span>
79
+ <span class="preview-panel__note">Docs and app-ready</span>
80
+ </div>
81
+
82
+ <div class="preview-panel__body">
83
+ <div class="preview-panel__copy">
84
+ <h2>{{ previewTitle }}</h2>
85
+ <p>{{ previewBody }}</p>
86
+ </div>
87
+
88
+ <div class="preview-highlights">
89
+ <article
90
+ v-for="highlight in familyHighlights"
91
+ :key="highlight.label"
92
+ class="highlight-card"
93
+ >
94
+ <div class="highlight-card__value">{{ highlight.value }}</div>
95
+ <div class="highlight-card__label">{{ highlight.label }}</div>
96
+ <p class="highlight-card__body">{{ highlight.body }}</p>
97
+ </article>
98
+ </div>
99
+ </div>
100
+ </div>
101
+ </div>
50
102
  </div>
51
103
  </header>
52
- <div class="byline">
53
- <p>
54
- Markdown Plugins go beyond the standard Markdown syntax.<br />Discover the power of Markdown
55
- Plugins and enhance your documentation experience!
56
- </p>
57
- <p>
58
- Use the Markdown-it and Vite plugins in Vue/Vite projects, or choose the Quasar app
59
- extensions when you want Q-Press and Quasar CLI Vite integration.
60
- </p>
61
- </div>
62
- <div class="row justify-center hero">
63
- <div class="hero-title">Markdown-It! Plugins</div>
64
- </div>
65
- <main class="content grid-container">
66
- <div
67
- v-for="plugin in mdPlugins"
68
- :key="plugin.name"
69
- class="section grid-item"
70
- @click="navigate(plugin.path)"
71
- >
72
- <q-card flat style="background: transparent">
73
- <h2>{{ plugin.name }}</h2>
74
- <p>{{ plugin.desc }}</p>
75
- </q-card>
76
- </div>
77
- </main>
78
- <div class="row justify-center hero">
79
- <div class="hero-title">Vite Plugins</div>
80
- </div>
81
- <main class="content grid-container">
82
- <div
83
- v-for="plugin in vitePlugins"
84
- :key="plugin.name"
85
- class="section grid-item"
86
- @click="navigate(plugin.path)"
87
- >
88
- <h2>{{ plugin.name }}</h2>
89
- <p>{{ plugin.desc }}</p>
104
+
105
+ <section class="feature-section">
106
+ <div class="section-heading">
107
+ <div class="section-heading__eyebrow">Included</div>
108
+ <h2 class="section-heading__title">{{ sectionTitle }}</h2>
109
+ <p class="section-heading__text">{{ sectionText }}</p>
90
110
  </div>
91
- </main>
92
- <div class="row justify-center hero">
93
- <div class="hero-title">Quasar App Extensions</div>
94
- </div>
95
- <main class="content grid-container">
96
- <div
97
- v-for="ext in appExtensions"
98
- :key="ext.name"
99
- class="section grid-item"
100
- @click="navigate(ext.path)"
101
- >
102
- <h2>{{ ext.name }}</h2>
103
- <p>{{ ext.desc }}</p>
111
+
112
+ <div class="feature-grid">
113
+ <article v-for="feature in featureCards" :key="feature.title" class="feature-card">
114
+ <div class="feature-card__icon">
115
+ <q-icon :name="feature.icon" />
116
+ </div>
117
+ <h3 class="feature-card__title">{{ feature.title }}</h3>
118
+ <p class="feature-card__body">{{ feature.body }}</p>
119
+ </article>
104
120
  </div>
105
- </main>
106
- <q-separator />
107
- <div class="byline">
108
- <p>
109
- Don't forget to check out the Q-Press app extension for Quasar to create beautiful
110
- documentation sites.
111
- </p>
112
- <p>
113
- This site is built with Q-Press! Install it, set it up, choose a theme and start your own
114
- site!
115
- </p>
116
- </div>
117
- <q-separator />
118
- <div class="byline">
119
- <p>
120
- We hope you find this documentation helpful. If you have any questions or need further
121
- assistance, please don't hesitate to reach out to our support team.
122
- </p>
123
- <p>Happy coding!</p>
124
- </div>
125
- </div>
121
+ </section>
122
+
123
+ <section class="plugin-sections">
124
+ <article v-for="group in pluginGroups" :key="group.title" class="plugin-group">
125
+ <div class="plugin-group__header">
126
+ <div class="plugin-group__eyebrow">{{ group.eyebrow }}</div>
127
+ <h2 class="plugin-group__title">{{ group.title }}</h2>
128
+ <p class="plugin-group__body">{{ group.body }}</p>
129
+ </div>
130
+
131
+ <div class="plugin-grid">
132
+ <router-link
133
+ v-for="item in group.items"
134
+ :key="item.name"
135
+ :to="item.path"
136
+ class="plugin-tile"
137
+ >
138
+ <div class="plugin-tile__name">{{ item.name }}</div>
139
+ <p class="plugin-tile__body">{{ item.desc }}</p>
140
+ <div class="plugin-tile__meta">
141
+ <span>Open docs</span>
142
+ <q-icon :name="biArrowRightCircle" />
143
+ </div>
144
+ </router-link>
145
+ </div>
146
+ </article>
147
+ </section>
148
+
149
+ <section class="resource-section">
150
+ <article class="resource-card resource-card--primary">
151
+ <div class="resource-card__eyebrow">Ecosystem</div>
152
+ <h2 class="resource-card__title">
153
+ Markdown authoring, Vite transforms, and Quasar docs tooling in one stack
154
+ </h2>
155
+ <p class="resource-card__body">
156
+ Use the Markdown-it and Vite plugins directly in Vue and Vite projects, or move up to the
157
+ Quasar app extensions when you want docs-site scaffolding, examples, and Q-Press
158
+ integration.
159
+ </p>
160
+
161
+ <div class="resource-card__actions">
162
+ <a :href="githubRepoUrl" target="_blank" rel="noopener noreferrer" class="resource-link">
163
+ <q-icon :name="fabGithub" />
164
+ <span>md-plugins Repo</span>
165
+ </a>
166
+
167
+ <a
168
+ href="https://www.npmjs.com/package/@md-plugins/quasar-app-extension-q-press"
169
+ target="_blank"
170
+ rel="noopener noreferrer"
171
+ class="resource-link"
172
+ >
173
+ <q-icon name="description" />
174
+ <span>Q-Press</span>
175
+ </a>
176
+
177
+ <a
178
+ href="https://www.npmjs.com/search?q=%40md-plugins"
179
+ target="_blank"
180
+ rel="noopener noreferrer"
181
+ class="resource-link"
182
+ >
183
+ <q-icon name="inventory_2" />
184
+ <span>NPM Packages</span>
185
+ </a>
186
+ </div>
187
+ </article>
188
+
189
+ <article class="resource-card resource-card--secondary">
190
+ <div class="resource-card__eyebrow">Need Help?</div>
191
+ <h2 class="resource-card__title">
192
+ Start with introduction, then pick the layer you actually need
193
+ </h2>
194
+ <p class="resource-card__body">
195
+ Most teams only need one or two pieces of the stack. The docs are organized so you can
196
+ start with the overview, then jump straight to plugin-specific pages or the Q-Press path.
197
+ </p>
198
+
199
+ <div class="resource-list">
200
+ <div v-for="item in supportItems" :key="item.title" class="resource-list__item">
201
+ <div class="resource-list__title">{{ item.title }}</div>
202
+ <div class="resource-list__body">{{ item.body }}</div>
203
+ </div>
204
+ </div>
205
+ </article>
206
+ </section>
207
+ </section>
126
208
  </template>
127
209
 
128
210
  <script setup lang="ts">
129
- import { QIcon } from 'quasar'
130
211
  import { fabGithub } from '@quasar/extras/fontawesome-v7'
131
- import { useRouter } from 'vue-router'
212
+ import { biArrowRightCircle } from '@quasar/extras/bootstrap-icons'
132
213
  import siteConfig from '../../siteConfig'
133
214
 
134
- const router = useRouter()
215
+ const productName = 'Markdown Plugins'
216
+ const logoSrc =
217
+ 'https://raw.githubusercontent.com/md-plugins/md-plugins/refs/heads/main/media/markdown-1024x1024.png'
218
+ const logoAlt = 'Markdown Plugins Logo'
219
+ const githubRepoUrl = 'https://github.com/md-plugins/md-plugins'
220
+ const heroEyebrow = 'Markdown + Vue + Quasar'
221
+ const heroLede =
222
+ 'Build richer Markdown experiences with a layered toolset: authoring plugins, Vite transforms, example loaders, and Quasar documentation scaffolding that all speak the same language.'
223
+ const previewKicker = 'Plugin Families'
224
+ const previewTitle = 'Start small with a single plugin, or grow into a full documentation workflow'
225
+ const previewBody =
226
+ 'MD Plugins covers multiple layers of the stack, from Markdown syntax helpers and imported content to Vue SFC generation and full Q-Press documentation sites.'
227
+ const sectionTitle =
228
+ 'One toolkit for authored content, markdown-driven UI, and documentation workflows'
229
+ const sectionText =
230
+ 'MD Plugins stays useful at different scales: a single Markdown-it enhancement, a Vite pipeline for docs-style content, or a complete Quasar docs site with shared conventions and examples.'
231
+
232
+ const heroPills = [
233
+ 'Markdown-it',
234
+ 'Vite',
235
+ 'Vue SFCs',
236
+ 'Q-Press',
237
+ 'Quasar App Extensions',
238
+ 'Docs Tooling',
239
+ ]
240
+
241
+ const familyHighlights = [
242
+ {
243
+ value: '13',
244
+ label: 'Markdown-it Plugins',
245
+ body: 'Authoring helpers for quotes, code, containers, imports, Mermaid, tables, shared helpers, and more.',
246
+ },
247
+ {
248
+ value: '2',
249
+ label: 'Vite Plugins',
250
+ body: 'Transform Markdown into Vue SFCs and import example source alongside live demos.',
251
+ },
252
+ {
253
+ value: '2',
254
+ label: 'Quasar App Extensions',
255
+ body: 'Add the Vite markdown flow to Quasar or scaffold a full documentation site with Q-Press.',
256
+ },
257
+ ]
258
+
259
+ const featureCards = [
260
+ {
261
+ icon: 'article',
262
+ title: 'Authoring Primitives',
263
+ body: 'Extend plain Markdown with targeted plugins instead of inventing one-off content rules for each project.',
264
+ },
265
+ {
266
+ icon: 'description',
267
+ title: 'Markdown to Vue',
268
+ body: 'Convert Markdown into Vue SFC content when authored pages need richer structure, components, and slots.',
269
+ },
270
+ {
271
+ icon: 'code',
272
+ title: 'Examples Workflow',
273
+ body: 'Keep live examples and readable source side by side without duplicating the same content by hand.',
274
+ },
275
+ {
276
+ icon: 'integration_instructions',
277
+ title: 'Vue and Quasar Fit',
278
+ body: 'Use the lower-level plugins in Vite apps or move into Quasar app extensions when the project needs more scaffolding.',
279
+ },
280
+ {
281
+ icon: 'web',
282
+ title: 'Q-Press Docs Sites',
283
+ body: 'Create documentation sites with shared navigation, landing pages, markdown utilities, and theming conventions.',
284
+ },
285
+ {
286
+ icon: 'architecture',
287
+ title: 'Layered Adoption',
288
+ body: 'Adopt one plugin or the whole stack, depending on whether the job is authoring content, building examples, or shipping docs.',
289
+ },
290
+ ]
135
291
 
136
292
  const mdPlugins = [
137
293
  {
138
294
  name: 'Blockquote Plugin',
139
- desc: 'Adds support for creating Markdown blockquotes.',
295
+ desc: 'Adds support for authored blockquote content and richer quote presentation in Markdown.',
140
296
  path: '/md-plugins/blockquote/overview',
141
297
  },
142
298
  {
143
299
  name: 'Codeblocks Plugin',
144
- desc: 'Adds support for creating Markdown code blocks.',
300
+ desc: 'Adds support for fenced code blocks and code-focused authoring flows.',
145
301
  path: '/md-plugins/codeblocks/overview',
146
302
  },
147
303
  {
148
- name: 'Container Plugin',
149
- desc: 'Adds support for creating Markdown containers.',
304
+ name: 'Containers Plugin',
305
+ desc: 'Create structured content containers for notes, warnings, tips, and custom callouts.',
150
306
  path: '/md-plugins/containers/overview',
151
307
  },
152
308
  {
153
309
  name: 'Frontmatter Plugin',
154
- desc: 'Adds support for getting frontmatter data into your Markdown.',
310
+ desc: 'Expose frontmatter data cleanly so Markdown pages can drive richer app and docs behavior.',
155
311
  path: '/md-plugins/frontmatter/overview',
156
312
  },
157
313
  {
158
314
  name: 'Headers Plugin',
159
- desc: "Adds support for creating ToC's inMarkdown.",
315
+ desc: 'Work with headings and table-of-contents style content more deliberately.',
160
316
  path: '/md-plugins/headers/overview',
161
317
  },
162
318
  {
163
319
  name: 'Image Plugin',
164
- desc: 'Adds support for creating Markdown images.',
320
+ desc: 'Improve Markdown image handling for documentation pages and content-heavy interfaces.',
165
321
  path: '/md-plugins/image/overview',
166
322
  },
167
323
  {
168
324
  name: 'Imports Plugin',
169
- desc: 'Adds support for creating custom imports for your Markdown.',
325
+ desc: 'Pull external authored content into Markdown-driven pages without manual duplication.',
170
326
  path: '/md-plugins/imports/overview',
171
327
  },
172
328
  {
173
- name: 'Inlinecode Plugin',
174
- desc: 'Adds support for creating Markdown inline code.',
329
+ name: 'Inline Code Plugin',
330
+ desc: 'Handle inline code formatting for technical writing and product guidance.',
175
331
  path: '/md-plugins/inline-code/overview',
176
332
  },
177
333
  {
178
334
  name: 'Link Plugin',
179
- desc: 'Adds support for creating Markdown links.',
335
+ desc: 'Create and manage Markdown links with a more deliberate content pipeline.',
180
336
  path: '/md-plugins/link/overview',
181
337
  },
338
+ {
339
+ name: 'Mermaid Plugin',
340
+ desc: 'Render diagrams directly from authored Markdown when documentation needs visual structure.',
341
+ path: '/md-plugins/mermaid/overview',
342
+ },
182
343
  {
183
344
  name: 'Table Plugin',
184
- desc: 'Adds support for creating Markdown tables.',
345
+ desc: 'Add support for Markdown tables in pages that need denser structured content.',
185
346
  path: '/md-plugins/table/overview',
186
347
  },
187
348
  {
188
349
  name: 'Title Plugin',
189
- desc: 'Adds support for creating Markdown titles.',
350
+ desc: 'Support Markdown title handling for cleaner content metadata and rendering.',
190
351
  path: '/md-plugins/title/overview',
191
352
  },
353
+ {
354
+ name: 'Shared Helpers',
355
+ desc: 'Common utilities that tie the Markdown plugin family together.',
356
+ path: '/md-plugins/shared/overview',
357
+ },
192
358
  ]
193
359
 
194
360
  const vitePlugins = [
195
361
  {
196
362
  name: 'Vite MD Plugin',
197
- desc: 'Adds support for creating Vue SFCs from Markdown files.',
363
+ desc: 'Turn Markdown files into Vue SFCs for authored pages that need components and richer layout control.',
198
364
  path: '/vite-plugins/vite-md-plugin/overview',
199
365
  },
200
366
  {
201
367
  name: 'Vite Examples Plugin',
202
- desc: 'Adds support for importing Vue files as raw source.',
368
+ desc: 'Import example source alongside live demos so docs can show both behavior and implementation.',
203
369
  path: '/vite-plugins/vite-examples-plugin/overview',
204
370
  },
205
371
  ]
@@ -207,168 +373,845 @@ const vitePlugins = [
207
373
  const appExtensions = [
208
374
  {
209
375
  name: 'viteMdPluginAppExt',
210
- desc: 'Adds support for creating Vue SFCs from Markdown files.',
376
+ desc: 'Bring the Vite Markdown workflow directly into Quasar CLI projects.',
211
377
  path: '/quasar-app-extensions/vite-md-plugin-app-ext/overview',
212
378
  },
213
379
  {
214
- name: 'Q-Press (app-ext)',
215
- desc: 'Create beautiful documentation sites with Q-Press.',
380
+ name: 'Q-Press',
381
+ desc: 'Create polished Quasar documentation sites with shared page structure, navigation, and tooling.',
216
382
  path: '/quasar-app-extensions/qpress/overview',
217
383
  },
218
384
  ]
219
385
 
220
- function navigate(path: string) {
221
- router.push(path)
222
- }
386
+ const pluginGroups = [
387
+ {
388
+ eyebrow: 'Markdown-it',
389
+ title: 'Authoring plugins for structure, content transforms, and richer Markdown',
390
+ body: 'Use targeted Markdown-it plugins when you need better authoring primitives without changing the entire publishing stack.',
391
+ items: mdPlugins,
392
+ },
393
+ {
394
+ eyebrow: 'Vite',
395
+ title: 'Build Markdown-driven Vue pages and example systems',
396
+ body: 'Move from authored text to app-ready content when pages need components, embedded demos, and raw source visibility.',
397
+ items: vitePlugins,
398
+ },
399
+ {
400
+ eyebrow: 'Quasar App Extensions',
401
+ title: 'Bring the stack into Quasar and scaffold documentation sites faster',
402
+ body: 'Use app extensions when the project needs tighter Quasar integration or a full docs-site workflow with Q-Press.',
403
+ items: appExtensions,
404
+ },
405
+ ]
406
+
407
+ const supportItems = [
408
+ {
409
+ title: 'Pick the Smallest Useful Layer',
410
+ body: 'Start with the introduction, then choose whether the job is a Markdown-it plugin, a Vite transform, or a full Q-Press site.',
411
+ },
412
+ {
413
+ title: 'Use Plugin Pages as Reference',
414
+ body: 'Each plugin section is the fastest way to understand what problem it solves and how deeply it affects the content pipeline.',
415
+ },
416
+ {
417
+ title: 'Issues and Discussions',
418
+ body: 'Questions, bugs, and feature ideas are easiest to track in the md-plugins repo and related GitHub discussions.',
419
+ },
420
+ ]
223
421
  </script>
224
422
 
225
423
  <style lang="scss" scoped>
226
424
  .landing-page {
227
- font-family: 'Arial', sans-serif;
228
- color: #333;
425
+ --landing-border: rgba(240, 248, 240, 0.14);
426
+ --landing-border-strong: rgba(240, 248, 240, 0.22);
427
+ --landing-surface: rgba(25, 41, 33, 0.76);
428
+ --landing-surface-strong: rgba(34, 55, 43, 0.88);
429
+ --landing-text-soft: rgba(240, 248, 240, 0.82);
430
+ --landing-shadow: 0 28px 60px rgba(13, 21, 17, 0.28);
431
+ padding: 28px clamp(16px, 2.4vw, 34px) 42px;
432
+ color: #203126;
229
433
  }
230
434
 
231
435
  .hero {
232
- background: linear-gradient(135deg, $brand-primary, $brand-secondary);
233
- color: white;
234
- text-align: center;
235
- padding: 50px 20px;
436
+ position: relative;
437
+ overflow: hidden;
438
+ margin-bottom: 32px;
439
+ padding: clamp(24px, 4vw, 44px);
440
+ border: 1px solid var(--landing-border);
441
+ border-radius: 34px;
442
+ background:
443
+ radial-gradient(circle at top left, rgba(168, 222, 141, 0.22), transparent 34%),
444
+ radial-gradient(circle at 82% 20%, rgba(252, 246, 227, 0.09), transparent 20%),
445
+ linear-gradient(145deg, rgba(31, 49, 38, 0.96), rgba(17, 27, 20, 0.96));
446
+ box-shadow: var(--landing-shadow);
447
+ }
448
+
449
+ .hero__mesh {
450
+ position: absolute;
451
+ width: 240px;
452
+ height: 240px;
453
+ border-radius: 999px;
454
+ background: radial-gradient(circle, rgba(252, 246, 227, 0.12), transparent 68%);
455
+ filter: blur(10px);
456
+ pointer-events: none;
457
+ }
458
+
459
+ .hero__mesh--left {
460
+ top: -90px;
461
+ left: -70px;
462
+ }
463
+
464
+ .hero__mesh--right {
465
+ right: -40px;
466
+ bottom: -90px;
467
+ }
468
+
469
+ .hero__grid {
470
+ position: relative;
471
+ z-index: 1;
472
+ display: grid;
473
+ gap: 24px;
474
+ align-items: center;
475
+ grid-template-columns: minmax(0, 1.04fr) minmax(320px, 0.96fr);
476
+ }
477
+
478
+ .hero__copy {
479
+ display: flex;
480
+ flex-direction: column;
481
+ align-items: flex-start;
482
+ gap: 14px;
483
+ }
484
+
485
+ .hero__eyebrow,
486
+ .section-heading__eyebrow,
487
+ .resource-card__eyebrow,
488
+ .preview-panel__kicker,
489
+ .plugin-group__eyebrow {
490
+ display: inline-flex;
491
+ align-items: center;
492
+ min-height: 32px;
493
+ padding: 0 14px;
494
+ border: 1px solid var(--landing-border-strong);
495
+ border-radius: 999px;
496
+ background: rgba(252, 246, 227, 0.08);
497
+ color: #ffe5a5;
498
+ font-family: 'Space Grotesk', 'Sora', 'Segoe UI', sans-serif;
499
+ font-size: 0.76rem;
500
+ font-weight: 700;
501
+ letter-spacing: 0.14em;
502
+ text-transform: uppercase;
503
+ }
504
+
505
+ .plugin-group__eyebrow,
506
+ .resource-card__eyebrow {
507
+ margin-bottom: 14px;
236
508
  }
237
509
 
238
510
  .hero-logo {
239
- max-width: 200px;
240
- margin-bottom: 20px;
241
- border-radius: 50%;
511
+ width: clamp(92px, 12vw, 132px);
512
+ border-radius: 30px;
513
+ box-shadow: 0 24px 48px rgba(10, 17, 12, 0.3);
242
514
  }
243
515
 
244
516
  .hero-title {
245
- font-size: 3.5em;
246
- line-height: 1.2em;
247
- font-weight: 700;
248
517
  margin: 0;
249
- padding: 0.2em 0;
250
- text-shadow: 4px 4px 8px rgba(0, 0, 0, 0.8);
518
+ font-family: 'Space Grotesk', 'Sora', 'Segoe UI', sans-serif;
519
+ font-size: clamp(3.1rem, 8vw, 5.8rem);
520
+ line-height: 0.95;
521
+ font-weight: 800;
522
+ letter-spacing: -0.05em;
523
+ color: #fcfbf3;
251
524
  }
252
525
 
253
526
  .hero-subtitle {
254
- font-size: 1.8em;
255
- line-height: 1.8em;
527
+ max-width: 640px;
256
528
  margin: 0;
529
+ font-family: 'Space Grotesk', 'Sora', 'Segoe UI', sans-serif;
530
+ font-size: clamp(1.12rem, 2vw, 1.42rem);
531
+ line-height: 1.45;
532
+ font-weight: 700;
533
+ color: #f4fce9;
257
534
  }
258
535
 
259
- .hero-subtitle2 {
260
- font-size: 1.2em;
261
- line-height: 1.2em;
536
+ .hero-lede {
537
+ max-width: 620px;
538
+ margin: 0;
539
+ font-size: 1rem;
540
+ line-height: 1.72;
541
+ color: var(--landing-text-soft);
262
542
  }
263
543
 
264
544
  .hero-buttons {
265
545
  display: flex;
266
- justify-content: center;
546
+ flex-wrap: wrap;
547
+ gap: 10px 12px;
548
+ padding-top: 6px;
549
+ margin-bottom: 6px;
550
+ }
551
+
552
+ .hero-pills {
553
+ display: flex;
554
+ flex-wrap: wrap;
267
555
  gap: 10px;
556
+ padding-top: 6px;
268
557
  }
269
558
 
270
559
  .hero-button {
271
- background: white;
272
- color: $brand-primary;
273
- padding: 10px 20px;
274
- border-radius: 5px;
560
+ min-height: 50px;
561
+ padding: 0 18px;
562
+ border: 1px solid transparent;
275
563
  text-decoration: none;
276
- font-weight: bold;
277
- transition: background 0.3s;
564
+ transition:
565
+ transform 0.22s ease,
566
+ background-color 0.22s ease,
567
+ border-color 0.22s ease,
568
+ color 0.22s ease,
569
+ box-shadow 0.22s ease;
570
+ }
571
+
572
+ .hero-button:hover,
573
+ .resource-link:hover,
574
+ .plugin-tile:hover {
575
+ transform: translateY(-1px);
576
+ }
577
+
578
+ .hero-button :deep(.q-btn__content) {
579
+ width: 100%;
580
+ min-width: 0;
581
+ }
582
+
583
+ .hero-button--solid {
584
+ background: #fff6dc;
585
+ color: #1f2f24;
586
+ box-shadow: 0 18px 30px rgba(10, 17, 12, 0.18);
587
+ }
588
+
589
+ .hero-button--ghost {
590
+ background: rgba(252, 246, 227, 0.08);
591
+ border-color: var(--landing-border-strong);
592
+ color: #fcfbf3;
593
+ }
594
+
595
+ .hero-button__content {
596
+ display: grid;
597
+ grid-template-columns: 1.5rem minmax(0, 1fr) 1.5rem;
598
+ align-items: center;
599
+ column-gap: 12px;
600
+ min-width: 0;
601
+ width: 100%;
602
+ font-family: 'Space Grotesk', 'Sora', 'Segoe UI', sans-serif;
603
+ font-size: 0.95rem;
604
+ font-weight: 700;
605
+ }
606
+
607
+ .hero-button__slot {
608
+ display: inline-flex;
609
+ align-items: center;
610
+ justify-content: center;
611
+ width: 1.5rem;
612
+ height: 1.5rem;
613
+ }
614
+
615
+ .hero-button__slot--empty {
616
+ visibility: hidden;
278
617
  }
279
618
 
280
- .hero-button:hover {
281
- background: #f0f0f0;
619
+ .hero-button__slot :deep(.q-icon) {
620
+ font-size: 1.3rem;
282
621
  }
283
622
 
284
- .byline {
623
+ .hero-button__label {
624
+ white-space: nowrap;
285
625
  text-align: center;
286
- font-size: 1.2em;
287
- margin: 20px 0;
288
- color: #35495e;
289
626
  }
290
627
 
291
- body.body--dark .byline {
292
- color: #f0f0f0;
628
+ .hero-pill {
629
+ padding: 8px 12px;
630
+ border: 1px solid rgba(252, 246, 227, 0.12);
631
+ border-radius: 999px;
632
+ background: rgba(252, 246, 227, 0.05);
633
+ color: #f2e3b6;
634
+ font-size: 0.84rem;
635
+ font-weight: 600;
293
636
  }
294
637
 
295
- .content {
638
+ .preview-panel,
639
+ .feature-card,
640
+ .resource-card,
641
+ .plugin-group {
642
+ overflow: hidden;
643
+ border: 1px solid var(--landing-border);
644
+ border-radius: 24px;
645
+ background: var(--landing-surface);
646
+ box-shadow: var(--landing-card-shadow);
647
+ }
648
+
649
+ .preview-panel {
650
+ width: 100%;
651
+ padding: 20px;
652
+ background:
653
+ linear-gradient(180deg, rgba(252, 246, 227, 0.08), rgba(252, 246, 227, 0.02)),
654
+ rgba(18, 29, 22, 0.54);
655
+ backdrop-filter: blur(8px);
656
+ }
657
+
658
+ .preview-panel__header {
296
659
  display: flex;
297
660
  flex-wrap: wrap;
298
- justify-content: center;
299
- padding: 20px;
661
+ align-items: center;
662
+ justify-content: space-between;
663
+ gap: 12px;
664
+ margin-bottom: 18px;
300
665
  }
301
666
 
302
- .grid-container {
667
+ .preview-panel__note,
668
+ .section-heading__text,
669
+ .feature-card__body,
670
+ .plugin-group__body,
671
+ .resource-card__body,
672
+ .resource-list__body,
673
+ .highlight-card__body,
674
+ .plugin-tile__body {
675
+ color: var(--landing-text-soft);
676
+ }
677
+
678
+ .preview-panel__note {
679
+ color: var(--landing-note-text);
680
+ font-size: 0.84rem;
681
+ font-weight: 600;
682
+ }
683
+
684
+ .preview-panel__body {
303
685
  display: grid;
304
- grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
305
- gap: 10px;
686
+ gap: 20px;
687
+ }
688
+
689
+ .preview-panel__copy h2,
690
+ .section-heading__title,
691
+ .feature-card__title,
692
+ .plugin-group__title,
693
+ .resource-card__title,
694
+ .plugin-tile__name {
695
+ font-family: 'Space Grotesk', 'Sora', 'Segoe UI', sans-serif;
696
+ color: #fcfbf3;
697
+ }
698
+
699
+ .preview-panel__copy h2 {
700
+ margin: 0 0 10px;
701
+ font-size: clamp(1.35rem, 2vw, 1.7rem);
702
+ line-height: 1.2;
703
+ }
704
+
705
+ .preview-panel__copy p,
706
+ .section-heading__text,
707
+ .feature-card__body,
708
+ .plugin-group__body,
709
+ .resource-card__body,
710
+ .resource-list__body,
711
+ .highlight-card__body,
712
+ .plugin-tile__body {
713
+ margin: 0;
714
+ line-height: 1.68;
715
+ }
716
+
717
+ .preview-highlights {
718
+ display: grid;
719
+ grid-template-columns: repeat(3, minmax(0, 1fr));
720
+ gap: 14px;
721
+ }
722
+
723
+ .highlight-card {
724
+ padding: 18px;
725
+ border: 1px solid rgba(252, 246, 227, 0.1);
726
+ border-radius: 20px;
727
+ background:
728
+ linear-gradient(180deg, rgba(252, 246, 227, 0.08), rgba(252, 246, 227, 0.03)),
729
+ rgba(252, 246, 227, 0.03);
730
+ }
731
+
732
+ .highlight-card__value {
733
+ margin-bottom: 8px;
734
+ font-family: 'Space Grotesk', 'Sora', 'Segoe UI', sans-serif;
735
+ font-size: 2rem;
736
+ font-weight: 800;
737
+ color: #ffe5a5;
738
+ }
739
+
740
+ .highlight-card__label {
741
+ margin-bottom: 8px;
742
+ font-family: 'Space Grotesk', 'Sora', 'Segoe UI', sans-serif;
743
+ font-size: 1rem;
744
+ font-weight: 700;
745
+ color: #fcfbf3;
746
+ }
747
+
748
+ .feature-section,
749
+ .plugin-sections,
750
+ .resource-section {
751
+ margin-top: 28px;
752
+ }
753
+
754
+ .section-heading,
755
+ .plugin-group__header {
756
+ max-width: 860px;
757
+ }
758
+
759
+ .section-heading {
760
+ margin: 0 auto 20px;
761
+ text-align: center;
762
+ }
763
+
764
+ .section-heading__title {
765
+ margin: 14px 0 10px;
766
+ font-size: clamp(2rem, 4vw, 2.8rem);
767
+ line-height: 1.12;
768
+ text-wrap: balance;
769
+ }
770
+
771
+ .feature-grid,
772
+ .resource-section,
773
+ .plugin-sections,
774
+ .plugin-grid {
775
+ display: grid;
776
+ gap: 18px;
777
+ }
778
+
779
+ .feature-grid {
780
+ grid-template-columns: repeat(3, minmax(0, 1fr));
781
+ }
782
+
783
+ .plugin-sections {
784
+ grid-template-columns: 1fr;
785
+ }
786
+
787
+ .plugin-grid {
788
+ grid-template-columns: repeat(3, minmax(0, 1fr));
789
+ margin-top: 18px;
790
+ }
791
+
792
+ .resource-section {
793
+ display: grid;
794
+ gap: 16px;
795
+ align-items: start;
796
+ grid-template-columns: minmax(0, 1.08fr) minmax(0, 0.92fr);
797
+ }
798
+
799
+ .feature-card,
800
+ .resource-card,
801
+ .plugin-group {
802
+ position: relative;
803
+ padding: 20px;
804
+ }
805
+
806
+ .feature-card::before,
807
+ .plugin-group::before {
808
+ content: '';
809
+ position: absolute;
810
+ inset: 0 auto auto 0;
306
811
  width: 100%;
307
- max-width: 100%;
812
+ height: 1px;
813
+ background: linear-gradient(90deg, rgba(168, 222, 141, 0.55), transparent 65%);
814
+ }
815
+
816
+ .feature-card__icon {
817
+ display: inline-flex;
818
+ align-items: center;
308
819
  justify-content: center;
309
- align-content: center;
820
+ width: 46px;
821
+ height: 46px;
822
+ margin-bottom: 14px;
823
+ border-radius: 14px;
824
+ background: rgba(168, 222, 141, 0.14);
825
+ color: #f8e4a3;
826
+ font-size: 1.35rem;
310
827
  }
311
828
 
312
- .grid-item {
313
- // aspect-ratio: 1 / 1;
314
- cursor: pointer;
829
+ .feature-card__title,
830
+ .plugin-group__title,
831
+ .resource-card__title {
832
+ margin: 0 0 10px;
833
+ font-size: 1.16rem;
834
+ line-height: 1.3;
315
835
  }
316
836
 
317
- .section {
318
- flex: 1 1 300px;
319
- margin: 20px;
320
- padding: 20px;
321
- color: white;
837
+ .plugin-tile {
838
+ display: flex;
839
+ flex-direction: column;
840
+ gap: 12px;
841
+ min-height: 100%;
842
+ padding: 18px;
843
+ border: 1px solid rgba(252, 246, 227, 0.1);
844
+ border-radius: 18px;
845
+ background: rgba(252, 246, 227, 0.04);
846
+ color: inherit;
322
847
  text-decoration: none;
323
- background: linear-gradient(135deg, $brand-primary, $brand-secondary);
324
- border-radius: 10px;
325
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
326
848
  transition:
327
- transform 0.3s,
328
- box-shadow 0.3s;
849
+ transform 0.22s ease,
850
+ border-color 0.22s ease,
851
+ background-color 0.22s ease,
852
+ box-shadow 0.22s ease;
329
853
  }
330
854
 
331
- .section:hover {
332
- transform: translateY(-5px);
333
- box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
334
- // change mouseover effects
335
- cursor: pointer;
855
+ .plugin-tile:hover {
856
+ border-color: rgba(255, 229, 165, 0.38);
857
+ background: rgba(252, 246, 227, 0.07);
858
+ box-shadow: 0 14px 28px rgba(13, 21, 17, 0.18);
336
859
  }
337
860
 
338
- .section h2 {
339
- margin-top: 0;
340
- color: white;
341
- font-size: 2.125rem;
342
- font-weight: 400;
343
- line-height: 2.5rem;
344
- letter-spacing: 0.00735em;
861
+ .plugin-tile__name {
862
+ font-size: 1rem;
345
863
  font-weight: 700;
346
- text-shadow: 4px 4px 8px rgba(0, 0, 0, 0.8);
864
+ line-height: 1.32;
347
865
  }
348
866
 
349
- .section ul {
350
- list-style: none;
351
- padding: 0;
867
+ .plugin-tile__meta {
868
+ display: inline-flex;
869
+ align-items: center;
870
+ gap: 8px;
871
+ margin-top: auto;
872
+ color: #ffe5a5;
873
+ font-size: 0.88rem;
874
+ font-weight: 700;
875
+ }
876
+
877
+ .resource-card--primary {
878
+ background:
879
+ radial-gradient(circle at top right, rgba(255, 229, 165, 0.18), transparent 30%),
880
+ var(--landing-surface-strong);
352
881
  }
353
882
 
354
- .section ul li {
355
- margin: 10px 0;
883
+ .resource-card__actions {
884
+ display: flex;
885
+ flex-wrap: wrap;
886
+ gap: 10px;
887
+ margin-top: 16px;
356
888
  }
357
889
 
358
- .section ul li a {
359
- color: #35495e;
890
+ .resource-link {
891
+ display: inline-flex;
892
+ align-items: center;
893
+ gap: 10px;
894
+ min-height: 44px;
895
+ padding: 0 16px;
896
+ border: 1px solid var(--landing-border-strong);
897
+ border-radius: 999px;
898
+ background: rgba(252, 246, 227, 0.05);
899
+ color: #f4fce9;
360
900
  text-decoration: none;
361
- transition: color 0.3s;
901
+ transition:
902
+ transform 0.22s ease,
903
+ border-color 0.22s ease,
904
+ background-color 0.22s ease;
362
905
  }
363
906
 
364
- .section ul li a:hover {
365
- color: $brand-primary;
907
+ .resource-list {
908
+ display: grid;
909
+ gap: 0;
910
+ margin-top: 16px;
366
911
  }
367
912
 
368
- .footer {
369
- text-align: center;
370
- padding: 20px;
371
- background: #35495e;
372
- color: white;
913
+ .resource-list__item {
914
+ padding: 12px 0;
915
+ border-top: 1px solid var(--landing-resource-item-border);
916
+ }
917
+
918
+ .resource-list__item:first-child {
919
+ padding-top: 0;
920
+ border-top: 0;
921
+ }
922
+
923
+ .resource-list__title {
924
+ margin-bottom: 6px;
925
+ font-family: 'Space Grotesk', 'Sora', 'Segoe UI', sans-serif;
926
+ font-size: 0.96rem;
927
+ font-weight: 700;
928
+ color: #f8e4a3;
929
+ }
930
+
931
+ .feature-card__body,
932
+ .plugin-group__body,
933
+ .resource-card__body,
934
+ .highlight-card__body,
935
+ .plugin-tile__body {
936
+ color: var(--landing-body-text);
937
+ font-size: 0.97rem;
938
+ }
939
+
940
+ .resource-list__body {
941
+ color: var(--landing-body-text);
942
+ font-size: 0.93rem;
943
+ line-height: 1.55;
944
+ }
945
+
946
+ @media (max-width: 1180px) {
947
+ .hero__grid,
948
+ .resource-section,
949
+ .feature-grid,
950
+ .plugin-grid,
951
+ .preview-highlights {
952
+ grid-template-columns: 1fr;
953
+ }
954
+ }
955
+
956
+ @media (max-width: 760px) {
957
+ .landing-page {
958
+ padding: 18px 12px 30px;
959
+ }
960
+
961
+ .hero {
962
+ padding: 24px 18px;
963
+ border-radius: 24px;
964
+ }
965
+
966
+ .hero__copy {
967
+ align-items: stretch;
968
+ }
969
+
970
+ .hero-buttons,
971
+ .resource-card__actions {
972
+ flex-direction: column;
973
+ }
974
+
975
+ .hero-button,
976
+ .resource-link {
977
+ justify-content: center;
978
+ }
979
+
980
+ .feature-card,
981
+ .resource-card,
982
+ .plugin-group {
983
+ padding: 18px;
984
+ border-radius: 20px;
985
+ }
986
+ }
987
+
988
+ /* codex-theme-override:start */
989
+ .landing-page {
990
+ --landing-page-text: #{$brand-light-text};
991
+ --landing-heading: #{$brand-light-text};
992
+ --landing-body-text: #{rgba($brand-light-text, 0.84)};
993
+ --landing-note-text: #{rgba($brand-light-text, 0.66)};
994
+ --landing-border: #{rgba($brand-secondary, 0.16)};
995
+ --landing-border-strong: #{rgba($brand-secondary, 0.24)};
996
+ --landing-surface: #{rgba($brand-light, 0.78)};
997
+ --landing-surface-strong: #{rgba($brand-light, 0.92)};
998
+ --landing-text-soft: #{rgba($brand-light-text, 0.78)};
999
+ --landing-shadow: 0 28px 60px #{rgba($brand-primary, 0.14)};
1000
+ --landing-card-shadow: 0 16px 34px #{rgba($brand-secondary, 0.12)};
1001
+ --landing-chip-bg: #{rgba($brand-light, 0.52)};
1002
+ --landing-chip-text: #{$brand-primary};
1003
+ --landing-solid-bg: #{$brand-primary};
1004
+ --landing-solid-text: #{$brand-light};
1005
+ --landing-solid-shadow: 0 18px 30px #{rgba($brand-primary, 0.24)};
1006
+ --landing-ghost-bg: #{rgba($brand-light, 0.46)};
1007
+ --landing-ghost-text: #{$brand-light-text};
1008
+ --landing-pill-border: #{rgba($brand-secondary, 0.14)};
1009
+ --landing-pill-bg: #{rgba($brand-light, 0.44)};
1010
+ --landing-pill-text: #{$brand-primary};
1011
+ --landing-panel-gradient-top: #{rgba($brand-light, 0.7)};
1012
+ --landing-panel-gradient-bottom: #{rgba($brand-light, 0.22)};
1013
+ --landing-panel-bg: #{rgba($brand-light-bg, 0.88)};
1014
+ --landing-highlight-border: #{rgba($brand-secondary, 0.16)};
1015
+ --landing-highlight-bg: #{rgba($brand-light, 0.52)};
1016
+ --landing-highlight-value: #{$brand-primary};
1017
+ --landing-highlight-label: #{$brand-light-text};
1018
+ --landing-accent-line: #{rgba($brand-primary, 0.4)};
1019
+ --landing-icon-bg: #{rgba($brand-primary, 0.1)};
1020
+ --landing-icon-color: #{$brand-primary};
1021
+ --landing-tile-border: #{rgba($brand-secondary, 0.12)};
1022
+ --landing-tile-bg: #{rgba($brand-light, 0.42)};
1023
+ --landing-tile-hover-border: #{rgba($brand-primary, 0.28)};
1024
+ --landing-tile-hover-bg: #{rgba($brand-light, 0.56)};
1025
+ --landing-tile-hover-shadow: 0 14px 28px #{rgba($brand-secondary, 0.12)};
1026
+ --landing-meta-text: #{$brand-primary};
1027
+ --landing-spot-accent: #{rgba($brand-primary, 0.14)};
1028
+ --landing-resource-link-bg: #{rgba($brand-light, 0.48)};
1029
+ --landing-resource-link-text: #{$brand-light-text};
1030
+ --landing-resource-item-border: #{rgba($brand-secondary, 0.1)};
1031
+ --landing-resource-item-bg: #{rgba($brand-light, 0.42)};
1032
+ --landing-accent-text: #{$brand-primary};
1033
+ --landing-mesh-color: #{rgba($brand-primary, 0.16)};
1034
+ --landing-hero-glow-1: #{rgba($brand-primary, 0.18)};
1035
+ --landing-hero-glow-2: #{rgba($brand-secondary, 0.12)};
1036
+ --landing-hero-start: #{rgba($brand-light, 0.96)};
1037
+ --landing-hero-end: #{rgba($brand-light-bg, 0.96)};
1038
+ color: var(--landing-page-text);
1039
+ }
1040
+
1041
+ body.body--dark .landing-page {
1042
+ --landing-page-text: #{$brand-dark-text};
1043
+ --landing-heading: #{$brand-dark-text};
1044
+ --landing-body-text: #{rgba($brand-dark-text, 0.8)};
1045
+ --landing-note-text: #{rgba($brand-dark-text, 0.64)};
1046
+ --landing-border: #{rgba($brand-light, 0.12)};
1047
+ --landing-border-strong: #{rgba($brand-light, 0.2)};
1048
+ --landing-surface: #{rgba($dark-pill, 0.74)};
1049
+ --landing-surface-strong: #{rgba($dark-pill, 0.88)};
1050
+ --landing-text-soft: #{rgba($brand-dark-text, 0.82)};
1051
+ --landing-shadow: 0 28px 60px #{rgba($brand-dark-bg, 0.28)};
1052
+ --landing-card-shadow: 0 16px 34px #{rgba($brand-dark-bg, 0.24)};
1053
+ --landing-chip-bg: #{rgba($brand-light, 0.08)};
1054
+ --landing-chip-text: #{$brand-primary};
1055
+ --landing-solid-bg: #{$brand-light};
1056
+ --landing-solid-text: #{$brand-dark-bg};
1057
+ --landing-solid-shadow: 0 18px 30px #{rgba($brand-dark-bg, 0.28)};
1058
+ --landing-ghost-bg: #{rgba($brand-light, 0.08)};
1059
+ --landing-ghost-text: #{$brand-dark-text};
1060
+ --landing-pill-border: #{rgba($brand-light, 0.12)};
1061
+ --landing-pill-bg: #{rgba($brand-light, 0.05)};
1062
+ --landing-pill-text: #{$brand-primary};
1063
+ --landing-panel-gradient-top: #{rgba($brand-light, 0.08)};
1064
+ --landing-panel-gradient-bottom: #{rgba($brand-light, 0.02)};
1065
+ --landing-panel-bg: #{rgba($brand-dark-bg, 0.56)};
1066
+ --landing-highlight-border: #{rgba($brand-light, 0.08)};
1067
+ --landing-highlight-bg: #{rgba($brand-light, 0.05)};
1068
+ --landing-highlight-value: #{$brand-primary};
1069
+ --landing-highlight-label: #{$brand-dark-text};
1070
+ --landing-accent-line: #{rgba($brand-primary, 0.55)};
1071
+ --landing-icon-bg: #{rgba($brand-primary, 0.16)};
1072
+ --landing-icon-color: #{$brand-primary};
1073
+ --landing-tile-border: #{rgba($brand-light, 0.08)};
1074
+ --landing-tile-bg: #{rgba($brand-light, 0.04)};
1075
+ --landing-tile-hover-border: #{rgba($brand-primary, 0.34)};
1076
+ --landing-tile-hover-bg: #{rgba($brand-light, 0.08)};
1077
+ --landing-tile-hover-shadow: 0 14px 28px #{rgba($brand-dark-bg, 0.2)};
1078
+ --landing-meta-text: #{$brand-primary};
1079
+ --landing-spot-accent: #{rgba($brand-primary, 0.18)};
1080
+ --landing-resource-link-bg: #{rgba($brand-light, 0.06)};
1081
+ --landing-resource-link-text: #{$brand-dark-text};
1082
+ --landing-resource-item-border: #{rgba($brand-light, 0.08)};
1083
+ --landing-resource-item-bg: #{rgba($brand-light, 0.04)};
1084
+ --landing-accent-text: #{$brand-primary};
1085
+ --landing-mesh-color: #{rgba($brand-light, 0.12)};
1086
+ --landing-hero-glow-1: #{rgba($brand-primary, 0.22)};
1087
+ --landing-hero-glow-2: #{rgba($brand-light, 0.08)};
1088
+ --landing-hero-start: #{rgba($brand-dark-bg, 0.96)};
1089
+ --landing-hero-end: #{rgba($dark-pill, 0.96)};
1090
+ }
1091
+
1092
+ .hero {
1093
+ background:
1094
+ radial-gradient(circle at top left, var(--landing-hero-glow-1), transparent 34%),
1095
+ radial-gradient(circle at 82% 20%, var(--landing-hero-glow-2), transparent 20%),
1096
+ linear-gradient(145deg, var(--landing-hero-start), var(--landing-hero-end));
1097
+ box-shadow: var(--landing-shadow);
1098
+ }
1099
+
1100
+ .hero__mesh {
1101
+ background: radial-gradient(circle, var(--landing-mesh-color), transparent 68%);
1102
+ }
1103
+
1104
+ .hero__eyebrow,
1105
+ .section-heading__eyebrow,
1106
+ .resource-card__eyebrow,
1107
+ .preview-panel__kicker,
1108
+ .plugin-group__eyebrow {
1109
+ border-color: var(--landing-border-strong);
1110
+ background: var(--landing-chip-bg);
1111
+ color: var(--landing-chip-text);
1112
+ }
1113
+
1114
+ .hero-title,
1115
+ .hero-subtitle,
1116
+ .preview-panel__copy h2,
1117
+ .section-heading__title,
1118
+ .feature-card__title,
1119
+ .plugin-group__title,
1120
+ .resource-card__title,
1121
+ .plugin-tile__name,
1122
+ .highlight-card__label {
1123
+ color: var(--landing-heading);
1124
+ }
1125
+
1126
+ .hero-button--solid {
1127
+ background: var(--landing-solid-bg);
1128
+ color: var(--landing-solid-text);
1129
+ box-shadow: var(--landing-solid-shadow);
1130
+ }
1131
+
1132
+ .hero-button--ghost {
1133
+ background: var(--landing-ghost-bg);
1134
+ border-color: var(--landing-border-strong);
1135
+ color: var(--landing-ghost-text);
1136
+ }
1137
+
1138
+ .hero-pill {
1139
+ border-color: var(--landing-pill-border);
1140
+ background: var(--landing-pill-bg);
1141
+ color: var(--landing-pill-text);
1142
+ }
1143
+
1144
+ .preview-panel,
1145
+ .feature-card,
1146
+ .resource-card,
1147
+ .plugin-group {
1148
+ background: var(--landing-surface);
1149
+ box-shadow: var(--landing-card-shadow);
1150
+ }
1151
+
1152
+ .preview-panel {
1153
+ background:
1154
+ linear-gradient(
1155
+ 180deg,
1156
+ var(--landing-panel-gradient-top),
1157
+ var(--landing-panel-gradient-bottom)
1158
+ ),
1159
+ var(--landing-panel-bg);
1160
+ }
1161
+
1162
+ .highlight-card {
1163
+ border-color: var(--landing-highlight-border);
1164
+ background: var(--landing-highlight-bg);
1165
+ }
1166
+
1167
+ .highlight-card__value {
1168
+ color: var(--landing-highlight-value);
1169
+ }
1170
+
1171
+ .feature-card::before,
1172
+ .plugin-group::before {
1173
+ background: linear-gradient(90deg, var(--landing-accent-line), transparent 65%);
1174
+ }
1175
+
1176
+ .feature-card__icon {
1177
+ background: var(--landing-icon-bg);
1178
+ color: var(--landing-icon-color);
1179
+ }
1180
+
1181
+ .plugin-tile {
1182
+ border-color: var(--landing-tile-border);
1183
+ background: var(--landing-tile-bg);
1184
+ }
1185
+
1186
+ .plugin-tile:hover {
1187
+ border-color: var(--landing-tile-hover-border);
1188
+ background: var(--landing-tile-hover-bg);
1189
+ box-shadow: var(--landing-tile-hover-shadow);
1190
+ }
1191
+
1192
+ .plugin-tile__meta {
1193
+ color: var(--landing-meta-text);
1194
+ }
1195
+
1196
+ .resource-card--primary {
1197
+ background:
1198
+ radial-gradient(circle at top right, var(--landing-spot-accent), transparent 30%),
1199
+ var(--landing-surface-strong);
1200
+ }
1201
+
1202
+ .resource-link {
1203
+ border-color: var(--landing-border-strong);
1204
+ background: var(--landing-resource-link-bg);
1205
+ color: var(--landing-resource-link-text);
1206
+ }
1207
+
1208
+ .resource-list__item {
1209
+ border-color: var(--landing-resource-item-border);
1210
+ background: var(--landing-resource-item-bg);
1211
+ }
1212
+
1213
+ .resource-list__title {
1214
+ color: var(--landing-accent-text);
373
1215
  }
1216
+ /* codex-theme-override:end */
374
1217
  </style>