Compare commits
No commits in common. "025b13dd4891453553590e1c66cca2b182dd6485" and "a441b4cccfba0335eb22455e025303177e4f34fe" have entirely different histories.
025b13dd48
...
a441b4cccf
@ -5,6 +5,7 @@
|
|||||||
"page_templates": ["default", "article", "blog-index", "contact"],
|
"page_templates": ["default", "article", "blog-index", "contact"],
|
||||||
"blocks": [
|
"blocks": [
|
||||||
{ "block_key": "navbar", "title": "Gilded Navigation", "content": { "menuName": "main", "logoType": "text", "logoText": { "text": "Maison Doré" } }, "slot": "header", "sort_order": 0 },
|
{ "block_key": "navbar", "title": "Gilded Navigation", "content": { "menuName": "main", "logoType": "text", "logoText": { "text": "Maison Doré" } }, "slot": "header", "sort_order": 0 },
|
||||||
|
{ "block_key": "divider", "title": "Header Fan Divider", "content": { "variant": "ornament", "icon": "lucide:diamond" }, "slot": "header", "sort_order": 1 },
|
||||||
{ "block_key": "slot", "title": "Main Content", "content": { "slotName": "main", "placeholder": "Page content" }, "slot": "main", "sort_order": 0 },
|
{ "block_key": "slot", "title": "Main Content", "content": { "slotName": "main", "placeholder": "Page content" }, "slot": "main", "sort_order": 0 },
|
||||||
{ "block_key": "footer", "title": "Site Footer", "content": { "layout": "centered", "companyName": "Maison Doré", "tagline": "A supper club in the grand manner." }, "slot": "footer", "sort_order": 0 }
|
{ "block_key": "footer", "title": "Site Footer", "content": { "layout": "centered", "companyName": "Maison Doré", "tagline": "A supper club in the grand manner." }, "slot": "footer", "sort_order": 0 }
|
||||||
]
|
]
|
||||||
@ -15,6 +16,7 @@
|
|||||||
"page_templates": ["landing", "full-width"],
|
"page_templates": ["landing", "full-width"],
|
||||||
"blocks": [
|
"blocks": [
|
||||||
{ "block_key": "navbar", "title": "Gilded Navigation", "content": { "menuName": "main", "logoType": "text", "logoText": { "text": "Maison Doré" } }, "slot": "marquee", "sort_order": 0 },
|
{ "block_key": "navbar", "title": "Gilded Navigation", "content": { "menuName": "main", "logoType": "text", "logoText": { "text": "Maison Doré" } }, "slot": "marquee", "sort_order": 0 },
|
||||||
|
{ "block_key": "art-deco:reservation", "title": "Reservation Strip", "content": { "phone": "+1 555 0126", "openTable": "/contact", "hours": ["Dinner Tuesday to Sunday", "6pm to late"] }, "slot": "marquee", "sort_order": 1 },
|
||||||
{ "block_key": "slot", "title": "Main Content", "content": { "slotName": "main" }, "slot": "main", "sort_order": 0 },
|
{ "block_key": "slot", "title": "Main Content", "content": { "slotName": "main" }, "slot": "main", "sort_order": 0 },
|
||||||
{ "block_key": "divider", "title": "CTA Fan Divider", "content": { "variant": "ornament", "icon": "lucide:diamond" }, "slot": "cta", "sort_order": 0 },
|
{ "block_key": "divider", "title": "CTA Fan Divider", "content": { "variant": "ornament", "icon": "lucide:diamond" }, "slot": "cta", "sort_order": 0 },
|
||||||
{ "block_key": "footer", "title": "Site Footer", "content": { "layout": "centered", "companyName": "Maison Doré", "tagline": "A supper club in the grand manner." }, "slot": "footer", "sort_order": 0 }
|
{ "block_key": "footer", "title": "Site Footer", "content": { "layout": "centered", "companyName": "Maison Doré", "tagline": "A supper club in the grand manner." }, "slot": "footer", "sort_order": 0 }
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
name = "art-deco"
|
name = "art-deco"
|
||||||
display_name = "Art Deco"
|
display_name = "Art Deco"
|
||||||
scope = "@themes"
|
scope = "@themes"
|
||||||
version = "0.4.0"
|
version = "0.3.0"
|
||||||
description = "Luxury Art Deco theme with champagne gold gradients, jet black, ivory and geometric fan motifs for hotels, fine dining, weddings and jewellers."
|
description = "Luxury Art Deco theme with champagne gold gradients, jet black, ivory and geometric fan motifs for hotels, fine dining, weddings and jewellers."
|
||||||
kind = "theme"
|
kind = "theme"
|
||||||
categories = ["templates"]
|
categories = ["templates"]
|
||||||
|
|||||||
BIN
preview.png
|
Before Width: | Height: | Size: 813 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 813 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 816 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 344 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 359 KiB After Width: | Height: | Size: 58 KiB |
@ -1,64 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" role="img" aria-label="Art Deco gold fan motif on black">
|
|
||||||
<defs>
|
|
||||||
<linearGradient id="gold" x1="0" y1="0" x2="0" y2="1">
|
|
||||||
<stop offset="0" stop-color="#e7cd86"/>
|
|
||||||
<stop offset="0.5" stop-color="#c9a24b"/>
|
|
||||||
<stop offset="1" stop-color="#9c7a30"/>
|
|
||||||
</linearGradient>
|
|
||||||
<radialGradient id="glow" cx="50%" cy="100%" r="90%">
|
|
||||||
<stop offset="0" stop-color="#241d10"/>
|
|
||||||
<stop offset="1" stop-color="#0f0e0c"/>
|
|
||||||
</radialGradient>
|
|
||||||
</defs>
|
|
||||||
|
|
||||||
<!-- ground -->
|
|
||||||
<rect width="1200" height="800" fill="#0f0e0c"/>
|
|
||||||
<rect width="1200" height="800" fill="url(#glow)"/>
|
|
||||||
|
|
||||||
<!-- sunburst fan rising from lower centre -->
|
|
||||||
<g transform="translate(600 620)">
|
|
||||||
<g fill="url(#gold)" opacity="0.9">
|
|
||||||
<!-- 15 rays across a 180° fan -->
|
|
||||||
<g>
|
|
||||||
<path d="M0 0 L-14 -560 L14 -560 Z" transform="rotate(0)"/>
|
|
||||||
<path d="M0 0 L-11 -520 L11 -520 Z" transform="rotate(11)"/>
|
|
||||||
<path d="M0 0 L-11 -520 L11 -520 Z" transform="rotate(-11)"/>
|
|
||||||
<path d="M0 0 L-10 -480 L10 -480 Z" transform="rotate(22)"/>
|
|
||||||
<path d="M0 0 L-10 -480 L10 -480 Z" transform="rotate(-22)"/>
|
|
||||||
<path d="M0 0 L-9 -440 L9 -440 Z" transform="rotate(33)"/>
|
|
||||||
<path d="M0 0 L-9 -440 L9 -440 Z" transform="rotate(-33)"/>
|
|
||||||
<path d="M0 0 L-8 -400 L8 -400 Z" transform="rotate(45)"/>
|
|
||||||
<path d="M0 0 L-8 -400 L8 -400 Z" transform="rotate(-45)"/>
|
|
||||||
<path d="M0 0 L-7 -350 L7 -350 Z" transform="rotate(58)"/>
|
|
||||||
<path d="M0 0 L-7 -350 L7 -350 Z" transform="rotate(-58)"/>
|
|
||||||
<path d="M0 0 L-6 -300 L6 -300 Z" transform="rotate(72)"/>
|
|
||||||
<path d="M0 0 L-6 -300 L6 -300 Z" transform="rotate(-72)"/>
|
|
||||||
<path d="M0 0 L-5 -250 L5 -250 Z" transform="rotate(86)"/>
|
|
||||||
<path d="M0 0 L-5 -250 L5 -250 Z" transform="rotate(-86)"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<!-- concentric arcs -->
|
|
||||||
<g fill="none" stroke="#c9a24b" stroke-opacity="0.55">
|
|
||||||
<path d="M-300 0 A300 300 0 0 1 300 0" stroke-width="3"/>
|
|
||||||
<path d="M-210 0 A210 210 0 0 1 210 0" stroke-width="2"/>
|
|
||||||
<path d="M-130 0 A130 130 0 0 1 130 0" stroke-width="2"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<!-- central medallion -->
|
|
||||||
<circle r="46" fill="#0f0e0c" stroke="url(#gold)" stroke-width="3"/>
|
|
||||||
<path d="M0 -30 L20 0 L0 30 L-20 0 Z" fill="url(#gold)"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<!-- stepped ziggurat border -->
|
|
||||||
<g fill="none" stroke="url(#gold)" stroke-width="4">
|
|
||||||
<rect x="40" y="40" width="1120" height="720"/>
|
|
||||||
<rect x="60" y="60" width="1080" height="680" stroke-width="1.5" stroke-opacity="0.6"/>
|
|
||||||
</g>
|
|
||||||
<g fill="#c9a24b">
|
|
||||||
<rect x="560" y="34" width="80" height="12"/>
|
|
||||||
<rect x="560" y="754" width="80" height="12"/>
|
|
||||||
<rect x="34" y="360" width="12" height="80"/>
|
|
||||||
<rect x="1154" y="360" width="12" height="80"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.8 KiB |
@ -6,14 +6,6 @@
|
|||||||
"tagline": "A supper club in the grand manner."
|
"tagline": "A supper club in the grand manner."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": [
|
|
||||||
{
|
|
||||||
"id": "d3c0d3c0-a11d-4ec0-9000-000000000001",
|
|
||||||
"file": "media/gold-room.svg",
|
|
||||||
"alt": "Gilded Art Deco fan crest — the Gold Room at Maison Doré",
|
|
||||||
"folder": "Demo"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"data_tables": [
|
"data_tables": [
|
||||||
{
|
{
|
||||||
"key": "contact_submissions",
|
"key": "contact_submissions",
|
||||||
@ -84,7 +76,6 @@
|
|||||||
"content": {
|
"content": {
|
||||||
"eyebrow": "Private dining",
|
"eyebrow": "Private dining",
|
||||||
"title": "The Gold Room",
|
"title": "The Gold Room",
|
||||||
"image": "d3c0d3c0-a11d-4ec0-9000-000000000001",
|
|
||||||
"description": "A room of your own behind the main floor. One long table, a dedicated maître d', and the full cellar. We write the menu with you.",
|
"description": "A room of your own behind the main floor. One long table, a dedicated maître d', and the full cellar. We write the menu with you.",
|
||||||
"seats": "Seats 2 to 14",
|
"seats": "Seats 2 to 14",
|
||||||
"minimum": "From $2,400",
|
"minimum": "From $2,400",
|
||||||
@ -123,7 +114,7 @@
|
|||||||
"parent_slug": "/blog",
|
"parent_slug": "/blog",
|
||||||
"blocks": [
|
"blocks": [
|
||||||
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "The gold standard", "level": 1 } },
|
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "The gold standard", "level": 1 } },
|
||||||
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>The oyster came first, in 1926, and it has not left the menu since. Before the tables were dressed, before the band had a name, before the sign above the door had dried, the kitchen had settled on one dish to open the room. We serve it still on ice, one at a time, with a champagne mignonette and a single leaf of gold.</p><p>People ask why only one. The honest answer is that a supper club is a matter of tempo, and the first thing on the table sets it. A dozen oysters is generosity; one oyster, presented as though it were the only one in the house, is an argument about how the evening intends to proceed. Slowly. Deliberately. With attention paid.</p><p>The mignonette is older than the room. A cook we no longer have the name of set down the proportions on the back of a wine list: shallots cut fine enough to disappear, a good vinegar cut with a little champagne, cracked pepper, and nothing else that would announce itself. It has been copied and it has been improved upon, and every improvement has been quietly abandoned. We make it the way it was written.</p><p>The gold leaf is not decoration, whatever the photographs suggest. It is a signature — the way a house marks a dish as its own. A single flake, laid on with a dry brush at the pass, catches the low light of the room and tells you, without a word, where you are sitting. It tastes of nothing. That is the point of it.</p><p>Service is a small ceremony. The plate is carried in two hands, set down without a sound, and left alone. No pepper is offered. No lemon is brought unless it is asked for, and it is not encouraged. The oyster is not garnished at the table; the table is not the place for it. Everything that could be decided has been decided in the kitchen already.</p><p>We take the shells from a single bed on the cold side of the coast, from a grower who has sold to the house for three generations and who still telephones when the water turns. They arrive closed, heavy, and smelling of the sea. A shucker who has been with us longer than most of the room opens them to order, never in advance, because an oyster opened early is an oyster that has begun to forget itself.</p><p>The ice is shaved, not cubed, and banked so the shell sits level and spills nothing. A cook once suggested we set the oyster on rock salt for the look of it. The suggestion was heard and not taken. Salt draws the liquor out; ice keeps it in. The liquor is the dish.</p><p>What follows on the menu changes with the season and the mood of the kitchen — the consommé, the turbot, the crown of lamb, the soufflé ordered at the start. But the oyster does not change, because it is not a course so much as a promise. It says: we have thought about this. We will keep thinking about it, right through to the last pour.</p><p>Regulars have their rituals. One takes it with nothing but the mignonette and closes his eyes. One tips the shell and drinks the liquor first, then eats the oyster after, which the kitchen considers correct. One has ordered it every Friday for eleven years and has never once been offered a menu before it arrives.</p><p>That is the gold standard, and it has very little to do with the gold. It is the standard of doing one small thing exactly, every night, for a hundred years less six, and letting the rest of the meal follow from it. Come for dinner. Start with the oyster. Let the room take it from there.</p>" } }
|
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>The oyster came first, in 1926, and it has not left the menu since. We serve it on ice, one at a time, with a champagne mignonette and a single leaf of gold.</p><p>The point is restraint. One oyster, done right, sets the tone for the meal that follows.</p>" } }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -133,7 +124,7 @@
|
|||||||
"parent_slug": "/blog",
|
"parent_slug": "/blog",
|
||||||
"blocks": [
|
"blocks": [
|
||||||
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "A night at the club", "level": 1 } },
|
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "A night at the club", "level": 1 } },
|
||||||
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>Doors open at six. For the first hour the room belongs to the staff — cloths pressed, silver counted, candles trimmed to the same height along every table — and then the first guests arrive and it belongs to them until it is dark outside and dark again on the far side of midnight.</p><p>The first cocktail comes before the menu, always. It is a house rule old enough that no one remembers making it. A drink is put in your hand before a decision is asked of you, on the theory that no one should have to choose anything until they have been given a moment to arrive. The moment is the point of a supper club. Everything else is arranged around it.</p><p>Dinner runs five courses and is not to be hurried. The kitchen sends when the table is ready and not before, reads the pace of a room the way a good conductor reads an orchestra, and would rather hold a plate two minutes than land it on a conversation that has not finished. If you are in a hurry, the kitchen will know, and it will be sorry, and it will still not rush the turbot.</p><p>The soufflé is ordered at the start. This surprises first-timers and delights everyone else. A Grand Marnier soufflé cannot be summoned at the end of a meal on a whim; it must be begun while the oysters are still on ice, folded and set and watched, so that it arrives at the table risen and warm at the exact moment the last plate is cleared. To order it early is to plan your evening. We approve of planning your evening.</p><p>Between courses there is room to breathe. The cellar sends up a glass you did not order but should have. The maître d' passes and says nothing, which is its own kind of service. A regular two tables over lifts a glass to a regular she has never spoken to. The room does this on its own; we only set the conditions.</p><p>The band plays after nine. Before then the music is low and comes from nowhere in particular; after nine it comes from the corner and has names attached to it. The songs are old and the tempo is kind. No one is made to dance and a good many people do, in the narrow space between the bar and the last banquette, which was left narrow on purpose.</p><p>Late suppers begin at ten. The full menu closes and a shorter one opens — the oyster still, of course, and a plate of something warm, and whatever the kitchen has kept back for the hours when the room thins to the people who did not want to leave. These are the best hours. The staff will not tell you so, but they are.</p><p>Somewhere past midnight the pace changes again. The band puts down its instruments and picks up a glass. The kitchen sends out what it is eating itself. Conversations that started at separate tables have found their way to the bar. This is not on any menu and cannot be reserved.</p><p>We do not announce a closing time, because the club closes when the last table is ready to leave and not one minute sooner. The candles are replaced if they burn down. The cellar stays open. When the room is finally empty the staff sit where the guests sat, and that is a night at the club — begun with a drink you did not choose, ended at an hour no one agreed on, and worth every course in between.</p>" } }
|
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>Doors open at six. The first cocktail arrives before the menu. Dinner runs five courses, unhurried, and the soufflé is ordered at the start.</p><p>The band plays after nine. Late suppers run until the last table is ready to leave.</p>" } }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -143,7 +134,7 @@
|
|||||||
"parent_slug": "/blog",
|
"parent_slug": "/blog",
|
||||||
"blocks": [
|
"blocks": [
|
||||||
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "Notes from the cellar", "level": 1 } },
|
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "Notes from the cellar", "level": 1 } },
|
||||||
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>The list is long and the choices are few, by design. A cellar can be built two ways: wide, to have a little of everything, or deep, to have the right thing in quantity. We have always built ours deep. There are fewer names on our list than on most, and more bottles behind each one.</p><p>We pour champagne by the glass and mean it. Not one champagne — several, opened through the night so the glass in your hand was drawn from a bottle opened within the hour, never the morning. A supper club that will not open a fresh bottle for a single glass is not a supper club we would care to sit in.</p><p>The bench of burgundy is the pride of the room. It was begun by the first owner, who bought more than he could sell in the belief that a cellar is a promise to the future, and it has been added to every year since by people who took the promise seriously. Some of those bottles have been waiting under this floor longer than most of the staff have been alive.</p><p>We keep a small shelf of older bottles for the ones who ask. It is not printed. It is not offered. It exists for the guest who leans in and says, in effect, surprise me, and is prepared to be surprised at the price as well as the pour. The sommelier keeps the shelf in his head and brings it out for the right question.</p><p>The list favours the grower over the label. We would rather pour a careful wine from a name you have never heard than a famous one made carelessly, and we will tell you as much if you let us. A great many of our bottles come from families the house has bought from for decades, some of whom now send the grandchildren of the people who first shook hands on the arrangement.</p><p>Tell the sommelier what you are eating. This is the whole of the method and it is worth more than any list. He is not there to sell you the dear bottle; he is there to put the right glass beside the right plate, and the right glass is very often not the dear one. Trust it. The pairing is the point, and the pairing takes care of itself.</p><p>There is a house style to the pouring, too. Glasses are filled less than you might expect — enough to swirl, never enough to warm — and topped through the course so the wine keeps pace with the food. An empty glass is considered a small failure of attention. A glass filled to the brim is considered a larger one.</p><p>For the table that cannot decide, we keep a pairing that runs the length of the tasting menu, a glass to each course, chosen the same afternoon by whoever is on the floor that night. It is never written down and never twice the same. Order it and you are drinking the sommelier's evening, which is the best thing on the list and the one thing you cannot ask for by name.</p><p>What we pour and why is, in the end, a long answer to a short question, and the short answer is this: we buy carefully, we keep patiently, and we open generously. Come hungry, say what you are eating, and let the cellar do the rest. It has been doing it since 1926 and it has not been wrong often.</p>" } }
|
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>The list is long and the choices are few, by design. We pour champagne by the glass, keep a deep bench of burgundy, and hold a small shelf of older bottles for the ones who ask.</p><p>Tell the sommelier what you are eating. The rest takes care of itself.</p>" } }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -12,10 +12,10 @@
|
|||||||
{% if author.location %}<span>{{ author.location }}</span>{% endif %}
|
{% if author.location %}<span>{{ author.location }}</span>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% if showSocial %}<div class="mt-6 flex items-center justify-center gap-4">
|
{% if showSocial %}<div class="mt-6 flex items-center justify-center gap-4">
|
||||||
{% if author.website_url %}<a href="{{ author.website_url }}" target="_blank" rel="noopener noreferrer" class="text-muted-foreground transition-colors hover:text-primary" title="Website"><svg width="20" height="20" class="h-5 w-5" aria-hidden="true"><use href="/icons/lucide.svg#globe"></use></svg></a>{% endif %}
|
{% if author.website_url %}<a href="{{ author.website_url }}" target="_blank" rel="noopener noreferrer" class="text-muted-foreground transition-colors hover:text-primary" title="Website"><svg class="h-5 w-5" aria-hidden="true"><use href="/icons/lucide.svg#globe"></use></svg></a>{% endif %}
|
||||||
{% if author.twitter_handle %}<a href="https://twitter.com/{{ author.twitter_handle|cut:"@" }}" target="_blank" rel="noopener noreferrer" class="text-muted-foreground transition-colors hover:text-primary" title="Twitter"><svg width="20" height="20" class="h-5 w-5" aria-hidden="true"><use href="/icons/simple-icons.svg#x"></use></svg></a>{% endif %}
|
{% if author.twitter_handle %}<a href="https://twitter.com/{{ author.twitter_handle|cut:"@" }}" target="_blank" rel="noopener noreferrer" class="text-muted-foreground transition-colors hover:text-primary" title="Twitter"><svg class="h-5 w-5" aria-hidden="true"><use href="/icons/simple-icons.svg#x"></use></svg></a>{% endif %}
|
||||||
{% if author.linkedin_url %}<a href="{{ author.linkedin_url }}" target="_blank" rel="noopener noreferrer" class="text-muted-foreground transition-colors hover:text-primary" title="LinkedIn"><svg width="20" height="20" class="h-5 w-5" aria-hidden="true"><use href="/icons/simple-icons.svg#linkedin"></use></svg></a>{% endif %}
|
{% if author.linkedin_url %}<a href="{{ author.linkedin_url }}" target="_blank" rel="noopener noreferrer" class="text-muted-foreground transition-colors hover:text-primary" title="LinkedIn"><svg class="h-5 w-5" aria-hidden="true"><use href="/icons/simple-icons.svg#linkedin"></use></svg></a>{% endif %}
|
||||||
{% if author.github_url %}<a href="{{ author.github_url }}" target="_blank" rel="noopener noreferrer" class="text-muted-foreground transition-colors hover:text-primary" title="GitHub"><svg width="20" height="20" class="h-5 w-5" aria-hidden="true"><use href="/icons/simple-icons.svg#github"></use></svg></a>{% endif %}
|
{% if author.github_url %}<a href="{{ author.github_url }}" target="_blank" rel="noopener noreferrer" class="text-muted-foreground transition-colors hover:text-primary" title="GitHub"><svg class="h-5 w-5" aria-hidden="true"><use href="/icons/simple-icons.svg#github"></use></svg></a>{% endif %}
|
||||||
</div>{% endif %}
|
</div>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
<div class="mt-12 grid grid-cols-1 gap-6 text-left {% if columns == 3 %}sm:grid-cols-2 lg:grid-cols-3{% elif columns == 1 %}{% else %}sm:grid-cols-2{% endif %}">
|
<div class="mt-12 grid grid-cols-1 gap-6 text-left {% if columns == 3 %}sm:grid-cols-2 lg:grid-cols-3{% elif columns == 1 %}{% else %}sm:grid-cols-2{% endif %}">
|
||||||
{% for channel in channels %}
|
{% for channel in channels %}
|
||||||
<div class="deco-frame deco-foil flex items-start gap-4 rounded-none bg-card p-6 text-card-foreground">
|
<div class="deco-frame deco-foil flex items-start gap-4 rounded-none bg-card p-6 text-card-foreground">
|
||||||
{% if channel.icon %}<span class="inline-flex h-11 w-11 shrink-0 items-center justify-center rounded-none border border-[hsl(var(--primary)/0.45)] bg-primary/10 text-primary"><svg width="20" height="20" class="h-5 w-5" aria-hidden="true"><use href="/icons/{{ channel.icon|split:":"|first }}.svg#{{ channel.icon|split:":"|last }}"></use></svg></span>{% endif %}
|
{% if channel.icon %}<span class="inline-flex h-11 w-11 shrink-0 items-center justify-center rounded-none border border-[hsl(var(--primary)/0.45)] bg-primary/10 text-primary"><svg class="h-5 w-5" aria-hidden="true"><use href="/icons/{{ channel.icon|split:":"|first }}.svg#{{ channel.icon|split:":"|last }}"></use></svg></span>{% endif %}
|
||||||
<div class="min-w-0">
|
<div class="min-w-0">
|
||||||
{% if channel.label %}<div class="deco-caps text-xs tracking-[0.16em] text-muted-foreground">{{ channel.label }}</div>{% endif %}
|
{% if channel.label %}<div class="deco-caps text-xs tracking-[0.16em] text-muted-foreground">{{ channel.label }}</div>{% endif %}
|
||||||
{% if channel.value %}<div class="mt-1 break-words text-lg text-foreground" style="font-family:var(--font-heading, 'Cinzel', 'Italiana', Georgia, serif)">{% if channel.link %}<a href="{{ channel.link }}" class="deco-link transition-colors hover:text-primary">{{ channel.value }}</a>{% else %}{{ channel.value }}{% endif %}</div>{% endif %}
|
{% if channel.value %}<div class="mt-1 break-words text-lg text-foreground" style="font-family:var(--font-heading, 'Cinzel', 'Italiana', Georgia, serif)">{% if channel.link %}<a href="{{ channel.link }}" class="deco-link transition-colors hover:text-primary">{{ channel.value }}</a>{% else %}{{ channel.value }}{% endif %}</div>{% endif %}
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="mt-8 hidden" data-countdown-expired>
|
<div class="mt-8 hidden" data-countdown-expired>
|
||||||
<p class="deco-caps text-xl" style="font-family:var(--font-heading, 'Cinzel', 'Italiana', Georgia, serif)">{{ expiredMessage|default:"This has started." }}</p>
|
<p class="deco-caps text-xl" style="font-family:var(--font-heading, 'Cinzel', 'Italiana', Georgia, serif)">{{ expiredMessage|default:"This has started." }}</p>
|
||||||
{% if expiredUrl and expiredLabel %}<a href="{{ expiredUrl }}" class="deco-pill mt-4 inline-flex items-center gap-2">{{ expiredLabel }}<svg width="16" height="16" class="h-4 w-4" aria-hidden="true"><use href="/icons/lucide.svg#arrow-right"></use></svg></a>{% endif %}
|
{% if expiredUrl and expiredLabel %}<a href="{{ expiredUrl }}" class="deco-pill mt-4 inline-flex items-center gap-2">{{ expiredLabel }}<svg class="h-4 w-4" aria-hidden="true"><use href="/icons/lucide.svg#arrow-right"></use></svg></a>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<noscript><p class="mt-6 text-muted-foreground">Counting down to <time datetime="{{ target }}">{{ target }}</time>.</p></noscript>
|
<noscript><p class="mt-6 text-muted-foreground">Counting down to <time datetime="{{ target }}">{{ target }}</time>.</p></noscript>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
{% if text %}<p class="mt-3 text-lg {% if background == "band" %}text-primary-foreground/80{% else %}text-muted-foreground{% endif %}" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ text }}</p>{% endif %}
|
{% if text %}<p class="mt-3 text-lg {% if background == "band" %}text-primary-foreground/80{% else %}text-muted-foreground{% endif %}" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ text }}</p>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-wrap items-center justify-center gap-3 {% if background != "split" %}mt-8{% else %}shrink-0{% endif %}">
|
<div class="flex flex-wrap items-center justify-center gap-3 {% if background != "split" %}mt-8{% else %}shrink-0{% endif %}">
|
||||||
{% if primaryUrl and primaryLabel %}<a href="{{ primaryUrl }}" class="deco-pill inline-flex items-center gap-2">{{ primaryLabel }}<svg width="16" height="16" class="h-4 w-4" aria-hidden="true"><use href="/icons/lucide.svg#arrow-right"></use></svg></a>{% endif %}
|
{% if primaryUrl and primaryLabel %}<a href="{{ primaryUrl }}" class="deco-pill inline-flex items-center gap-2">{{ primaryLabel }}<svg class="h-4 w-4" aria-hidden="true"><use href="/icons/lucide.svg#arrow-right"></use></svg></a>{% endif %}
|
||||||
{% if secondaryUrl and secondaryLabel %}<a href="{{ secondaryUrl }}" class="deco-link inline-flex items-center">{{ secondaryLabel }}</a>{% endif %}
|
{% if secondaryUrl and secondaryLabel %}<a href="{{ secondaryUrl }}" class="deco-link inline-flex items-center">{{ secondaryLabel }}</a>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
{% if variant == "ornament" %}
|
{% if variant == "ornament" %}
|
||||||
<div data-block-override="art-deco:divider" class="bn-divider mx-auto my-10 flex flex-col items-center gap-2 {% if width == "narrow" %}max-w-[200px]{% elif width == "wide" %}max-w-3xl{% else %}w-full{% endif %}{% if class %} {{ class }}{% endif %}" role="separator">
|
<div data-block-override="art-deco:divider" class="bn-divider mx-auto my-10 flex flex-col items-center gap-2 {% if width == "narrow" %}max-w-[200px]{% elif width == "wide" %}max-w-3xl{% else %}w-full{% endif %}{% if class %} {{ class }}{% endif %}" role="separator">
|
||||||
<div class="h-8 w-40 deco-sunburst" aria-hidden="true"></div>
|
<div class="h-8 w-40 deco-sunburst" aria-hidden="true"></div>
|
||||||
{% with iconRef=icon|default:"lucide:diamond" %}<div class="flex w-full items-center gap-4"><span class="deco-rule flex-1"></span><span style="color:hsl(var(--primary));"><svg width="16" height="16" class="h-4 w-4" aria-hidden="true"><use href="/icons/{{ iconRef|split:":"|first }}.svg#{{ iconRef|split:":"|last }}"></use></svg></span><span class="deco-rule flex-1"></span></div>{% endwith %}
|
<div class="flex w-full items-center gap-4"><span class="deco-rule flex-1"></span><span style="color:hsl(var(--primary));">::{{ icon|default:"lucide:diamond" }}:sm::</span><span class="deco-rule flex-1"></span></div>
|
||||||
</div>
|
</div>
|
||||||
{% elif variant == "spacer-rule" %}
|
{% elif variant == "spacer-rule" %}
|
||||||
<div data-block-override="art-deco:divider" class="bn-divider mx-auto py-10 flex justify-center {% if width == "narrow" %}max-w-[200px]{% elif width == "wide" %}max-w-3xl{% else %}w-full{% endif %}{% if class %} {{ class }}{% endif %}" role="separator"><span class="{% if weight == "thick" %}deco-rule-thick{% else %}deco-rule{% endif %} w-16"></span></div>
|
<div data-block-override="art-deco:divider" class="bn-divider mx-auto py-10 flex justify-center {% if width == "narrow" %}max-w-[200px]{% elif width == "wide" %}max-w-3xl{% else %}w-full{% endif %}{% if class %} {{ class }}{% endif %}" role="separator"><span class="{% if weight == "thick" %}deco-rule-thick{% else %}deco-rule{% endif %} w-16"></span></div>
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
<h3 class="text-xl text-foreground" style="font-family:var(--font-heading, 'Cinzel', 'Italiana', Georgia, serif)">{{ event.title }}</h3>
|
<h3 class="text-xl text-foreground" style="font-family:var(--font-heading, 'Cinzel', 'Italiana', Georgia, serif)">{{ event.title }}</h3>
|
||||||
{% if event.venue %}<p class="deco-caps text-xs tracking-[0.14em] text-muted-foreground">{{ event.venue }}</p>{% endif %}
|
{% if event.venue %}<p class="deco-caps text-xs tracking-[0.14em] text-muted-foreground">{{ event.venue }}</p>{% endif %}
|
||||||
{% if event.description %}<p class="text-sm text-muted-foreground" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ event.description }}</p>{% endif %}
|
{% if event.description %}<p class="text-sm text-muted-foreground" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ event.description }}</p>{% endif %}
|
||||||
{% if event.link %}<a href="{{ event.link }}" class="deco-link mt-auto inline-flex items-center gap-2 pt-3 text-sm text-primary">{{ event.linkLabel|default:"Details" }}<svg width="16" height="16" class="h-4 w-4" aria-hidden="true"><use href="/icons/lucide.svg#arrow-right"></use></svg></a>{% endif %}
|
{% if event.link %}<a href="{{ event.link }}" class="deco-link mt-auto inline-flex items-center gap-2 pt-3 text-sm text-primary">{{ event.linkLabel|default:"Details" }}<svg class="h-4 w-4" aria-hidden="true"><use href="/icons/lucide.svg#arrow-right"></use></svg></a>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
{% endif %}{% endfor %}
|
{% endif %}{% endfor %}
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
<details class="group py-2"{% if variant == "open-list" %} open{% endif %}>
|
<details class="group py-2"{% if variant == "open-list" %} open{% endif %}>
|
||||||
<summary class="flex cursor-pointer list-none items-center justify-between gap-4 py-3 text-lg font-medium marker:content-none [&::-webkit-details-marker]:hidden" style="font-family:var(--font-heading, 'Cinzel', 'Italiana', Georgia, serif)">
|
<summary class="flex cursor-pointer list-none items-center justify-between gap-4 py-3 text-lg font-medium marker:content-none [&::-webkit-details-marker]:hidden" style="font-family:var(--font-heading, 'Cinzel', 'Italiana', Georgia, serif)">
|
||||||
<span>{{ item.question }}</span>
|
<span>{{ item.question }}</span>
|
||||||
<svg width="20" height="20" class="h-5 w-5 shrink-0 text-primary transition-transform duration-200 group-open:rotate-180" aria-hidden="true"><use href="/icons/lucide.svg#chevron-down"></use></svg>
|
<svg class="h-5 w-5 shrink-0 text-primary transition-transform duration-200 group-open:rotate-180" aria-hidden="true"><use href="/icons/lucide.svg#chevron-down"></use></svg>
|
||||||
</summary>
|
</summary>
|
||||||
<div class="pb-4 text-muted-foreground [&_a]:text-primary [&_a]:underline" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ item.answer|safe }}</div>
|
<div class="pb-4 text-muted-foreground [&_a]:text-primary [&_a]:underline" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ item.answer|safe }}</div>
|
||||||
</details>
|
</details>
|
||||||
|
|||||||
@ -6,10 +6,10 @@
|
|||||||
<div class="mt-12 grid grid-cols-1 gap-6 sm:grid-cols-2 {% if columns == 2 %}lg:grid-cols-2{% elif columns == 4 %}lg:grid-cols-4{% else %}lg:grid-cols-3{% endif %}">
|
<div class="mt-12 grid grid-cols-1 gap-6 sm:grid-cols-2 {% if columns == 2 %}lg:grid-cols-2{% elif columns == 4 %}lg:grid-cols-4{% else %}lg:grid-cols-3{% endif %}">
|
||||||
{% for item in items %}
|
{% for item in items %}
|
||||||
<div class="{% if layout == "card" %}deco-frame bg-card p-6 text-card-foreground deco-foil transition-shadow{% elif layout == "centered" %}text-center{% endif %}">
|
<div class="{% if layout == "card" %}deco-frame bg-card p-6 text-card-foreground deco-foil transition-shadow{% elif layout == "centered" %}text-center{% endif %}">
|
||||||
{% if item.icon %}<div class="mb-4 inline-flex h-11 w-11 items-center justify-center border border-[hsl(var(--primary)/0.35)] bg-primary/10 text-primary{% if layout == "centered" %} mx-auto{% endif %}"><svg width="24" height="24" class="h-6 w-6" aria-hidden="true"><use href="/icons/{{ item.icon|split:":"|first }}.svg#{{ item.icon|split:":"|last }}"></use></svg></div>{% endif %}
|
{% if item.icon %}<div class="mb-4 inline-flex h-11 w-11 items-center justify-center border border-[hsl(var(--primary)/0.35)] bg-primary/10 text-primary{% if layout == "centered" %} mx-auto{% endif %}"><svg class="h-6 w-6" aria-hidden="true"><use href="/icons/{{ item.icon|split:":"|first }}.svg#{{ item.icon|split:":"|last }}"></use></svg></div>{% endif %}
|
||||||
<h3 class="deco-caps text-lg text-foreground" style="font-family:var(--font-heading, 'Cinzel', 'Italiana', Georgia, serif)">{% if item.linkUrl %}<a href="{{ item.linkUrl }}" class="transition-colors hover:text-primary">{{ item.title }}</a>{% else %}{{ item.title }}{% endif %}</h3>
|
<h3 class="deco-caps text-lg text-foreground" style="font-family:var(--font-heading, 'Cinzel', 'Italiana', Georgia, serif)">{% if item.linkUrl %}<a href="{{ item.linkUrl }}" class="transition-colors hover:text-primary">{{ item.title }}</a>{% else %}{{ item.title }}{% endif %}</h3>
|
||||||
{% if item.text %}<p class="mt-2 text-muted-foreground" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ item.text }}</p>{% endif %}
|
{% if item.text %}<p class="mt-2 text-muted-foreground" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ item.text }}</p>{% endif %}
|
||||||
{% if item.linkUrl and item.linkLabel %}<a href="{{ item.linkUrl }}" class="deco-link mt-3 inline-flex items-center gap-1 text-sm">{{ item.linkLabel }}<svg width="16" height="16" class="h-4 w-4" aria-hidden="true"><use href="/icons/lucide.svg#arrow-right"></use></svg></a>{% endif %}
|
{% if item.linkUrl and item.linkLabel %}<a href="{{ item.linkUrl }}" class="deco-link mt-3 inline-flex items-center gap-1 text-sm">{{ item.linkLabel }}<svg class="h-4 w-4" aria-hidden="true"><use href="/icons/lucide.svg#arrow-right"></use></svg></a>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
{# hero override — folds in the old marquee_hero: sunburst overlay + stepped ziggurat framing, gold-foil Cinzel headline. Structure/fields/{% img %} calls preserved from builtin. Styled-text fields accept {text,color} or a bare string. #}
|
{# hero override — folds in the old marquee_hero: sunburst overlay + stepped ziggurat framing, gold-foil Cinzel headline. Structure/fields/{% img %} calls preserved from builtin. Styled-text fields accept {text,color} or a bare string. #}
|
||||||
{% set eyebrowText = eyebrow|get:"text"|default:eyebrow %}
|
{% set eyebrowText = eyebrow.text|default:eyebrow %}
|
||||||
{% set headlineText = headline|get:"text"|default:headline %}
|
{% set headlineText = headline.text|default:headline %}
|
||||||
{% set subText = subheadline|get:"text"|default:subheadline %}
|
{% set subText = subheadline.text|default:subheadline %}
|
||||||
{% set descText = description|get:"text"|default:description %}
|
{% set descText = description.text|default:description %}
|
||||||
{% set pText = ctaPrimary.text %}
|
{% set pText = ctaPrimary.text %}
|
||||||
{% set pUrl = ctaPrimary.url %}
|
{% set pUrl = ctaPrimary.url %}
|
||||||
{% set sText = ctaSecondary.text %}
|
{% set sText = ctaSecondary.text %}
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
</p>
|
</p>
|
||||||
{% if tier.description %}<p class="mt-3 text-center text-sm text-muted-foreground" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ tier.description }}</p>{% endif %}
|
{% if tier.description %}<p class="mt-3 text-center text-sm text-muted-foreground" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ tier.description }}</p>{% endif %}
|
||||||
{% if tier.features %}<ul class="mt-6 flex-1 space-y-3 text-sm">
|
{% if tier.features %}<ul class="mt-6 flex-1 space-y-3 text-sm">
|
||||||
{% for feature in tier.features %}<li class="flex items-start gap-2"><svg width="16" height="16" class="mt-0.5 h-4 w-4 shrink-0 text-primary" aria-hidden="true"><use href="/icons/lucide.svg#check"></use></svg><span>{{ feature }}</span></li>{% endfor %}
|
{% for feature in tier.features %}<li class="flex items-start gap-2"><svg class="mt-0.5 h-4 w-4 shrink-0 text-primary" aria-hidden="true"><use href="/icons/lucide.svg#check"></use></svg><span>{{ feature }}</span></li>{% endfor %}
|
||||||
</ul>{% endif %}
|
</ul>{% endif %}
|
||||||
{% if tier.ctaUrl and tier.ctaLabel %}{% if tier.highlighted %}<a href="{{ tier.ctaUrl }}" class="deco-pill mt-8 inline-flex w-full items-center justify-center">{{ tier.ctaLabel }}</a>{% else %}<a href="{{ tier.ctaUrl }}" class="deco-link mt-8 inline-flex w-full items-center justify-center">{{ tier.ctaLabel }}</a>{% endif %}{% endif %}
|
{% if tier.ctaUrl and tier.ctaLabel %}{% if tier.highlighted %}<a href="{{ tier.ctaUrl }}" class="deco-pill mt-8 inline-flex w-full items-center justify-center">{{ tier.ctaLabel }}</a>{% else %}<a href="{{ tier.ctaUrl }}" class="deco-link mt-8 inline-flex w-full items-center justify-center">{{ tier.ctaLabel }}</a>{% endif %}{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
{# quote override — supper-club press pull-quote: large italic Cormorant flanked by gold sunburst crests. Fields mirror builtin: quote, style, align, cite, attribution, role. #}
|
{# quote override — supper-club press pull-quote: large italic Cormorant flanked by gold sunburst crests. Fields mirror builtin: quote, style, align, cite, attribution, role. #}
|
||||||
{% with style=style|default:"block" align=align|default:"left" %}
|
{% with style=style|default:"block" align=align|default:"left" %}
|
||||||
<figure data-block-override="art-deco:quote" class="bn-quote my-10 {% if style == "inline-card" %}deco-frame bg-card p-8 md:p-10{% elif style == "pull" %}border-l-2 border-[hsl(var(--primary))] pl-6 md:pl-8 py-2{% else %}px-2 py-1{% endif %}{% if align == "center" %} text-center{% endif %}{% if class %} {{ class }}{% endif %}">
|
<figure data-block-override="art-deco:quote" class="bn-quote my-10 {% if style == "inline-card" %}deco-frame bg-card p-8 md:p-10{% elif style == "pull" %}border-l-2 border-[hsl(var(--primary))] pl-6 md:pl-8 py-2{% else %}px-2 py-1{% endif %}{% if align == "center" %} text-center{% endif %}{% if class %} {{ class }}{% endif %}">
|
||||||
{% if align == "center" %}<div class="mx-auto mb-5 h-6 w-40 deco-sunburst" aria-hidden="true"></div>{% endif %}
|
{% if align == "center" %}<div class="mb-5 h-6 deco-scallop" aria-hidden="true"></div>{% endif %}
|
||||||
<blockquote{% if cite %} cite="{{ cite }}"{% endif %} class="{% if style == "pull" %}text-2xl md:text-3xl leading-snug{% else %}text-xl md:text-2xl leading-relaxed{% endif %} italic" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif);color:hsl(var(--foreground));">{{ quote|safe }}</blockquote>
|
<blockquote{% if cite %} cite="{{ cite }}"{% endif %} class="{% if style == "pull" %}text-2xl md:text-3xl leading-snug{% else %}text-xl md:text-2xl leading-relaxed{% endif %} italic" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif);color:hsl(var(--foreground));">{{ quote|safe }}</blockquote>
|
||||||
{% if attribution or role or cite %}<figcaption class="mt-4 text-sm{% if align == "center" %} flex flex-col items-center{% endif %}" style="color:hsl(var(--muted-foreground));">{% if attribution %}<span class="deco-caps text-xs" style="color:hsl(var(--primary));">{{ attribution }}</span>{% endif %}{% if role %}<span class="{% if attribution %}block {% endif %}italic">{{ role }}</span>{% endif %}{% if cite %}<a href="{{ cite }}" class="deco-link {% if attribution or role %}mt-1 {% endif %}inline-block text-xs">Source</a>{% endif %}</figcaption>{% endif %}
|
{% if attribution or role or cite %}<figcaption class="mt-4 text-sm{% if align == "center" %} flex flex-col items-center{% endif %}" style="color:hsl(var(--muted-foreground));">{% if attribution %}<span class="deco-caps text-xs" style="color:hsl(var(--primary));">{{ attribution }}</span>{% endif %}{% if role %}<span class="{% if attribution %}block {% endif %}italic">{{ role }}</span>{% endif %}{% if cite %}<a href="{{ cite }}" class="deco-link {% if attribution or role %}mt-1 {% endif %}inline-block text-xs">Source</a>{% endif %}</figcaption>{% endif %}
|
||||||
</figure>
|
</figure>
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
{% if eyebrow %}<div class="mb-3 flex items-center gap-4"><span class="deco-rule w-12"></span><p class="deco-caps text-xs text-primary">{{ eyebrow }}</p></div>{% endif %}
|
{% if eyebrow %}<div class="mb-3 flex items-center gap-4"><span class="deco-rule w-12"></span><p class="deco-caps text-xs text-primary">{{ eyebrow }}</p></div>{% endif %}
|
||||||
{% if heading %}<h2 class="deco-caps deco-underline mt-2 text-3xl text-foreground md:text-4xl" style="font-family:var(--font-heading, 'Cinzel', 'Italiana', Georgia, serif)">{{ heading }}</h2>{% endif %}
|
{% if heading %}<h2 class="deco-caps deco-underline mt-2 text-3xl text-foreground md:text-4xl" style="font-family:var(--font-heading, 'Cinzel', 'Italiana', Georgia, serif)">{{ heading }}</h2>{% endif %}
|
||||||
{% if body %}<div class="mt-4 space-y-4 text-lg text-muted-foreground [&_a]:text-primary [&_a]:underline [&_strong]:text-foreground" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ body|safe }}</div>{% endif %}
|
{% if body %}<div class="mt-4 space-y-4 text-lg text-muted-foreground [&_a]:text-primary [&_a]:underline [&_strong]:text-foreground" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ body|safe }}</div>{% endif %}
|
||||||
{% if ctaUrl and ctaLabel %}<a href="{{ ctaUrl }}" class="deco-pill mt-6 inline-flex items-center gap-2">{{ ctaLabel }}<svg width="16" height="16" class="h-4 w-4" aria-hidden="true"><use href="/icons/lucide.svg#arrow-right"></use></svg></a>{% endif %}
|
{% if ctaUrl and ctaLabel %}<a href="{{ ctaUrl }}" class="deco-pill mt-6 inline-flex items-center gap-2">{{ ctaLabel }}<svg class="h-4 w-4" aria-hidden="true"><use href="/icons/lucide.svg#arrow-right"></use></svg></a>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="{% if mediaPosition == "left" %}md:order-1{% else %}md:order-2{% endif %}">
|
<div class="{% if mediaPosition == "left" %}md:order-1{% else %}md:order-2{% endif %}">
|
||||||
{% if media %}<div class="deco-step overflow-hidden">{% img media alt=mediaAlt class="w-full h-auto object-cover" %}</div>{% endif %}
|
{% if media %}<div class="deco-step overflow-hidden">{% img media alt=mediaAlt class="w-full h-auto object-cover" %}</div>{% endif %}
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
{% if title %}<h3 class="deco-caps deco-underline {% if compact %}px-2 mb-4 text-xs text-primary{% else %}px-3 mb-5 text-sm text-foreground{% endif %}" style="font-family:var(--font-heading, "Cinzel", "Italiana", Georgia, serif)">{{ title }}</h3>{% endif %}
|
{% if title %}<h3 class="deco-caps deco-underline {% if compact %}px-2 mb-4 text-xs text-primary{% else %}px-3 mb-5 text-sm text-foreground{% endif %}" style="font-family:var(--font-heading, "Cinzel", "Italiana", Georgia, serif)">{{ title }}</h3>{% endif %}
|
||||||
<ul class="{% if compact %}space-y-0.5{% else %}space-y-1{% endif %}">
|
<ul class="{% if compact %}space-y-0.5{% else %}space-y-1{% endif %}">
|
||||||
{% for item in menu.items %}
|
{% for item in menu.items %}
|
||||||
<li><a href="{{ item.url|default:'#' }}"{% if item.open_in_new_tab %} target="_blank" rel="noopener"{% endif %}{% if item.title %} title="{{ item.title }}"{% endif %} data-bn-sidebar-link class="deco-caps flex items-center rounded-none text-sm text-muted-foreground transition-colors hover:text-primary hover:bg-accent {% if compact %}px-2 py-1.5{% else %}px-3 py-2{% endif %} {{ item.css_class }}">{% if item.icon %}<svg width="16" height="16" class="mr-2 h-4 w-4 text-primary" aria-hidden="true"><use href="/icons/{{ item.icon|split:":"|first }}.svg#{{ item.icon|split:":"|last }}"></use></svg>{% endif %}{{ item.label }}</a></li>
|
<li><a href="{{ item.url|default:'#' }}"{% if item.open_in_new_tab %} target="_blank" rel="noopener"{% endif %}{% if item.title %} title="{{ item.title }}"{% endif %} data-bn-sidebar-link class="deco-caps flex items-center rounded-none text-sm text-muted-foreground transition-colors hover:text-primary hover:bg-accent {% if compact %}px-2 py-1.5{% else %}px-3 py-2{% endif %} {{ item.css_class }}">{% if item.icon %}<svg class="mr-2 h-4 w-4 text-primary" aria-hidden="true"><use href="/icons/{{ item.icon|split:":"|first }}.svg#{{ item.icon|split:":"|last }}"></use></svg>{% endif %}{{ item.label }}</a></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
{% for link in links %}{% if link.url %}
|
{% for link in links %}{% if link.url %}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ link.url }}" target="_blank" rel="noopener noreferrer" aria-label="{{ link.label|default:link.network }}" class="deco-foil inline-flex items-center gap-2 rounded-none border border-[hsl(var(--primary)/0.45)] text-foreground transition-colors hover:bg-primary/10 hover:text-primary {% if style == "stack" %}w-full px-4 py-2.5{% else %}p-2.5{% endif %}">
|
<a href="{{ link.url }}" target="_blank" rel="noopener noreferrer" aria-label="{{ link.label|default:link.network }}" class="deco-foil inline-flex items-center gap-2 rounded-none border border-[hsl(var(--primary)/0.45)] text-foreground transition-colors hover:bg-primary/10 hover:text-primary {% if style == "stack" %}w-full px-4 py-2.5{% else %}p-2.5{% endif %}">
|
||||||
{% if link.network %}<svg width="20" height="20" class="h-5 w-5 text-primary" aria-hidden="true"><use href="/icons/{{ link.network|split:":"|first }}.svg#{{ link.network|split:":"|last }}"></use></svg>{% endif %}
|
{% if link.network %}<svg class="h-5 w-5 text-primary" aria-hidden="true"><use href="/icons/{{ link.network|split:":"|first }}.svg#{{ link.network|split:":"|last }}"></use></svg>{% endif %}
|
||||||
{% if style == "stack" and link.label %}<span class="deco-caps text-xs tracking-[0.14em]">{{ link.label }}</span>{% endif %}
|
{% if style == "stack" and link.label %}<span class="deco-caps text-xs tracking-[0.14em]">{{ link.label }}</span>{% endif %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
{% if member.role %}<p class="deco-caps text-xs text-primary">{{ member.role }}</p>{% endif %}
|
{% if member.role %}<p class="deco-caps text-xs text-primary">{{ member.role }}</p>{% endif %}
|
||||||
{% if member.bio %}<p class="mt-2 text-sm text-muted-foreground" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ member.bio }}</p>{% endif %}
|
{% if member.bio %}<p class="mt-2 text-sm text-muted-foreground" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{{ member.bio }}</p>{% endif %}
|
||||||
{% if member.socials %}<div class="mt-3 flex gap-3 {% if layout != "list" %}justify-center{% endif %}">
|
{% if member.socials %}<div class="mt-3 flex gap-3 {% if layout != "list" %}justify-center{% endif %}">
|
||||||
{% for social in member.socials %}{% if social.url %}<a href="{{ social.url }}" class="text-muted-foreground transition-colors hover:text-primary" aria-label="Social link"><svg width="20" height="20" class="h-5 w-5" aria-hidden="true"><use href="/icons/{{ social.icon|split:":"|first }}.svg#{{ social.icon|split:":"|last }}"></use></svg></a>{% endif %}{% endfor %}
|
{% for social in member.socials %}{% if social.url %}<a href="{{ social.url }}" class="text-muted-foreground transition-colors hover:text-primary" aria-label="Social link"><svg class="h-5 w-5" aria-hidden="true"><use href="/icons/{{ social.icon|split:":"|first }}.svg#{{ social.icon|split:":"|last }}"></use></svg></a>{% endif %}{% endfor %}
|
||||||
</div>{% endif %}
|
</div>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -5,11 +5,11 @@
|
|||||||
{% for q in quotes %}
|
{% for q in quotes %}
|
||||||
<figure class="deco-frame flex flex-col bg-card p-6 text-card-foreground{% if layout == "carousel" %} min-w-[18rem] max-w-sm shrink-0 snap-start{% endif %}">
|
<figure class="deco-frame flex flex-col bg-card p-6 text-card-foreground{% if layout == "carousel" %} min-w-[18rem] max-w-sm shrink-0 snap-start{% endif %}">
|
||||||
{% if q.rating %}<div class="mb-3 flex justify-center gap-0.5" aria-label="Rated {{ q.rating }} out of 5">
|
{% if q.rating %}<div class="mb-3 flex justify-center gap-0.5" aria-label="Rated {{ q.rating }} out of 5">
|
||||||
<svg width="16" height="16" class="h-4 w-4 {% if q.rating >= 1 %}text-primary{% else %}text-muted-foreground/30{% endif %}" aria-hidden="true"><use href="/icons/lucide.svg#star"></use></svg>
|
<svg class="h-4 w-4 {% if q.rating >= 1 %}text-primary{% else %}text-muted-foreground/30{% endif %}" aria-hidden="true"><use href="/icons/lucide.svg#star"></use></svg>
|
||||||
<svg width="16" height="16" class="h-4 w-4 {% if q.rating >= 2 %}text-primary{% else %}text-muted-foreground/30{% endif %}" aria-hidden="true"><use href="/icons/lucide.svg#star"></use></svg>
|
<svg class="h-4 w-4 {% if q.rating >= 2 %}text-primary{% else %}text-muted-foreground/30{% endif %}" aria-hidden="true"><use href="/icons/lucide.svg#star"></use></svg>
|
||||||
<svg width="16" height="16" class="h-4 w-4 {% if q.rating >= 3 %}text-primary{% else %}text-muted-foreground/30{% endif %}" aria-hidden="true"><use href="/icons/lucide.svg#star"></use></svg>
|
<svg class="h-4 w-4 {% if q.rating >= 3 %}text-primary{% else %}text-muted-foreground/30{% endif %}" aria-hidden="true"><use href="/icons/lucide.svg#star"></use></svg>
|
||||||
<svg width="16" height="16" class="h-4 w-4 {% if q.rating >= 4 %}text-primary{% else %}text-muted-foreground/30{% endif %}" aria-hidden="true"><use href="/icons/lucide.svg#star"></use></svg>
|
<svg class="h-4 w-4 {% if q.rating >= 4 %}text-primary{% else %}text-muted-foreground/30{% endif %}" aria-hidden="true"><use href="/icons/lucide.svg#star"></use></svg>
|
||||||
<svg width="16" height="16" class="h-4 w-4 {% if q.rating >= 5 %}text-primary{% else %}text-muted-foreground/30{% endif %}" aria-hidden="true"><use href="/icons/lucide.svg#star"></use></svg>
|
<svg class="h-4 w-4 {% if q.rating >= 5 %}text-primary{% else %}text-muted-foreground/30{% endif %}" aria-hidden="true"><use href="/icons/lucide.svg#star"></use></svg>
|
||||||
</div>{% endif %}
|
</div>{% endif %}
|
||||||
<blockquote class="flex-1 text-center text-lg leading-relaxed" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{% if q.quote %}“{{ q.quote }}”{% endif %}</blockquote>
|
<blockquote class="flex-1 text-center text-lg leading-relaxed" style="font-family:var(--font-body, 'Cormorant Garamond', 'Cormorant', Georgia, serif)">{% if q.quote %}“{{ q.quote }}”{% endif %}</blockquote>
|
||||||
<div class="mx-auto my-4 flex items-center justify-center"><span class="deco-rule w-16"></span></div>
|
<div class="mx-auto my-4 flex items-center justify-center"><span class="deco-rule w-16"></span></div>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
{% for step in steps %}
|
{% for step in steps %}
|
||||||
<li class="{% if orientation == "horizontal" %}text-center{% else %}relative pl-14{% endif %}">
|
<li class="{% if orientation == "horizontal" %}text-center{% else %}relative pl-14{% endif %}">
|
||||||
<span class="deco-caps flex h-8 w-8 items-center justify-center border border-primary bg-primary text-sm text-primary-foreground {% if orientation == "horizontal" %}mx-auto{% else %}absolute left-0 top-0 ring-4 ring-background{% endif %}">
|
<span class="deco-caps flex h-8 w-8 items-center justify-center border border-primary bg-primary text-sm text-primary-foreground {% if orientation == "horizontal" %}mx-auto{% else %}absolute left-0 top-0 ring-4 ring-background{% endif %}">
|
||||||
{% if marker == "numbered" %}{{ forloop.counter }}{% elif marker == "dot" %}<span class="h-2 w-2 bg-primary-foreground"></span>{% else %}<svg width="16" height="16" class="h-4 w-4" aria-hidden="true"><use href="/icons/lucide.svg#flag"></use></svg>{% endif %}
|
{% if marker == "numbered" %}{{ forloop.counter }}{% elif marker == "dot" %}<span class="h-2 w-2 bg-primary-foreground"></span>{% else %}<svg class="h-4 w-4" aria-hidden="true"><use href="/icons/lucide.svg#flag"></use></svg>{% endif %}
|
||||||
</span>
|
</span>
|
||||||
<div class="{% if orientation == "horizontal" %}mt-4{% else %}pt-1{% endif %}">
|
<div class="{% if orientation == "horizontal" %}mt-4{% else %}pt-1{% endif %}">
|
||||||
{% if step.label %}<p class="deco-caps text-xs text-primary">{{ step.label }}</p>{% endif %}
|
{% if step.label %}<p class="deco-caps text-xs text-primary">{{ step.label }}</p>{% endif %}
|
||||||
|
|||||||