@cogenta/theme-restaurant 0.3.2

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 (117) hide show
  1. package/LICENSE +373 -0
  2. package/dist/src/index.d.ts +22 -0
  3. package/dist/src/index.d.ts.map +1 -0
  4. package/dist/src/index.js +25 -0
  5. package/dist/src/index.js.map +1 -0
  6. package/dist/src/render/blocks/accordion.d.ts +4 -0
  7. package/dist/src/render/blocks/accordion.d.ts.map +1 -0
  8. package/dist/src/render/blocks/accordion.js +21 -0
  9. package/dist/src/render/blocks/accordion.js.map +1 -0
  10. package/dist/src/render/blocks/collection-list.d.ts +13 -0
  11. package/dist/src/render/blocks/collection-list.d.ts.map +1 -0
  12. package/dist/src/render/blocks/collection-list.js +109 -0
  13. package/dist/src/render/blocks/collection-list.js.map +1 -0
  14. package/dist/src/render/blocks/cta.d.ts +10 -0
  15. package/dist/src/render/blocks/cta.d.ts.map +1 -0
  16. package/dist/src/render/blocks/cta.js +13 -0
  17. package/dist/src/render/blocks/cta.js.map +1 -0
  18. package/dist/src/render/blocks/embed.d.ts +4 -0
  19. package/dist/src/render/blocks/embed.d.ts.map +1 -0
  20. package/dist/src/render/blocks/embed.js +82 -0
  21. package/dist/src/render/blocks/embed.js.map +1 -0
  22. package/dist/src/render/blocks/faq.d.ts +4 -0
  23. package/dist/src/render/blocks/faq.d.ts.map +1 -0
  24. package/dist/src/render/blocks/faq.js +17 -0
  25. package/dist/src/render/blocks/faq.js.map +1 -0
  26. package/dist/src/render/blocks/feature-grid.d.ts +4 -0
  27. package/dist/src/render/blocks/feature-grid.d.ts.map +1 -0
  28. package/dist/src/render/blocks/feature-grid.js +24 -0
  29. package/dist/src/render/blocks/feature-grid.js.map +1 -0
  30. package/dist/src/render/blocks/gallery.d.ts +11 -0
  31. package/dist/src/render/blocks/gallery.d.ts.map +1 -0
  32. package/dist/src/render/blocks/gallery.js +20 -0
  33. package/dist/src/render/blocks/gallery.js.map +1 -0
  34. package/dist/src/render/blocks/hero.d.ts +16 -0
  35. package/dist/src/render/blocks/hero.d.ts.map +1 -0
  36. package/dist/src/render/blocks/hero.js +32 -0
  37. package/dist/src/render/blocks/hero.js.map +1 -0
  38. package/dist/src/render/blocks/logo-strip.d.ts +4 -0
  39. package/dist/src/render/blocks/logo-strip.d.ts.map +1 -0
  40. package/dist/src/render/blocks/logo-strip.js +16 -0
  41. package/dist/src/render/blocks/logo-strip.js.map +1 -0
  42. package/dist/src/render/blocks/logos.d.ts +4 -0
  43. package/dist/src/render/blocks/logos.d.ts.map +1 -0
  44. package/dist/src/render/blocks/logos.js +23 -0
  45. package/dist/src/render/blocks/logos.js.map +1 -0
  46. package/dist/src/render/blocks/media-figure.d.ts +9 -0
  47. package/dist/src/render/blocks/media-figure.d.ts.map +1 -0
  48. package/dist/src/render/blocks/media-figure.js +24 -0
  49. package/dist/src/render/blocks/media-figure.js.map +1 -0
  50. package/dist/src/render/blocks/pricing-table.d.ts +4 -0
  51. package/dist/src/render/blocks/pricing-table.d.ts.map +1 -0
  52. package/dist/src/render/blocks/pricing-table.js +30 -0
  53. package/dist/src/render/blocks/pricing-table.js.map +1 -0
  54. package/dist/src/render/blocks/prose.d.ts +13 -0
  55. package/dist/src/render/blocks/prose.d.ts.map +1 -0
  56. package/dist/src/render/blocks/prose.js +14 -0
  57. package/dist/src/render/blocks/prose.js.map +1 -0
  58. package/dist/src/render/blocks/quote.d.ts +8 -0
  59. package/dist/src/render/blocks/quote.d.ts.map +1 -0
  60. package/dist/src/render/blocks/quote.js +21 -0
  61. package/dist/src/render/blocks/quote.js.map +1 -0
  62. package/dist/src/render/blocks/stat-counter.d.ts +4 -0
  63. package/dist/src/render/blocks/stat-counter.d.ts.map +1 -0
  64. package/dist/src/render/blocks/stat-counter.js +15 -0
  65. package/dist/src/render/blocks/stat-counter.js.map +1 -0
  66. package/dist/src/render/blocks/stats.d.ts +4 -0
  67. package/dist/src/render/blocks/stats.d.ts.map +1 -0
  68. package/dist/src/render/blocks/stats.js +21 -0
  69. package/dist/src/render/blocks/stats.js.map +1 -0
  70. package/dist/src/render/blocks/testimonial.d.ts +17 -0
  71. package/dist/src/render/blocks/testimonial.d.ts.map +1 -0
  72. package/dist/src/render/blocks/testimonial.js +26 -0
  73. package/dist/src/render/blocks/testimonial.js.map +1 -0
  74. package/dist/src/render/chrome.d.ts +3 -0
  75. package/dist/src/render/chrome.d.ts.map +1 -0
  76. package/dist/src/render/chrome.js +108 -0
  77. package/dist/src/render/chrome.js.map +1 -0
  78. package/dist/src/render/render-block.d.ts +6 -0
  79. package/dist/src/render/render-block.d.ts.map +1 -0
  80. package/dist/src/render/render-block.js +118 -0
  81. package/dist/src/render/render-block.js.map +1 -0
  82. package/dist/src/render/term-archive.d.ts +10 -0
  83. package/dist/src/render/term-archive.d.ts.map +1 -0
  84. package/dist/src/render/term-archive.js +32 -0
  85. package/dist/src/render/term-archive.js.map +1 -0
  86. package/dist/theme.config.d.ts +11 -0
  87. package/dist/theme.config.d.ts.map +1 -0
  88. package/dist/theme.config.js +41 -0
  89. package/dist/theme.config.js.map +1 -0
  90. package/package.json +57 -0
  91. package/src/index.ts +24 -0
  92. package/src/render/blocks/accordion.ts +57 -0
  93. package/src/render/blocks/collection-list.ts +189 -0
  94. package/src/render/blocks/cta.ts +31 -0
  95. package/src/render/blocks/embed.ts +105 -0
  96. package/src/render/blocks/faq.ts +53 -0
  97. package/src/render/blocks/feature-grid.ts +61 -0
  98. package/src/render/blocks/gallery.ts +40 -0
  99. package/src/render/blocks/hero.ts +58 -0
  100. package/src/render/blocks/logo-strip.ts +35 -0
  101. package/src/render/blocks/logos.ts +53 -0
  102. package/src/render/blocks/media-figure.ts +39 -0
  103. package/src/render/blocks/pricing-table.ts +74 -0
  104. package/src/render/blocks/prose.ts +19 -0
  105. package/src/render/blocks/quote.ts +38 -0
  106. package/src/render/blocks/stat-counter.ts +37 -0
  107. package/src/render/blocks/stats.ts +48 -0
  108. package/src/render/blocks/testimonial.ts +42 -0
  109. package/src/render/chrome.ts +141 -0
  110. package/src/render/render-block.ts +156 -0
  111. package/src/render/term-archive.ts +78 -0
  112. package/src/styles/archive.css +84 -0
  113. package/src/styles/base.css +923 -0
  114. package/src/styles/blocks.css +975 -0
  115. package/src/styles/theme.css +36 -0
  116. package/src/styles/tokens.css +320 -0
  117. package/tokens.json +36 -0
@@ -0,0 +1,923 @@
1
+ /*
2
+ * Document, accessibility floor, page frame, chrome (header/footer/nav, the
3
+ * CSS-only mobile menu) and the one control the theme ships (an action
4
+ * link). Everything here reads the design system from `tokens.css`; nothing
5
+ * here reads a `--cogenta-*` token directly.
6
+ */
7
+
8
+ /* --------------------------------------------------------------------------
9
+ Document
10
+ -------------------------------------------------------------------------- */
11
+
12
+ *,
13
+ *::before,
14
+ *::after {
15
+ box-sizing: border-box;
16
+ }
17
+
18
+ body {
19
+ margin: 0;
20
+ background: var(--cg-canvas);
21
+ color: var(--cg-ink);
22
+ font-family: var(--cogenta-font-sans);
23
+ font-size: var(--cg-text-md);
24
+ line-height: var(--cg-leading-normal);
25
+ font-kerning: normal;
26
+ font-variant-ligatures: common-ligatures;
27
+ text-underline-offset: 0.15em;
28
+ text-decoration-thickness: from-font;
29
+ -webkit-text-size-adjust: 100%;
30
+ }
31
+
32
+ /* The display serif, everywhere a heading appears — light weight, generous
33
+ tracking at large sizes, the opposite instinct from a grotesque display
34
+ face. Every custom class below inherits this rather than restating it. */
35
+ h1,
36
+ h2,
37
+ h3,
38
+ h4,
39
+ h5,
40
+ h6 {
41
+ margin: 0;
42
+ font-family: var(--cogenta-font-serif);
43
+ font-weight: var(--cg-weight-light);
44
+ line-height: var(--cg-leading-tight);
45
+ letter-spacing: var(--cg-tracking-tight);
46
+ text-wrap: balance;
47
+ }
48
+
49
+ /* The small-caps, letter-spaced label this theme uses for every eyebrow/
50
+ kicker — one utility rather than five near-identical declarations. */
51
+ .cg-kicker {
52
+ display: inline-block;
53
+ font-family: var(--cogenta-font-sans);
54
+ font-size: var(--cg-text-xs);
55
+ font-weight: var(--cg-weight-medium);
56
+ letter-spacing: var(--cg-tracking-caps);
57
+ text-transform: uppercase;
58
+ }
59
+
60
+ ::selection {
61
+ background: var(--cg-accent-soft);
62
+ color: var(--cg-accent-soft-fg);
63
+ }
64
+
65
+ img,
66
+ video,
67
+ iframe {
68
+ max-width: 100%;
69
+ height: auto;
70
+ }
71
+
72
+ img {
73
+ display: block;
74
+ object-fit: cover;
75
+ }
76
+
77
+ :where(a) {
78
+ color: var(--cg-accent);
79
+ text-decoration-color: color-mix(in oklab, var(--cg-accent) 40%, transparent);
80
+ transition:
81
+ color var(--cg-duration-fast) var(--cg-ease),
82
+ text-decoration-color var(--cg-duration-fast) var(--cg-ease);
83
+ }
84
+
85
+ :where(a:hover) {
86
+ color: var(--cg-accent-hover);
87
+ text-decoration-color: currentColor;
88
+ }
89
+
90
+ :where(hr) {
91
+ block-size: 1px;
92
+ border: 0;
93
+ margin-block: var(--cg-s10);
94
+ background: var(--cg-line);
95
+ }
96
+
97
+ /* --------------------------------------------------------------------------
98
+ Focus, targets, motion
99
+ -------------------------------------------------------------------------- */
100
+
101
+ :where(a, button, summary, [tabindex]):focus-visible {
102
+ outline: 2px solid var(--cg-accent);
103
+ outline-offset: 3px;
104
+ border-radius: var(--cg-radius-xs);
105
+ }
106
+
107
+ :where(
108
+ .cg-action,
109
+ .cg-faq__question,
110
+ .cg-hours__question,
111
+ .cg-press__link,
112
+ .cg-nav__cta,
113
+ .cg-mobile-nav__toggle
114
+ ) {
115
+ min-block-size: 44px;
116
+ min-inline-size: 44px;
117
+ }
118
+
119
+ @supports (animation-timeline: view()) {
120
+ @media (prefers-reduced-motion: no-preference) {
121
+ @keyframes cg-settle {
122
+ from {
123
+ opacity: 0;
124
+ transform: translateY(var(--cg-s3));
125
+ }
126
+
127
+ to {
128
+ opacity: 1;
129
+ transform: none;
130
+ }
131
+ }
132
+
133
+ [data-block] {
134
+ animation: cg-settle linear both;
135
+ animation-timeline: view();
136
+ animation-range: entry 0% cover 20%;
137
+ }
138
+ }
139
+ }
140
+
141
+ @media (prefers-reduced-motion: reduce) {
142
+ *,
143
+ *::before,
144
+ *::after {
145
+ animation-duration: 1ms !important;
146
+ animation-iteration-count: 1 !important;
147
+ transition-duration: 1ms !important;
148
+ scroll-behavior: auto !important;
149
+ }
150
+ }
151
+
152
+ .cg-skip-link {
153
+ position: absolute;
154
+ inset-inline-start: var(--cg-s3);
155
+ inset-block-start: calc(var(--cg-s3) * -8);
156
+ z-index: 20;
157
+ padding: var(--cg-s2) var(--cg-s4);
158
+ background: var(--cg-ink);
159
+ color: var(--cg-canvas);
160
+ border-radius: var(--cg-radius-sm);
161
+ font-weight: var(--cg-weight-medium);
162
+ text-decoration: none;
163
+ transition: inset-block-start var(--cg-duration) var(--cg-ease);
164
+ }
165
+
166
+ .cg-skip-link:focus-visible {
167
+ inset-block-start: var(--cg-s3);
168
+ outline-color: var(--cg-canvas);
169
+ }
170
+
171
+ /* --------------------------------------------------------------------------
172
+ Page frame
173
+ -------------------------------------------------------------------------- */
174
+
175
+ .cg-main {
176
+ display: flow-root;
177
+ }
178
+
179
+ [data-block] {
180
+ max-inline-size: var(--cg-page);
181
+ margin-inline: auto;
182
+ margin-block: var(--cg-section-y);
183
+ padding-inline: var(--cg-gutter);
184
+ }
185
+
186
+ /* The hero and the closing CTA are full-bleed by design — the "full-cadre"
187
+ dining-room photograph and the dark closing band both run edge to edge. */
188
+ [data-block="hero"],
189
+ [data-block="cta"] {
190
+ max-inline-size: none;
191
+ padding-inline: 0;
192
+ margin-block: 0;
193
+ }
194
+
195
+ /* --- per-block visual variant (blocks@2.0, RFC 0002) ---------------------- */
196
+
197
+ [data-block][data-variant-background="muted"],
198
+ [data-block][data-variant-background="image"] {
199
+ padding-block: var(--cg-s10);
200
+ }
201
+
202
+ [data-block][data-variant-background="muted"] {
203
+ background: var(--cg-surface-sunken);
204
+ }
205
+
206
+ [data-block][data-variant-background="image"] {
207
+ background: var(--cg-surface-tinted);
208
+ }
209
+
210
+ [data-block][data-variant-spacing="compact"] {
211
+ margin-block: calc(var(--cg-section-y) / 2);
212
+ }
213
+
214
+ [data-block][data-variant-spacing="spacious"] {
215
+ margin-block: calc(var(--cg-section-y) * 1.6);
216
+ }
217
+
218
+ [data-block][data-variant-align="start"] {
219
+ text-align: start;
220
+ }
221
+
222
+ [data-block][data-variant-align="center"] {
223
+ text-align: center;
224
+ }
225
+
226
+ [data-block][data-variant-align="end"] {
227
+ text-align: end;
228
+ }
229
+
230
+ [data-block][data-variant-width="full"] {
231
+ max-inline-size: none;
232
+ padding-inline: 0;
233
+ }
234
+
235
+ .cg-page__title {
236
+ max-inline-size: var(--cg-page);
237
+ margin-inline: auto;
238
+ margin-block: var(--cg-section-y) var(--cg-s6);
239
+ padding-inline: var(--cg-gutter);
240
+ font-size: var(--cg-text-3xl);
241
+ text-align: center;
242
+ }
243
+
244
+ /* `renderEntryHeader` (`@cogenta/theme-kit`, contract D `theme@1.4`) — the
245
+ shared entry furniture a routed collection with no `blocks` field of its
246
+ own (this theme's `menu_item`) still gets: title, excerpt, meta line,
247
+ cover photo, all centred like the rest of this theme's reading pages. */
248
+ .cg-entry-header {
249
+ max-inline-size: var(--cg-page-narrow);
250
+ margin-inline: auto;
251
+ margin-block: var(--cg-section-y) var(--cg-s8);
252
+ padding-inline: var(--cg-gutter);
253
+ text-align: center;
254
+ }
255
+
256
+ .cg-entry-header__terms {
257
+ display: flex;
258
+ flex-wrap: wrap;
259
+ justify-content: center;
260
+ gap: var(--cg-s3);
261
+ margin: 0 0 var(--cg-s3);
262
+ padding: 0;
263
+ list-style: none;
264
+ font-size: var(--cg-text-xs);
265
+ letter-spacing: var(--cg-tracking-caps);
266
+ text-transform: uppercase;
267
+ color: var(--cg-accent);
268
+ }
269
+
270
+ .cg-entry-header__title {
271
+ margin: 0 0 var(--cg-s4);
272
+ font-size: var(--cg-text-3xl);
273
+ }
274
+
275
+ .cg-entry-header__excerpt {
276
+ margin: 0 0 var(--cg-s4);
277
+ font-style: italic;
278
+ color: var(--cg-ink-muted);
279
+ }
280
+
281
+ .cg-entry-header__meta {
282
+ display: flex;
283
+ flex-wrap: wrap;
284
+ justify-content: center;
285
+ gap: var(--cg-s3);
286
+ margin: 0 0 var(--cg-s8);
287
+ font-size: var(--cg-text-sm);
288
+ color: var(--cg-ink-subtle);
289
+ }
290
+
291
+ .cg-entry-header__cover {
292
+ margin: 0;
293
+ border-radius: var(--cg-radius-md);
294
+ overflow: hidden;
295
+ }
296
+
297
+ .cg-entry-header__cover img {
298
+ inline-size: 100%;
299
+ }
300
+
301
+ /* --------------------------------------------------------------------------
302
+ Chrome — header, sticky, centred wordmark, CSS-only mobile menu
303
+ -------------------------------------------------------------------------- */
304
+
305
+ .cg-site-header {
306
+ position: sticky;
307
+ inset-block-start: 0;
308
+ z-index: 10;
309
+ padding: var(--cg-s4) var(--cg-gutter);
310
+ /* Flat and fully opaque, not a frosted-glass blur: a sticky header reads
311
+ as a solid plane sitting above the page, with a hairline marking where
312
+ it ends. */
313
+ background: var(--cg-canvas);
314
+ border-block-end: 1px solid var(--cg-line-soft);
315
+ }
316
+
317
+ .cg-site-header__inner {
318
+ display: flex;
319
+ align-items: center;
320
+ gap: var(--cg-gap);
321
+ max-inline-size: var(--cg-page);
322
+ margin-inline: auto;
323
+ }
324
+
325
+ .cg-site-header__home {
326
+ color: var(--cg-ink);
327
+ font-family: var(--cogenta-font-serif);
328
+ font-weight: var(--cg-weight-regular);
329
+ font-size: var(--cg-text-lg);
330
+ letter-spacing: var(--cg-tracking-wide);
331
+ text-decoration: none;
332
+ margin-inline-end: auto;
333
+ }
334
+
335
+ .cg-site-header__logo {
336
+ display: block;
337
+ block-size: 2.25rem;
338
+ inline-size: auto;
339
+ max-inline-size: 14rem;
340
+ object-fit: contain;
341
+ }
342
+
343
+ .cg-nav {
344
+ display: none;
345
+ }
346
+
347
+ @media (min-width: 56rem) {
348
+ .cg-nav {
349
+ display: flex;
350
+ align-items: center;
351
+ }
352
+ }
353
+
354
+ .cg-nav__items {
355
+ display: flex;
356
+ flex-wrap: wrap;
357
+ align-items: center;
358
+ gap: var(--cg-s6);
359
+ margin: 0;
360
+ padding: 0;
361
+ list-style: none;
362
+ font-size: var(--cg-text-sm);
363
+ letter-spacing: var(--cg-tracking-wide);
364
+ text-transform: uppercase;
365
+ }
366
+
367
+ .cg-nav__items a,
368
+ .cg-nav__items span {
369
+ color: var(--cg-ink-muted);
370
+ text-decoration: none;
371
+ }
372
+
373
+ .cg-nav__items a:hover {
374
+ color: var(--cg-ink);
375
+ }
376
+
377
+ .cg-nav__cta {
378
+ display: none;
379
+ margin-inline-start: var(--cg-s5);
380
+ }
381
+
382
+ @media (min-width: 56rem) {
383
+ .cg-nav__cta {
384
+ display: inline-flex;
385
+ }
386
+ }
387
+
388
+ /* The manual light/dark/system toggle (L26) — a plain circular icon button in
389
+ the header's own register, the same 2.25rem footprint and hairline border
390
+ as the footer's social icons, never a filled control (this theme has none
391
+ in its header). Icon visibility (sun/moon) is swapped by CSS alone, from
392
+ the same `[data-theme]`/`prefers-color-scheme` signals `tokens.css` already
393
+ keys the whole palette on — see `theme-canonical`'s identical comment. */
394
+ .cg-theme-toggle {
395
+ display: inline-flex;
396
+ align-items: center;
397
+ justify-content: center;
398
+ flex-shrink: 0;
399
+ inline-size: 2.25rem;
400
+ block-size: 2.25rem;
401
+ border: 1px solid var(--cg-line-soft);
402
+ border-radius: 50%;
403
+ background: transparent;
404
+ color: var(--cg-ink);
405
+ cursor: pointer;
406
+ transition: border-color var(--cg-duration-fast) var(--cg-ease);
407
+ }
408
+
409
+ .cg-theme-toggle:hover {
410
+ border-color: var(--cg-accent);
411
+ color: var(--cg-accent);
412
+ }
413
+
414
+ .cg-theme-toggle__icon {
415
+ inline-size: 1.1rem;
416
+ block-size: 1.1rem;
417
+ }
418
+
419
+ .cg-theme-toggle__icon--moon {
420
+ display: none;
421
+ }
422
+
423
+ @media (prefers-color-scheme: dark) {
424
+ :where(:root:not([data-theme='light'])) .cg-theme-toggle__icon--sun {
425
+ display: none;
426
+ }
427
+
428
+ :where(:root:not([data-theme='light'])) .cg-theme-toggle__icon--moon {
429
+ display: block;
430
+ }
431
+ }
432
+
433
+ :where(:root[data-theme='dark']) .cg-theme-toggle__icon--sun {
434
+ display: none;
435
+ }
436
+
437
+ :where(:root[data-theme='dark']) .cg-theme-toggle__icon--moon {
438
+ display: block;
439
+ }
440
+
441
+ /* The CSS-only mobile menu: a `<details>`/`<summary>` disclosure, shown only
442
+ below the breakpoint the desktop `.cg-nav` appears at. No JavaScript
443
+ anywhere — expanding, focus and keyboard operation all come from the
444
+ browser's own `<details>` behaviour. */
445
+ .cg-mobile-nav {
446
+ position: relative;
447
+ display: inline-flex;
448
+ }
449
+
450
+ @media (min-width: 56rem) {
451
+ .cg-mobile-nav {
452
+ display: none;
453
+ }
454
+ }
455
+
456
+ .cg-mobile-nav__toggle {
457
+ display: inline-flex;
458
+ align-items: center;
459
+ justify-content: center;
460
+ cursor: pointer;
461
+ color: var(--cg-ink);
462
+ list-style: none;
463
+ }
464
+
465
+ .cg-mobile-nav__toggle::-webkit-details-marker {
466
+ display: none;
467
+ }
468
+
469
+ .cg-mobile-nav__glyph {
470
+ inline-size: 1.5rem;
471
+ block-size: 1.5rem;
472
+ }
473
+
474
+ .cg-mobile-nav__panel {
475
+ position: absolute;
476
+ inset-inline-end: 0;
477
+ inset-block-start: calc(100% + var(--cg-s3));
478
+ z-index: 30;
479
+ min-inline-size: 14rem;
480
+ padding: var(--cg-s4);
481
+ background: var(--cg-surface);
482
+ box-shadow: var(--cogenta-shadow-md), var(--cg-ring);
483
+ border-radius: var(--cg-radius-md);
484
+ }
485
+
486
+ .cg-mobile-nav__items {
487
+ display: flex;
488
+ flex-direction: column;
489
+ gap: var(--cg-s4);
490
+ margin: 0;
491
+ padding: 0;
492
+ list-style: none;
493
+ font-size: var(--cg-text-sm);
494
+ letter-spacing: var(--cg-tracking-wide);
495
+ text-transform: uppercase;
496
+ }
497
+
498
+ .cg-mobile-nav__items a,
499
+ .cg-mobile-nav__items span {
500
+ color: var(--cg-ink);
501
+ text-decoration: none;
502
+ }
503
+
504
+ .cg-mobile-nav__items .cg-nav__cta {
505
+ display: inline-flex;
506
+ }
507
+
508
+ /* --------------------------------------------------------------------------
509
+ Chrome — footer, columns
510
+ -------------------------------------------------------------------------- */
511
+
512
+ .cg-site-footer {
513
+ padding: var(--cg-s16) var(--cg-gutter) var(--cg-s8);
514
+ background: var(--cg-surface-sunken);
515
+ color: var(--cg-ink-muted);
516
+ border-block-start: 1px solid var(--cg-line-soft);
517
+ font-size: var(--cg-text-sm);
518
+ }
519
+
520
+ .cg-site-footer__grid {
521
+ display: grid;
522
+ gap: var(--cg-gap-loose);
523
+ grid-template-columns: 1fr;
524
+ max-inline-size: var(--cg-page);
525
+ margin-inline: auto;
526
+ padding-block-end: var(--cg-s10);
527
+ border-block-end: 1px solid var(--cg-line-soft);
528
+ }
529
+
530
+ @media (min-width: 48rem) {
531
+ .cg-site-footer__grid {
532
+ grid-template-columns: 1.2fr 1fr 1fr;
533
+ align-items: start;
534
+ }
535
+ }
536
+
537
+ .cg-site-footer__brand-name {
538
+ display: block;
539
+ color: var(--cg-ink);
540
+ font-family: var(--cogenta-font-serif);
541
+ font-size: var(--cg-text-xl);
542
+ letter-spacing: var(--cg-tracking-wide);
543
+ text-decoration: none;
544
+ margin-block-end: var(--cg-s3);
545
+ }
546
+
547
+ .cg-site-footer__tagline {
548
+ margin: 0 0 var(--cg-s4);
549
+ }
550
+
551
+ .cg-site-footer__social {
552
+ display: flex;
553
+ gap: var(--cg-s3);
554
+ margin: 0;
555
+ padding: 0;
556
+ list-style: none;
557
+ }
558
+
559
+ .cg-site-footer__social-item a {
560
+ display: inline-flex;
561
+ align-items: center;
562
+ justify-content: center;
563
+ inline-size: 2.25rem;
564
+ block-size: 2.25rem;
565
+ border-radius: 50%;
566
+ box-shadow: var(--cg-ring);
567
+ color: var(--cg-ink-muted);
568
+ }
569
+
570
+ .cg-site-footer__social-item a:hover {
571
+ color: var(--cg-accent);
572
+ box-shadow: var(--cg-ring-accent);
573
+ }
574
+
575
+ .cg-social__icon {
576
+ inline-size: 1.1rem;
577
+ block-size: 1.1rem;
578
+ }
579
+
580
+ .cg-visually-hidden {
581
+ position: absolute;
582
+ inline-size: 1px;
583
+ block-size: 1px;
584
+ overflow: hidden;
585
+ clip: rect(0 0 0 0);
586
+ white-space: nowrap;
587
+ }
588
+
589
+ .cg-site-footer__nav .cg-nav__items {
590
+ flex-direction: column;
591
+ align-items: flex-start;
592
+ gap: var(--cg-s3);
593
+ text-transform: none;
594
+ letter-spacing: var(--cg-tracking-normal);
595
+ }
596
+
597
+ .cg-site-footer__about {
598
+ font-style: italic;
599
+ }
600
+
601
+ .cg-site-footer__bottom {
602
+ display: flex;
603
+ flex-wrap: wrap;
604
+ align-items: center;
605
+ justify-content: space-between;
606
+ gap: var(--cg-s4);
607
+ max-inline-size: var(--cg-page);
608
+ margin-inline: auto;
609
+ padding-block-start: var(--cg-s6);
610
+ font-size: var(--cg-text-xs);
611
+ letter-spacing: var(--cg-tracking-wide);
612
+ text-transform: uppercase;
613
+ color: var(--cg-ink-subtle);
614
+ }
615
+
616
+ .cg-site-footer__branding {
617
+ display: flex;
618
+ align-items: center;
619
+ gap: 0.4em;
620
+ opacity: 0.8;
621
+ transition: opacity var(--cg-duration) var(--cg-ease);
622
+ }
623
+
624
+ .cg-site-footer__branding a {
625
+ display: flex;
626
+ align-items: center;
627
+ gap: 0.4em;
628
+ }
629
+
630
+ .cg-site-footer__branding a:hover,
631
+ .cg-site-footer__branding a:focus-visible {
632
+ opacity: 1;
633
+ }
634
+
635
+ /* --------------------------------------------------------------------------
636
+ Actions — the theme's only control
637
+ -------------------------------------------------------------------------- */
638
+
639
+ .cg-actions {
640
+ display: flex;
641
+ flex-wrap: wrap;
642
+ gap: var(--cg-s4);
643
+ margin: var(--cg-s8) 0 0;
644
+ padding: 0;
645
+ list-style: none;
646
+ }
647
+
648
+ .cg-action {
649
+ display: inline-flex;
650
+ align-items: center;
651
+ justify-content: center;
652
+ gap: var(--cg-s2);
653
+ padding: var(--cg-s3) var(--cg-s6);
654
+ border: 1px solid transparent;
655
+ border-radius: var(--cg-radius-sm);
656
+ font-size: var(--cg-text-sm);
657
+ font-weight: var(--cg-weight-medium);
658
+ letter-spacing: var(--cg-tracking-wide);
659
+ text-transform: uppercase;
660
+ line-height: var(--cg-leading-snug);
661
+ text-decoration: none;
662
+ white-space: nowrap;
663
+ transition:
664
+ background-color var(--cg-duration) var(--cg-ease),
665
+ color var(--cg-duration) var(--cg-ease),
666
+ border-color var(--cg-duration) var(--cg-ease),
667
+ transform var(--cg-duration-fast) var(--cg-ease);
668
+ }
669
+
670
+ .cg-action[data-emphasis="primary"] {
671
+ background: var(--cg-accent);
672
+ border-color: var(--cg-accent);
673
+ color: var(--cg-accent-fg);
674
+ }
675
+
676
+ .cg-action[data-emphasis="primary"]:hover {
677
+ background: var(--cg-accent-hover);
678
+ border-color: var(--cg-accent-hover);
679
+ transform: translateY(-1px);
680
+ }
681
+
682
+ .cg-action[data-emphasis="secondary"] {
683
+ background: transparent;
684
+ border-color: var(--cg-line-strong);
685
+ color: var(--cg-ink);
686
+ }
687
+
688
+ .cg-action[data-emphasis="secondary"]:hover {
689
+ border-color: var(--cg-accent);
690
+ color: var(--cg-accent);
691
+ }
692
+
693
+ .cg-action:active {
694
+ transform: translateY(0);
695
+ }
696
+
697
+ /* --------------------------------------------------------------------------
698
+ Shared block furniture — every custom title class this theme's seventeen
699
+ blocks declare, kept to one typographic rule so a page mixing all of them
700
+ reads as one system.
701
+ -------------------------------------------------------------------------- */
702
+
703
+ .cg-craft__title-heading,
704
+ .cg-close__title,
705
+ .cg-faq__title,
706
+ .cg-figures__title,
707
+ .cg-press__title,
708
+ .cg-set-menu__title,
709
+ .cg-tallies__title,
710
+ .cg-hours__title,
711
+ .cg-menu__title {
712
+ margin: 0 0 var(--cg-s10);
713
+ font-size: var(--cg-text-2xl);
714
+ text-align: center;
715
+ }
716
+
717
+ .cg-craft__items,
718
+ .cg-press__items,
719
+ .cg-press-strip__items,
720
+ .cg-gallery__items,
721
+ .cg-faq__items,
722
+ .cg-hours__items,
723
+ .cg-set-menu__tiers,
724
+ .cg-menu__dishes {
725
+ margin: 0;
726
+ padding: 0;
727
+ list-style: none;
728
+ }
729
+
730
+ .cg-gallery__viewport,
731
+ .cg-menu__viewport {
732
+ overflow-x: auto;
733
+ scroll-snap-type: x mandatory;
734
+ scroll-behavior: smooth;
735
+ overscroll-behavior-inline: contain;
736
+ scrollbar-width: thin;
737
+ scrollbar-color: var(--cg-line-strong) transparent;
738
+ padding-block: var(--cg-s2);
739
+ margin-block: calc(var(--cg-s2) * -1);
740
+ }
741
+
742
+ /* --------------------------------------------------------------------------
743
+ Search, forms, comments — public utility pages and post-content
744
+ furniture, styled with the same restrained, elegant language as the
745
+ seventeen blocks.
746
+ -------------------------------------------------------------------------- */
747
+
748
+ .cg-search__form,
749
+ .cg-search__results,
750
+ .cg-search__empty,
751
+ .cg-search__error,
752
+ .cg-form,
753
+ .cg-form__confirmation,
754
+ .cg-comments {
755
+ max-inline-size: var(--cg-page);
756
+ margin-inline: auto;
757
+ padding-inline: var(--cg-gutter);
758
+ }
759
+
760
+ .cg-search__form {
761
+ display: flex;
762
+ flex-wrap: wrap;
763
+ align-items: end;
764
+ gap: var(--cg-s3);
765
+ margin-block-end: var(--cg-s8);
766
+ }
767
+
768
+ .cg-search__form label {
769
+ display: block;
770
+ font-size: var(--cg-text-sm);
771
+ margin-block-end: var(--cg-s2);
772
+ }
773
+
774
+ .cg-search__form input[type="search"] {
775
+ flex: 1 1 16rem;
776
+ }
777
+
778
+ .cg-search__results {
779
+ margin: 0 auto;
780
+ padding-inline-start: var(--cg-gutter);
781
+ display: grid;
782
+ gap: var(--cg-s4);
783
+ font-size: var(--cg-text-lg);
784
+ }
785
+
786
+ .cg-search__empty,
787
+ .cg-comments__empty,
788
+ .cg-comments__closed {
789
+ color: var(--cg-ink-muted);
790
+ }
791
+
792
+ .cg-search__error,
793
+ .cg-form__error,
794
+ .cg-form__field-error {
795
+ color: var(--cg-ink);
796
+ font-weight: var(--cg-weight-semibold);
797
+ }
798
+
799
+ .cg-search__form input,
800
+ .cg-form__field input,
801
+ .cg-form__field select,
802
+ .cg-form__field textarea,
803
+ .cg-comment__form input,
804
+ .cg-comment__form textarea {
805
+ inline-size: 100%;
806
+ padding: var(--cg-s3) var(--cg-s4);
807
+ border: 1px solid var(--cg-line);
808
+ border-radius: var(--cg-radius-sm);
809
+ background: var(--cg-surface);
810
+ color: var(--cg-ink);
811
+ font: inherit;
812
+ }
813
+
814
+ .cg-form__field input[aria-invalid="true"],
815
+ .cg-form__field select[aria-invalid="true"],
816
+ .cg-form__field textarea[aria-invalid="true"] {
817
+ border-width: 2px;
818
+ border-color: var(--cg-line-strong);
819
+ }
820
+
821
+ .cg-search__form button,
822
+ .cg-form button[type="submit"],
823
+ .cg-comment__form button[type="submit"] {
824
+ padding: var(--cg-s3) var(--cg-s6);
825
+ border: 0;
826
+ border-radius: var(--cg-radius-sm);
827
+ background: var(--cg-accent);
828
+ color: var(--cg-accent-fg);
829
+ font-weight: var(--cg-weight-medium);
830
+ letter-spacing: var(--cg-tracking-wide);
831
+ text-transform: uppercase;
832
+ cursor: pointer;
833
+ transition: background-color var(--cg-duration) var(--cg-ease);
834
+ }
835
+
836
+ .cg-search__form button:hover,
837
+ .cg-form button[type="submit"]:hover,
838
+ .cg-comment__form button[type="submit"]:hover {
839
+ background: var(--cg-accent-hover);
840
+ }
841
+
842
+ .cg-form__field,
843
+ .cg-comment__form p {
844
+ display: block;
845
+ margin-block-end: var(--cg-s5);
846
+ }
847
+
848
+ .cg-form__field label,
849
+ .cg-comment__form label {
850
+ display: block;
851
+ font-size: var(--cg-text-sm);
852
+ margin-block-end: var(--cg-s2);
853
+ }
854
+
855
+ .cg-form__help {
856
+ margin: var(--cg-s2) 0 0;
857
+ font-size: var(--cg-text-sm);
858
+ color: var(--cg-ink-muted);
859
+ }
860
+
861
+ .cg-form__choice {
862
+ display: inline-flex;
863
+ align-items: center;
864
+ gap: var(--cg-s2);
865
+ margin-inline-end: var(--cg-s4);
866
+ font-weight: normal;
867
+ }
868
+
869
+ .cg-form__honeypot,
870
+ .cg-comment__honeypot {
871
+ position: absolute;
872
+ inline-size: 1px;
873
+ block-size: 1px;
874
+ overflow: hidden;
875
+ inset-inline-start: -9999px;
876
+ }
877
+
878
+ .cg-comments {
879
+ margin-block-start: var(--cg-section-y);
880
+ padding-block-start: var(--cg-s8);
881
+ padding-block-end: var(--cg-section-y);
882
+ border-block-start: 1px solid var(--cg-line-soft);
883
+ }
884
+
885
+ .cg-comments__list,
886
+ .cg-comment__replies {
887
+ margin: 0;
888
+ padding: 0;
889
+ list-style: none;
890
+ }
891
+
892
+ .cg-comment {
893
+ padding-block: var(--cg-s5);
894
+ border-block-end: 1px solid var(--cg-line-soft);
895
+ }
896
+
897
+ .cg-comment__replies {
898
+ padding-block-start: var(--cg-s5);
899
+ }
900
+
901
+ .cg-comment__replies .cg-comment {
902
+ padding-inline-start: var(--cg-s6);
903
+ border-inline-start: 2px solid var(--cg-line-soft);
904
+ border-block-end: 0;
905
+ }
906
+
907
+ .cg-comment__meta {
908
+ display: flex;
909
+ gap: var(--cg-s3);
910
+ align-items: baseline;
911
+ font-size: var(--cg-text-sm);
912
+ color: var(--cg-ink-muted);
913
+ margin-block-end: var(--cg-s2);
914
+ }
915
+
916
+ .cg-comment__author {
917
+ font-weight: var(--cg-weight-semibold);
918
+ color: var(--cg-ink);
919
+ }
920
+
921
+ .cg-comment__body {
922
+ margin: 0;
923
+ }