domma-cms 1.8.43 → 1.8.45

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 (56) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/admin/js/templates/docs/usage-blocks.html +29 -0
  3. package/docs/starter-blocks.md +203 -0
  4. package/package.json +1 -1
  5. package/server/blocks/catalog.json +98 -0
  6. package/server/blocks/domma-block-banner.css +65 -0
  7. package/server/blocks/domma-block-banner.html +22 -0
  8. package/server/blocks/domma-block-banner.meta.json +7 -0
  9. package/server/blocks/domma-block-contact.css +18 -0
  10. package/server/blocks/domma-block-contact.html +15 -0
  11. package/server/blocks/domma-block-contact.meta.json +7 -0
  12. package/server/blocks/domma-block-cta.css +8 -0
  13. package/server/blocks/domma-block-cta.html +17 -0
  14. package/server/blocks/domma-block-cta.meta.json +7 -0
  15. package/server/blocks/domma-block-faq.css +13 -0
  16. package/server/blocks/domma-block-faq.html +17 -0
  17. package/server/blocks/domma-block-faq.meta.json +7 -0
  18. package/server/blocks/domma-block-features.css +18 -0
  19. package/server/blocks/domma-block-features.html +19 -0
  20. package/server/blocks/domma-block-features.meta.json +7 -0
  21. package/server/blocks/domma-block-hero.css +15 -0
  22. package/server/blocks/domma-block-hero.html +13 -0
  23. package/server/blocks/domma-block-hero.meta.json +7 -0
  24. package/server/blocks/domma-block-image.css +8 -0
  25. package/server/blocks/domma-block-image.html +12 -0
  26. package/server/blocks/domma-block-image.meta.json +7 -0
  27. package/server/blocks/domma-block-logos.css +13 -0
  28. package/server/blocks/domma-block-logos.html +18 -0
  29. package/server/blocks/domma-block-logos.meta.json +7 -0
  30. package/server/blocks/domma-block-pricing-card.css +20 -0
  31. package/server/blocks/domma-block-pricing-card.html +15 -0
  32. package/server/blocks/domma-block-pricing-card.meta.json +7 -0
  33. package/server/blocks/domma-block-service-card.css +17 -0
  34. package/server/blocks/domma-block-service-card.html +15 -0
  35. package/server/blocks/domma-block-service-card.meta.json +7 -0
  36. package/server/blocks/domma-block-split.css +26 -0
  37. package/server/blocks/domma-block-split.html +22 -0
  38. package/server/blocks/domma-block-split.meta.json +7 -0
  39. package/server/blocks/domma-block-stats.css +20 -0
  40. package/server/blocks/domma-block-stats.html +16 -0
  41. package/server/blocks/domma-block-stats.meta.json +7 -0
  42. package/server/blocks/domma-block-steps.css +19 -0
  43. package/server/blocks/domma-block-steps.html +17 -0
  44. package/server/blocks/domma-block-steps.meta.json +7 -0
  45. package/server/blocks/domma-block-team-card.css +13 -0
  46. package/server/blocks/domma-block-team-card.html +14 -0
  47. package/server/blocks/domma-block-team-card.meta.json +7 -0
  48. package/server/blocks/domma-block-testimonial.css +13 -0
  49. package/server/blocks/domma-block-testimonial.html +12 -0
  50. package/server/blocks/domma-block-testimonial.meta.json +7 -0
  51. package/server/blocks/domma-block-text.css +9 -0
  52. package/server/blocks/domma-block-text.html +11 -0
  53. package/server/blocks/domma-block-text.meta.json +7 -0
  54. package/server/services/blocks.js +2 -0
  55. package/server/services/markdown.js +25 -3
  56. package/server/services/starter-blocks.js +18 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.8.45] - 2026-10-23
4
+
5
+ - Include a free library of 16 editable `domma-block-*` Custom Blocks with every site: introductions, image/text sections, features, services, testimonials, figures, steps, FAQs, contact details, pricing, team profiles, images, logos and calls to action. Each includes scoped responsive styling and examples. Startup adds missing blocks while preserving site customisations.
6
+
7
+ ## [1.8.44] - 2026-10-23
8
+
9
+ - **Blocks with empty fields no longer show raw HTML.** A block placeholder on its own line with nothing to fill it (`{{bio}}` when there is no bio) left a blank line, which ended the block's HTML in the Markdown, and what followed showed on the page as code - the About page's team card printed its contact links as raw tags. Such a line is now dropped when it fills empty (`fillTemplateLines()` in `markdown.js`), for collection displays and block short tags alike; a template's own blank lines stay, since they are how it hands a Markdown value to marked.
10
+ - **Inline code on an indented HTML line shows again.** `<code>` inside an HTML line indented four or more spaces came out as `SC1:0` - the code-region scrub stored the line holding the code's placeholder and restored it only once. Restore now restores what it brings back too.
11
+
3
12
  ## [1.8.43] - 2026-10-23
4
13
 
5
14
  - **What is inside a short tag is indented too.** Shift+Alt+F now indents the content of `[grid]`, `[col]`, `[card]`, `[tabs]` and the other container short tags by how deeply it nests, not only the tag lines, and Enter after an opening tag goes one deeper. A nested list or fenced code keeps its shape inside. The renderer takes the nesting indent off before anything else (a container's content loses the indent its lines share), so four spaces inside a card is no longer a code block - and a page written flat reads exactly as before (checked across the fleet's 1,700 pages).
@@ -16,6 +16,35 @@
16
16
  <code>&lt;name&gt;.html</code> holds the template, <code>&lt;name&gt;.css</code> its styles (optional) and
17
17
  <code>&lt;name&gt;.meta.json</code> its project and bundled flag (optional).</p>
18
18
 
19
+ <h3>A free library to start your site</h3>
20
+ <p>Every site includes 16 editable <code>domma-block-*</code> blocks. Search for
21
+ <code>domma-block-</code> in Blocks or use <strong>Add block</strong> in the editor.
22
+ Each includes its own styling, documented parameters and an example to copy.</p>
23
+ <table class="table table-sm"><thead><tr><th>Block</th><th>Use it for</th></tr></thead><tbody>
24
+ <tr><td><code>domma-block-banner</code></td><td>A photo banner with a readable overlay across its left half.</td></tr>
25
+ <tr><td><code>domma-block-split</code></td><td>An image beside a section heading and introduction.</td></tr>
26
+ <tr><td><code>domma-block-cta</code></td><td>A welcoming call to action using your site theme.</td></tr>
27
+ <tr><td><code>domma-block-hero</code></td><td>A centred page introduction with an optional button.</td></tr>
28
+ <tr><td><code>domma-block-text</code></td><td>A readable text section for your story or an introduction.</td></tr>
29
+ <tr><td><code>domma-block-features</code></td><td>An introduction and up to three feature cards.</td></tr>
30
+ <tr><td><code>domma-block-service-card</code></td><td>A reusable service card with an optional photo and button.</td></tr>
31
+ <tr><td><code>domma-block-testimonial</code></td><td>A customer quotation with an optional attribution.</td></tr>
32
+ <tr><td><code>domma-block-stats</code></td><td>Up to three useful figures with clear labels.</td></tr>
33
+ <tr><td><code>domma-block-steps</code></td><td>A clear, numbered process with up to three steps.</td></tr>
34
+ <tr><td><code>domma-block-faq</code></td><td>Up to three questions and answers, readable without JavaScript.</td></tr>
35
+ <tr><td><code>domma-block-contact</code></td><td>Contact details, an address and opening hours.</td></tr>
36
+ <tr><td><code>domma-block-pricing-card</code></td><td>A clear price or package card with an optional enquiry button.</td></tr>
37
+ <tr><td><code>domma-block-team-card</code></td><td>A team member photo, role and short introduction.</td></tr>
38
+ <tr><td><code>domma-block-image</code></td><td>An uncropped image with an optional caption.</td></tr>
39
+ <tr><td><code>domma-block-logos</code></td><td>A responsive row of up to four organisation logos.</td></tr>
40
+ </tbody></table>
41
+ <p>Start with a banner or hero, add sections and cards, then finish with a call to action.
42
+ Change the text and choose your own pictures from Media. Use one main heading per page.
43
+ Leave optional buttons and unused feature, FAQ, step, figure or logo slots empty to hide them.</p>
44
+ <pre><code>[domma-block-hero header="Welcome to our business" blurb="A short introduction to what we do." link="/contact" label="Get in touch" /]</code></pre>
45
+ <p>Blocks follow your theme and adapt to smaller screens. You can edit or duplicate them;
46
+ updates add missing library files without replacing your existing customisations.</p>
47
+
19
48
  <h3>Three ways to place a block</h3>
20
49
  <table class="table table-sm">
21
50
  <thead>
@@ -0,0 +1,203 @@
1
+ # Domma block library
2
+
3
+ Sixteen free, editable Custom Blocks come with every Domma CMS site. There is
4
+ no extra licence or plugin to install. Search for `domma-block-` in **Blocks**
5
+ or in the editor's **Add block** menu. Each block includes its own scoped CSS,
6
+ a copyable example and documented parameters.
7
+
8
+ ## Choose a block
9
+
10
+ | Block | Use it for |
11
+ | --- | --- |
12
+ | `domma-block-banner` | A photo banner with a readable overlay across its left half. |
13
+ | `domma-block-split` | An image beside a section heading and introduction. |
14
+ | `domma-block-cta` | A welcoming call to action using your site theme. |
15
+ | `domma-block-hero` | A centred page introduction with an optional button. |
16
+ | `domma-block-text` | A readable text section for your story or an introduction. |
17
+ | `domma-block-features` | An introduction and up to three feature cards. |
18
+ | `domma-block-service-card` | A reusable service card with an optional photo and button. |
19
+ | `domma-block-testimonial` | A customer quotation with an optional attribution. |
20
+ | `domma-block-stats` | Up to three useful figures with clear labels. |
21
+ | `domma-block-steps` | A clear, numbered process with up to three steps. |
22
+ | `domma-block-faq` | Up to three questions and answers, readable without JavaScript. |
23
+ | `domma-block-contact` | Contact details, an address and opening hours. |
24
+ | `domma-block-pricing-card` | A clear price or package card with an optional enquiry button. |
25
+ | `domma-block-team-card` | A team member photo, role and short introduction. |
26
+ | `domma-block-image` | An uncropped image with an optional caption. |
27
+ | `domma-block-logos` | A responsive row of up to four organisation logos. |
28
+
29
+ ## Make it yours
30
+
31
+ Replace example picture addresses with images from your Media library. Headings,
32
+ introductions and other text parameters accept plain text. Use `alt` to describe
33
+ an image, or leave it empty when the image is decorative. Add both `link` and
34
+ `label` for a button; omit them to hide it. Unused feature, step, FAQ, figure and
35
+ logo slots are hidden automatically.
36
+
37
+ The banner and hero use an `h1` main heading. Choose one for each page; the other
38
+ sections use `h2` headings, and individual service, team and price cards use
39
+ `h3`. Place cards below a section heading. Image and card blocks can also go
40
+ inside your usual grid or column shortcodes.
41
+
42
+ All blocks adapt to smaller screens, use your site's theme where appropriate,
43
+ and work without the Domma marketing stylesheet. FAQ questions and answers stay
44
+ readable without JavaScript. Contact email and phone links
45
+ open the visitor's usual apps. Prices are display text, so include your currency,
46
+ billing period and any tax wording explicitly. Use your own real figures,
47
+ approved customer quotes and organisation logos.
48
+
49
+ Edit or duplicate a block to change its design. The CMS adds missing library
50
+ files on startup and preserves existing HTML, CSS and metadata files. Existing
51
+ sites receive new blocks when they upgrade to a CMS version that includes them.
52
+
53
+ ## Copy an example
54
+
55
+ ### domma-block-banner
56
+
57
+ A photo banner with a readable overlay across its left half.
58
+
59
+ ```text
60
+ [domma-block-banner header="A little guidance, or a helping hand." blurb="Find an answer, learn something new or get in touch." image="/media/banner.jpg" alt="People working together at a laptop" link="/contact" label="Get in touch" /]
61
+ ```
62
+
63
+ ### domma-block-split
64
+
65
+ An image beside a section heading and introduction.
66
+
67
+ ```text
68
+ [domma-block-split header="Made for your business" blurb="Tell visitors how you can help." image="/media/about.jpg" alt="Our workspace" link="/about" label="Meet us" /]
69
+ ```
70
+
71
+ ### domma-block-cta
72
+
73
+ A welcoming call to action using your site theme.
74
+
75
+ ```text
76
+ [domma-block-cta header="Have something in mind?" blurb="Tell us a little about your plans." link="/contact" label="Let us help" /]
77
+ ```
78
+
79
+ ### domma-block-hero
80
+
81
+ A centred page introduction with an optional button.
82
+
83
+ ```text
84
+ [domma-block-hero header="Welcome to your next chapter" blurb="Say what you do and who you help." link="/contact" label="Let us help" /]
85
+ ```
86
+
87
+ ### domma-block-text
88
+
89
+ A readable text section for your story or an introduction.
90
+
91
+ ```text
92
+ [domma-block-text header="Our story" blurb="Share a little about your business and the people behind it." /]
93
+ ```
94
+
95
+ ### domma-block-features
96
+
97
+ An introduction and up to three feature cards.
98
+
99
+ ```text
100
+ [domma-block-features header="How we help" blurb="Practical support for your business." title1="Plan" text1="Find the right direction." title2="Build" text2="Bring your ideas to life." title3="Grow" text3="Keep moving forward." /]
101
+ ```
102
+
103
+ ### domma-block-service-card
104
+
105
+ A reusable service card with an optional photo and button.
106
+
107
+ ```text
108
+ [domma-block-service-card header="Your service" blurb="Explain the benefit in a sentence or two." link="/services" label="Find out more" /]
109
+ ```
110
+
111
+ ### domma-block-testimonial
112
+
113
+ A customer quotation with an optional attribution.
114
+
115
+ ```text
116
+ [domma-block-testimonial quote="Replace this with a customer quotation you have permission to share." name="Customer name" detail="Business or role" /]
117
+ ```
118
+
119
+ ### domma-block-stats
120
+
121
+ Up to three useful figures with clear labels.
122
+
123
+ ```text
124
+ [domma-block-stats header="A few useful facts" value1="Your figure" label1="Explain what it represents" /]
125
+ ```
126
+
127
+ ### domma-block-steps
128
+
129
+ A clear, numbered process with up to three steps.
130
+
131
+ ```text
132
+ [domma-block-steps header="Getting started" blurb="A simple way forward." title1="Say hello" text1="Tell us what you need." title2="Make a plan" text2="Agree the details together." title3="Get going" text3="Put your plan into action." /]
133
+ ```
134
+
135
+ ### domma-block-faq
136
+
137
+ Up to three questions and answers, readable without JavaScript.
138
+
139
+ ```text
140
+ [domma-block-faq header="A few common questions" question1="How do we get started?" answer1="Get in touch and tell us what you have in mind." question2="Can I ask a question first?" answer2="Of course. We are happy to help." /]
141
+ ```
142
+
143
+ ### domma-block-contact
144
+
145
+ Contact details, an address and opening hours.
146
+
147
+ ```text
148
+ [domma-block-contact header="Get in touch" blurb="Tell us how we can help." email="hello@example.com" phone="+44 1234 567890" address="Your business address" hours="Your opening hours" /]
149
+ ```
150
+
151
+ ### domma-block-pricing-card
152
+
153
+ A clear price or package card with an optional enquiry button.
154
+
155
+ ```text
156
+ [domma-block-pricing-card header="Your package" price="Ask for a quote" blurb="Describe exactly what is included." link="/contact" label="Talk it through" /]
157
+ ```
158
+
159
+ ### domma-block-team-card
160
+
161
+ A team member photo, role and short introduction.
162
+
163
+ ```text
164
+ [domma-block-team-card name="Team member" role="Role or specialism" blurb="A short, friendly introduction." image="/media/team-member.jpg" alt="Portrait of your team member" /]
165
+ ```
166
+
167
+ ### domma-block-image
168
+
169
+ An uncropped image with an optional caption.
170
+
171
+ ```text
172
+ [domma-block-image image="/media/your-work.jpg" alt="Describe what visitors can see" caption="Add a little context to the image." /]
173
+ ```
174
+
175
+ ### domma-block-logos
176
+
177
+ A responsive row of up to four organisation logos.
178
+
179
+ ```text
180
+ [domma-block-logos header="Who we work with" image1="/media/partner-logo.svg" alt1="Partner name" /]
181
+ ```
182
+
183
+ ## Blocks in headers, footers and menus
184
+
185
+ The running CMS already supports custom blocks in **Site Settings > Footer**.
186
+ The selected blocks appear above the standard footer menus. Each footer entry
187
+ is a block name, without per-placement parameters, so duplicate a starter block
188
+ and replace its placeholders with your site's details before selecting it there.
189
+
190
+ A custom block can also contain a menu shortcode, for example:
191
+
192
+ ```text
193
+ [menu location="footer-primary" /]
194
+ ```
195
+
196
+ Keep navigation links in Menus so visibility, nesting and current-page behaviour
197
+ continue to come from the menu system. A block can supply the surrounding layout.
198
+
199
+ Header block slots would be a useful next step: a shared announcement bar,
200
+ contact strip or branded header around the existing navigation. They are a
201
+ proposed extension, not part of this library change. Replacing the full navigation
202
+ would also need to retain mobile controls, keyboard access and the visitor's
203
+ current-page indication.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "domma-cms",
3
- "version": "1.8.43",
3
+ "version": "1.8.45",
4
4
  "description": "File-based CMS powered by Domma and Fastify. Run npx domma-cms my-site to create a new project.",
5
5
  "type": "module",
6
6
  "main": "server/server.js",
@@ -0,0 +1,98 @@
1
+ [
2
+ {
3
+ "name": "domma-block-banner",
4
+ "category": "introductions",
5
+ "description": "A photo banner with a readable overlay across its left half.",
6
+ "example": "[domma-block-banner header=\"A little guidance, or a helping hand.\" blurb=\"Find an answer, learn something new or get in touch.\" image=\"/media/banner.jpg\" alt=\"People working together at a laptop\" link=\"/contact\" label=\"Get in touch\" /]"
7
+ },
8
+ {
9
+ "name": "domma-block-split",
10
+ "category": "content",
11
+ "description": "An image beside a section heading and introduction.",
12
+ "example": "[domma-block-split header=\"Made for your business\" blurb=\"Tell visitors how you can help.\" image=\"/media/about.jpg\" alt=\"Our workspace\" link=\"/about\" label=\"Meet us\" /]"
13
+ },
14
+ {
15
+ "name": "domma-block-cta",
16
+ "category": "conversion",
17
+ "description": "A welcoming call to action using your site theme.",
18
+ "example": "[domma-block-cta header=\"Have something in mind?\" blurb=\"Tell us a little about your plans.\" link=\"/contact\" label=\"Let us help\" /]"
19
+ },
20
+ {
21
+ "name": "domma-block-hero",
22
+ "category": "introductions",
23
+ "description": "A centred page introduction with an optional button.",
24
+ "example": "[domma-block-hero header=\"Welcome to your next chapter\" blurb=\"Say what you do and who you help.\" link=\"/contact\" label=\"Let us help\" /]"
25
+ },
26
+ {
27
+ "name": "domma-block-text",
28
+ "category": "content",
29
+ "description": "A readable text section for your story or an introduction.",
30
+ "example": "[domma-block-text header=\"Our story\" blurb=\"Share a little about your business and the people behind it.\" /]"
31
+ },
32
+ {
33
+ "name": "domma-block-features",
34
+ "category": "services",
35
+ "description": "An introduction and up to three feature cards.",
36
+ "example": "[domma-block-features header=\"How we help\" blurb=\"Practical support for your business.\" title1=\"Plan\" text1=\"Find the right direction.\" title2=\"Build\" text2=\"Bring your ideas to life.\" title3=\"Grow\" text3=\"Keep moving forward.\" /]"
37
+ },
38
+ {
39
+ "name": "domma-block-service-card",
40
+ "category": "services",
41
+ "description": "A reusable service card with an optional photo and button.",
42
+ "example": "[domma-block-service-card header=\"Your service\" blurb=\"Explain the benefit in a sentence or two.\" link=\"/services\" label=\"Find out more\" /]"
43
+ },
44
+ {
45
+ "name": "domma-block-testimonial",
46
+ "category": "trust",
47
+ "description": "A customer quotation with an optional attribution.",
48
+ "example": "[domma-block-testimonial quote=\"Replace this with a customer quotation you have permission to share.\" name=\"Customer name\" detail=\"Business or role\" /]"
49
+ },
50
+ {
51
+ "name": "domma-block-stats",
52
+ "category": "trust",
53
+ "description": "Up to three useful figures with clear labels.",
54
+ "example": "[domma-block-stats header=\"A few useful facts\" value1=\"Your figure\" label1=\"Explain what it represents\" /]"
55
+ },
56
+ {
57
+ "name": "domma-block-steps",
58
+ "category": "services",
59
+ "description": "A clear, numbered process with up to three steps.",
60
+ "example": "[domma-block-steps header=\"Getting started\" blurb=\"A simple way forward.\" title1=\"Say hello\" text1=\"Tell us what you need.\" title2=\"Make a plan\" text2=\"Agree the details together.\" title3=\"Get going\" text3=\"Put your plan into action.\" /]"
61
+ },
62
+ {
63
+ "name": "domma-block-faq",
64
+ "category": "support",
65
+ "description": "Up to three questions and answers, readable without JavaScript.",
66
+ "example": "[domma-block-faq header=\"A few common questions\" question1=\"How do we get started?\" answer1=\"Get in touch and tell us what you have in mind.\" question2=\"Can I ask a question first?\" answer2=\"Of course. We are happy to help.\" /]"
67
+ },
68
+ {
69
+ "name": "domma-block-contact",
70
+ "category": "support",
71
+ "description": "Contact details, an address and opening hours.",
72
+ "example": "[domma-block-contact header=\"Get in touch\" blurb=\"Tell us how we can help.\" email=\"hello@example.com\" phone=\"+44 1234 567890\" address=\"Your business address\" hours=\"Your opening hours\" /]"
73
+ },
74
+ {
75
+ "name": "domma-block-pricing-card",
76
+ "category": "services",
77
+ "description": "A clear price or package card with an optional enquiry button.",
78
+ "example": "[domma-block-pricing-card header=\"Your package\" price=\"Ask for a quote\" blurb=\"Describe exactly what is included.\" link=\"/contact\" label=\"Talk it through\" /]"
79
+ },
80
+ {
81
+ "name": "domma-block-team-card",
82
+ "category": "trust",
83
+ "description": "A team member photo, role and short introduction.",
84
+ "example": "[domma-block-team-card name=\"Team member\" role=\"Role or specialism\" blurb=\"A short, friendly introduction.\" image=\"/media/team-member.jpg\" alt=\"Portrait of your team member\" /]"
85
+ },
86
+ {
87
+ "name": "domma-block-image",
88
+ "category": "content",
89
+ "description": "An uncropped image with an optional caption.",
90
+ "example": "[domma-block-image image=\"/media/your-work.jpg\" alt=\"Describe what visitors can see\" caption=\"Add a little context to the image.\" /]"
91
+ },
92
+ {
93
+ "name": "domma-block-logos",
94
+ "category": "trust",
95
+ "description": "A responsive row of up to four organisation logos.",
96
+ "example": "[domma-block-logos header=\"Who we work with\" image1=\"/media/partner-logo.svg\" alt1=\"Partner name\" /]"
97
+ }
98
+ ]
@@ -0,0 +1,65 @@
1
+ .db-banner {
2
+ margin-block: 1.5rem;
3
+ position: relative;
4
+ isolation: isolate;
5
+ overflow: hidden;
6
+ border-radius: var(--dm-radius-xl, 1rem);
7
+ background: #152832;
8
+ color: #fff;
9
+ }
10
+ .db-banner-image {
11
+ position: absolute;
12
+ inset: 0;
13
+ width: 100%;
14
+ height: 100%;
15
+ object-fit: cover;
16
+ }
17
+ .db-banner-image[src=""], .db-banner-image:not([src]) { display: none; }
18
+ .db-banner-panel {
19
+ position: relative;
20
+ box-sizing: border-box;
21
+ display: flex;
22
+ flex-direction: column;
23
+ justify-content: center;
24
+ align-items: flex-start;
25
+ width: 50%;
26
+ min-height: 30rem;
27
+ padding: clamp(1.5rem, 4vw, 3.5rem);
28
+ background: rgb(13 30 40 / 92%);
29
+ }
30
+ .db-banner-heading {
31
+ margin: 0 0 1.25rem;
32
+ color: #fff;
33
+ font-size: clamp(2rem, 3.5vw, 3.25rem);
34
+ line-height: 1.12;
35
+ letter-spacing: -.02em;
36
+ overflow-wrap: anywhere;
37
+ }
38
+ .db-banner-blurb {
39
+ margin: 0;
40
+ color: #fff;
41
+ font-size: 1.1rem;
42
+ line-height: 1.7;
43
+ overflow-wrap: anywhere;
44
+ white-space: pre-line;
45
+ }
46
+ .db-banner a.db-banner-link {
47
+ display: inline-flex;
48
+ margin-top: 1.75rem;
49
+ padding: .8rem 1.3rem;
50
+ border: 2px solid #fff;
51
+ border-radius: var(--dm-radius, .5rem);
52
+ background: #fff;
53
+ color: #152832;
54
+ font-weight: 600;
55
+ line-height: 1.4;
56
+ text-decoration: none;
57
+ overflow-wrap: anywhere;
58
+ }
59
+ .db-banner a.db-banner-link:hover { background: #e8f1f5; color: #152832; }
60
+ .db-banner a.db-banner-link:focus-visible { outline: 3px solid #fff; outline-offset: 4px; }
61
+ .db-banner a.db-banner-link[href=""], .db-banner a.db-banner-link:not([href]), .db-banner a.db-banner-link:empty { display: none; }
62
+ @media (max-width: 767px) {
63
+ .db-banner-image { position: relative; display: block; height: 15rem; }
64
+ .db-banner-panel { width: 100%; min-height: 0; padding: 1.75rem; }
65
+ }
@@ -0,0 +1,22 @@
1
+ <!--
2
+ domma-block-banner - A photo banner with a readable overlay across its left half.
3
+
4
+ Parameters:
5
+ header - Main page heading (h1; use once per page)
6
+ blurb - Short introduction, as plain text
7
+ image - Image address from your media library
8
+ alt - Description of the image; leave empty for a decorative photo
9
+ link - Optional button destination
10
+ label - Optional button text
11
+
12
+ Example:
13
+ [domma-block-banner header="A little guidance, or a helping hand." blurb="Find an answer, learn something new or get in touch." image="/media/banner.jpg" alt="People working together at a laptop" link="/contact" label="Get in touch" /]
14
+ -->
15
+ <section class="db-banner">
16
+ <img class="db-banner-image" src="{{image}}" alt="{{alt}}" fetchpriority="high">
17
+ <div class="db-banner-panel">
18
+ <h1 class="db-banner-heading">{{header}}</h1>
19
+ <p class="db-banner-blurb">{{blurb}}</p>
20
+ <a class="db-banner-link db-banner-btn" href="{{link}}">{{label}}</a>
21
+ </div>
22
+ </section>
@@ -0,0 +1,7 @@
1
+ {
2
+ "bundled": true,
3
+ "adminTags": [
4
+ "domma-blocks",
5
+ "introductions"
6
+ ]
7
+ }
@@ -0,0 +1,18 @@
1
+ .db-contact {
2
+ margin-block: 1.5rem;
3
+ color: var(--dm-text, #152832);
4
+ overflow-wrap: anywhere;
5
+ padding: clamp(1.25rem, 3vw, 2rem);
6
+ border: 1px solid var(--dm-card-border, var(--dm-border, #d5e0e5));
7
+ border-radius: var(--dm-radius-xl, 1rem);
8
+ background: var(--dm-card-bg, var(--dm-surface, #f5f8fa));
9
+ }
10
+ .db-contact-heading { margin: 0 0 1rem; color: inherit; font-size: clamp(1.6rem, 3vw, 2.4rem); line-height: 1.2; }
11
+ .db-contact-blurb { margin: 0; line-height: 1.75; white-space: pre-line; }
12
+ .db-contact-blurb:empty { display: none; }
13
+ .db-contact-details { display: grid; gap: .75rem; margin-top: 1.5rem; font-style: normal; line-height: 1.7; }
14
+ .db-contact-details p, .db-contact-hours { margin: 0; white-space: pre-line; line-height: 1.7; }
15
+ .db-contact-hours { margin-top: 1rem; }
16
+ .db-contact-link { justify-self: start; }
17
+ .db-contact-link:focus-visible { outline: 3px solid currentColor; outline-offset: 4px; }
18
+ .db-contact-link:not([href]), .db-contact-link[href="mailto:"], .db-contact-link[href="tel:"], .db-contact-details p:empty, .db-contact-hours:empty { display: none; }
@@ -0,0 +1,15 @@
1
+ <!--
2
+ domma-block-contact - Contact details, an address and opening hours.
3
+
4
+ Parameters:
5
+ header - Section heading (h2)
6
+ blurb - Introduction, as plain text
7
+ email - Email address
8
+ phone - Phone number, including country code when useful
9
+ address - Postal address, as plain text
10
+ hours - Opening hours, as plain text
11
+
12
+ Example:
13
+ [domma-block-contact header="Get in touch" blurb="Tell us how we can help." email="hello@example.com" phone="+44 1234 567890" address="Your business address" hours="Your opening hours" /]
14
+ -->
15
+ <section class="db-contact"><h2 class="db-contact-heading">{{header}}</h2><p class="db-contact-blurb">{{blurb}}</p><address class="db-contact-details"><a class="db-contact-link" href="mailto:{{email}}">{{email}}</a><a class="db-contact-link" href="tel:{{phone}}">{{phone}}</a><p>{{address}}</p></address><p class="db-contact-hours">{{hours}}</p></section>
@@ -0,0 +1,7 @@
1
+ {
2
+ "bundled": true,
3
+ "adminTags": [
4
+ "domma-blocks",
5
+ "support"
6
+ ]
7
+ }
@@ -0,0 +1,8 @@
1
+ .db-cta {
2
+ margin-block: 1.5rem; padding: clamp(2rem, 5vw, 4rem) 1.5rem; border: 1px solid var(--dm-card-border, #d5e0e5); border-radius: var(--dm-radius-xl, 1rem); background: var(--dm-card-bg, #f4f8fa); color: var(--dm-text, #152832); text-align: center; }
3
+ .db-cta-heading { margin: 0 auto 1rem; max-width: 48rem; font-size: clamp(1.75rem, 3vw, 2.5rem); line-height: 1.2; color: inherit; overflow-wrap: anywhere; }
4
+ .db-cta-blurb { margin: 0 auto; max-width: 42rem; font-size: 1.1rem; line-height: 1.75; white-space: pre-line; overflow-wrap: anywhere; }
5
+ .db-cta a.db-cta-link { display: inline-block; margin-top: 1.5rem; padding: .8rem 1.25rem; border: 2px solid currentColor; border-radius: var(--dm-radius, .5rem); color: inherit; font-weight: 600; text-decoration: none; overflow-wrap: anywhere; }
6
+ .db-cta a.db-cta-link:hover { text-decoration: underline; }
7
+ .db-cta a.db-cta-link:focus-visible { outline: 3px solid currentColor; outline-offset: 4px; }
8
+ .db-cta a.db-cta-link[href=""], .db-cta a.db-cta-link:not([href]), .db-cta a.db-cta-link:empty { display: none; }
@@ -0,0 +1,17 @@
1
+ <!--
2
+ domma-block-cta - A welcoming call to action using your site's theme colours.
3
+
4
+ Parameters:
5
+ header - Section heading (h2)
6
+ blurb - Short invitation, as plain text
7
+ link - Button destination
8
+ label - Button text
9
+
10
+ Example:
11
+ [domma-block-cta header="Have something in mind?" blurb="Tell us a little about your plans." link="/contact" label="Let us help" /]
12
+ -->
13
+ <section class="db-cta">
14
+ <h2 class="db-cta-heading">{{header}}</h2>
15
+ <p class="db-cta-blurb">{{blurb}}</p>
16
+ <a class="db-cta-link db-cta-btn" href="{{link}}">{{label}}</a>
17
+ </section>
@@ -0,0 +1,7 @@
1
+ {
2
+ "bundled": true,
3
+ "adminTags": [
4
+ "domma-blocks",
5
+ "conversion"
6
+ ]
7
+ }
@@ -0,0 +1,13 @@
1
+ .db-faq {
2
+ margin-block: 1.5rem;
3
+ color: var(--dm-text, #152832);
4
+ overflow-wrap: anywhere;
5
+ }
6
+ .db-faq-heading { margin: 0 0 1rem; color: inherit; font-size: clamp(1.6rem, 3vw, 2.4rem); line-height: 1.2; }
7
+ .db-faq-blurb { margin: 0; line-height: 1.75; white-space: pre-line; }
8
+ .db-faq-blurb:empty { display: none; }
9
+ .db-faq-list { display: grid; gap: .75rem; margin: 1.5rem 0 0; }
10
+ .db-faq-item { border: 1px solid var(--dm-card-border, var(--dm-border, #d5e0e5)); border-radius: var(--dm-radius, .5rem); background: var(--dm-card-bg, var(--dm-surface, #f5f8fa)); }
11
+ .db-faq-item dt { padding: 1.25rem; font-weight: 600; line-height: 1.5; }
12
+ .db-faq-item dd { margin: 0; padding: 0 1.25rem 1.25rem; line-height: 1.75; white-space: pre-line; }
13
+ .db-faq-item:has(dt:empty) { display: none; }
@@ -0,0 +1,17 @@
1
+ <!--
2
+ domma-block-faq - Up to three questions and answers, readable without JavaScript.
3
+
4
+ Parameters:
5
+ header - Section heading (h2)
6
+ blurb - Introduction, as plain text
7
+ question1 - Question 1
8
+ answer1 - Answer 1, as plain text
9
+ question2 - Question 2
10
+ answer2 - Answer 2, as plain text
11
+ question3 - Question 3
12
+ answer3 - Answer 3, as plain text
13
+
14
+ Example:
15
+ [domma-block-faq header="A few common questions" question1="How do we get started?" answer1="Get in touch and tell us what you have in mind." question2="Can I ask a question first?" answer2="Of course. We are happy to help." /]
16
+ -->
17
+ <section class="db-faq"><h2 class="db-faq-heading">{{header}}</h2><p class="db-faq-blurb">{{blurb}}</p><dl class="db-faq-list"><div class="db-faq-item"><dt>{{question1}}</dt><dd>{{answer1}}</dd></div><div class="db-faq-item"><dt>{{question2}}</dt><dd>{{answer2}}</dd></div><div class="db-faq-item"><dt>{{question3}}</dt><dd>{{answer3}}</dd></div></dl></section>
@@ -0,0 +1,7 @@
1
+ {
2
+ "bundled": true,
3
+ "adminTags": [
4
+ "domma-blocks",
5
+ "support"
6
+ ]
7
+ }
@@ -0,0 +1,18 @@
1
+ .db-features {
2
+ margin-block: 1.5rem;
3
+ color: var(--dm-text, #152832);
4
+ overflow-wrap: anywhere;
5
+ }
6
+ .db-features-heading { margin: 0 0 1rem; color: inherit; font-size: clamp(1.6rem, 3vw, 2.4rem); line-height: 1.2; }
7
+ .db-features-blurb { margin: 0; line-height: 1.75; white-space: pre-line; }
8
+ .db-features-blurb:empty { display: none; }
9
+ .db-features-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr)); gap: 1.25rem; margin-top: 1.5rem; }
10
+ .db-features-card {
11
+ padding: clamp(1.25rem, 3vw, 2rem);
12
+ border: 1px solid var(--dm-card-border, var(--dm-border, #d5e0e5));
13
+ border-radius: var(--dm-radius-xl, 1rem);
14
+ background: var(--dm-card-bg, var(--dm-surface, #f5f8fa));
15
+ }
16
+ .db-features-card h3 { margin: 0 0 .75rem; color: inherit; font-size: 1.25rem; }
17
+ .db-features-card p { margin: 0; line-height: 1.7; white-space: pre-line; }
18
+ .db-features-card:has(h3:empty) { display: none; }
@@ -0,0 +1,19 @@
1
+ <!--
2
+ domma-block-features - An introduction and up to three feature cards.
3
+
4
+ Parameters:
5
+ header - Section heading (h2)
6
+ blurb - Introduction, as plain text
7
+ title1 - Feature 1 heading
8
+ text1 - Feature 1 description
9
+ title2 - Feature 2 heading
10
+ text2 - Feature 2 description
11
+ title3 - Feature 3 heading
12
+ text3 - Feature 3 description
13
+
14
+ Example:
15
+ [domma-block-features header="How we help" blurb="Practical support for your business." title1="Plan" text1="Find the right direction." title2="Build" text2="Bring your ideas to life." title3="Grow" text3="Keep moving forward." /]
16
+ -->
17
+ <section class="db-features"><h2 class="db-features-heading">{{header}}</h2><p class="db-features-blurb">{{blurb}}</p><div class="db-features-grid"><article class="db-features-card"><h3>{{title1}}</h3><p>{{text1}}</p></article>
18
+ <article class="db-features-card"><h3>{{title2}}</h3><p>{{text2}}</p></article>
19
+ <article class="db-features-card"><h3>{{title3}}</h3><p>{{text3}}</p></article></div></section>
@@ -0,0 +1,7 @@
1
+ {
2
+ "bundled": true,
3
+ "adminTags": [
4
+ "domma-blocks",
5
+ "services"
6
+ ]
7
+ }