@se-studio/project-build 1.0.119 → 1.0.120

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @se-studio/project-build
2
2
 
3
+ ## 1.0.120
4
+
5
+ ### Patch Changes
6
+
7
+ - Bulk version bump: patch for all packages
8
+
3
9
  ## 1.0.119
4
10
 
5
11
  ### Patch Changes
@@ -19,7 +19,7 @@
19
19
  * Run this whenever tailwind.config.json or globals.css changes, or as part of
20
20
  * the update-cms-guidelines workflow.
21
21
  */
22
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
22
+ import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
23
23
  import { basename, join } from 'node:path';
24
24
  import { loadTailwindConfig } from './loadTailwindConfig.js';
25
25
  // ---------------------------------------------------------------------------
@@ -110,7 +110,7 @@ function buildBreakpointsSection(config) {
110
110
  lines.push('');
111
111
  lines.push('| Prefix | Min-width | Columns |');
112
112
  lines.push('|--------|-----------|---------|');
113
- lines.push('| *(none)* | 0px (mobile) | ' + (sizes['mobile']?.cols ?? '—') + ' |');
113
+ lines.push(`| *(none)* | 0px (mobile) | ${sizes['mobile']?.cols ?? '—'} |`);
114
114
  for (const [name, s] of Object.entries(sizes)) {
115
115
  if (name === 'mobile' || s.breakpoint === undefined)
116
116
  continue;
@@ -260,22 +260,29 @@ function buildGridSection(config) {
260
260
  lines.push('');
261
261
  lines.push('### Grid Container Classes');
262
262
  lines.push('');
263
- lines.push("`HtmlComponent` content is placed inside the site's 12-column grid automatically. Use these classes to position content within it:");
263
+ lines.push('The author is responsible for adding both grid layers. Without them, content has no page margins');
264
+ lines.push('and stretches edge-to-edge. **Outer layer** classes go on the section wrapper; **inner layer** classes');
265
+ lines.push('go on the div that receives `content-cols-grid`. Content spans go inside the inner layer.');
264
266
  lines.push('');
265
- lines.push('| Class | Description |');
266
- lines.push('|-------|-------------|');
267
- lines.push('| `col-span-full` | Full width (all columns) |');
268
- lines.push('| `laptop:col-start-2 laptop:col-span-10` | Centered with one-column margin each side (laptop+) |');
269
- lines.push('| `laptop:col-start-2 laptop:col-span-4` | Left column (text side in two-column layout) |');
270
- lines.push('| `laptop:col-start-7 laptop:col-span-5` | Right column (visual side in two-column layout) |');
271
- lines.push('| `laptop:col-start-2 laptop:col-span-5` | Narrow left half |');
272
- lines.push('| `laptop:col-start-7 laptop:col-span-6` | Wide right half |');
267
+ lines.push('| Class | Layer | Description |');
268
+ lines.push('|-------|-------|-------------|');
269
+ lines.push('| `container-cols-grid` | Outer | 3-column grid: `[margin \\| content \\| margin]`. Background colour goes here. |');
270
+ lines.push('| `container-rows-grid` | Outer | Adds vertical spacing rows. Required when using `container-row-*`. |');
271
+ lines.push('| `container-row-6-12` | Outer | Vertical spacing (48px bottom standard default). Replace with desired value. |');
272
+ lines.push('| `col-start-2 col-span-1` | Inner | Places inner div in the content column (skips margin columns). |');
273
+ lines.push('| `row-start-2 row-span-4` | Inner | Places inner div in the content rows (skips spacing rows). |');
274
+ lines.push('| `content-cols-grid` | Inner | Creates the 12-column content grid inside the inner div. |');
275
+ lines.push('| `col-span-full` | Content | Full width (all 12 columns) |');
276
+ lines.push('| `laptop:col-start-2 laptop:col-span-10` | Content | Centered with one-column margin each side (laptop+) |');
277
+ lines.push('| `laptop:col-start-2 laptop:col-span-4` | Content | Left column (text side in two-column layout) |');
278
+ lines.push('| `laptop:col-start-7 laptop:col-span-5` | Content | Right column (visual side in two-column layout) |');
279
+ lines.push('| `laptop:col-start-2 laptop:col-span-5` | Content | Narrow left half |');
280
+ lines.push('| `laptop:col-start-7 laptop:col-span-6` | Content | Wide right half |');
273
281
  lines.push('');
274
282
  lines.push('### Layout Notes');
275
283
  lines.push('');
276
- lines.push('- Wrap column children in a `content-cols-grid` parent to activate the column grid.');
277
- lines.push('- On mobile, all columns are `col-span-full` by default.');
278
- lines.push('- For edge-to-edge (full-bleed) content, set `fullWidth: true` on the HtmlComponent entry — the grid wrapper is removed.');
284
+ lines.push('- On mobile, all content columns are `col-span-full` by default.');
285
+ lines.push('- For edge-to-edge (full-bleed) content, set `fullWidth: true` on the HtmlComponent entry — the outer grid is removed and you control the full viewport width.');
279
286
  return lines.join('\n');
280
287
  }
281
288
  function buildSpacingSection() {
@@ -292,6 +299,8 @@ function buildSpacingSection() {
292
299
  lines.push('| Card padding | `p-6 laptop:p-10` |');
293
300
  lines.push('');
294
301
  lines.push('> **Note:** HtmlComponent renders inside the Section component which already provides top/bottom padding. Avoid adding extra outer padding that doubles the section gap.');
302
+ lines.push('');
303
+ lines.push('> All classes in the table above are included in the generated `src/generated/cms-rawhtml-safelist.css`', '> and are guaranteed to be compiled once that file is imported into `globals.css`.', '> See the Confirmed Safe Tailwind Utilities section for details.');
295
304
  return lines.join('\n');
296
305
  }
297
306
  function buildUtilitiesSection(utilities) {
@@ -393,14 +402,20 @@ function buildPatternsSection(config) {
393
402
  const lines = ['## Common Layout Patterns', ''];
394
403
  lines.push('Copy-paste these patterns into `rawHtml`. Replace placeholder text with real content.');
395
404
  lines.push('');
405
+ lines.push('> **All patterns use the mandatory two-layer grid structure.** The outer `container-cols-grid` provides');
406
+ lines.push('> page margin columns; the inner `content-cols-grid` provides the 12-column content grid.');
407
+ lines.push('> Never use `content-cols-grid` as the outermost element — content will have no page margins.');
408
+ lines.push('');
396
409
  lines.push('### Centered Text Block');
397
410
  lines.push('');
398
411
  lines.push('```html');
399
- lines.push('<div class="content-cols-grid">');
400
- lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10 space-y-6">');
401
- lines.push(' <h2 class="h2">Section Heading</h2>');
402
- lines.push(' <div class="rtf-standard">');
403
- lines.push(' <p>Body copy goes here.</p>');
412
+ lines.push('<div class="w-full container-cols-grid container-rows-grid container-row-6-12">');
413
+ lines.push(' <div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">');
414
+ lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10 flex flex-col gap-6">');
415
+ lines.push(' <h2 class="h2">Section Heading</h2>');
416
+ lines.push(' <div class="rtf-standard">');
417
+ lines.push(' <p>Body copy goes here.</p>');
418
+ lines.push(' </div>');
404
419
  lines.push(' </div>');
405
420
  lines.push(' </div>');
406
421
  lines.push('</div>');
@@ -409,25 +424,30 @@ function buildPatternsSection(config) {
409
424
  lines.push('### Two-Column Layout (Text + Visual)');
410
425
  lines.push('');
411
426
  lines.push('```html');
412
- lines.push('<div class="content-cols-grid gap-y-12">');
413
- lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-4 flex flex-col gap-6">');
414
- lines.push(' <h2 class="h2">Heading</h2>');
415
- lines.push(' <p class="p1">Descriptive text alongside the visual.</p>');
416
- lines.push(' </div>');
417
- lines.push(' <div class="col-span-full laptop:col-start-7 laptop:col-span-5">');
418
- lines.push(' <img src="..." alt="..." class="w-full rounded-lg" />');
427
+ lines.push('<div class="w-full container-cols-grid container-rows-grid container-row-6-12">');
428
+ lines.push(' <div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">');
429
+ lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-4 flex flex-col gap-6">');
430
+ lines.push(' <h2 class="h2">Heading</h2>');
431
+ lines.push(' <p class="p1">Descriptive text alongside the visual.</p>');
432
+ lines.push(' </div>');
433
+ lines.push(' <div class="col-span-full laptop:col-start-7 laptop:col-span-5">');
434
+ lines.push(' <img src="..." alt="..." class="w-full rounded-lg" />');
435
+ lines.push(' </div>');
419
436
  lines.push(' </div>');
420
437
  lines.push('</div>');
438
+ lines.push('<!-- For tablet column layout, use customCss @media instead of tablet: prefix -->');
421
439
  lines.push('```');
422
440
  lines.push('');
423
441
  lines.push('### Coloured Card');
424
442
  lines.push('');
425
443
  lines.push('```html');
426
- lines.push('<div class="content-cols-grid">');
427
- lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10">');
428
- lines.push(` <div class="bg-${ac} text-${dc} p-8 laptop:p-12 rounded-lg flex flex-col gap-4">`);
429
- lines.push(' <h3 class="h3">Card Title</h3>');
430
- lines.push(' <p class="p2">Supporting description text.</p>');
444
+ lines.push('<div class="w-full container-cols-grid container-rows-grid container-row-6-12">');
445
+ lines.push(' <div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">');
446
+ lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10">');
447
+ lines.push(` <div class="bg-${ac} text-${dc} p-8 rounded-lg flex flex-col gap-4">`);
448
+ lines.push(' <h3 class="h3">Card Title</h3>');
449
+ lines.push(' <p class="p2">Supporting description text.</p>');
450
+ lines.push(' </div>');
431
451
  lines.push(' </div>');
432
452
  lines.push(' </div>');
433
453
  lines.push('</div>');
@@ -436,31 +456,40 @@ function buildPatternsSection(config) {
436
456
  lines.push('### Card Grid');
437
457
  lines.push('');
438
458
  lines.push('```html');
439
- lines.push('<div class="content-cols-grid gap-y-8">');
440
- lines.push(' <!-- Header row -->');
441
- lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10">');
442
- lines.push(' <h2 class="h2">Grid Title</h2>');
443
- lines.push(' </div>');
444
- lines.push(' <!-- Card grid -->');
445
- lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10');
446
- lines.push(' grid grid-cols-1 tablet:grid-cols-2 laptop:grid-cols-3 gap-6">');
447
- lines.push(' <div class="flex flex-col gap-4 p-6 border border-gray rounded-lg">');
448
- lines.push(' <h3 class="h3">Card 1</h3>');
449
- lines.push(' <p class="p2">Description.</p>');
459
+ lines.push('<div class="w-full container-cols-grid container-rows-grid container-row-6-12">');
460
+ lines.push(' <div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid gap-y-8">');
461
+ lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10">');
462
+ lines.push(' <h2 class="h2">Grid Title</h2>');
463
+ lines.push(' </div>');
464
+ lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10">');
465
+ lines.push(' <!-- Use customCss for responsive grid columns (tablet:/laptop: not reliable in rawHtml) -->');
466
+ lines.push(' <div class="my-card-grid">');
467
+ lines.push(' <div class="flex flex-col gap-4 p-6 border rounded-lg">');
468
+ lines.push(' <h3 class="h3">Card 1</h3>');
469
+ lines.push(' <p class="p2">Description.</p>');
470
+ lines.push(' </div>');
471
+ lines.push(' </div>');
450
472
  lines.push(' </div>');
451
- lines.push(' <!-- repeat for more cards -->');
452
473
  lines.push(' </div>');
453
474
  lines.push('</div>');
475
+ lines.push('<!-- In customCss: -->');
476
+ lines.push('<!-- @media (min-width: 768px) { .my-card-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; } } -->');
477
+ lines.push('<!-- @media (min-width: 1024px) { .my-card-grid { grid-template-columns: repeat(3, 1fr); } } -->');
454
478
  lines.push('```');
455
479
  lines.push('');
456
480
  lines.push('### Hero with Dark Background');
457
481
  lines.push('');
458
482
  lines.push('```html');
459
- lines.push('<!-- Set isHero: true on this HtmlComponent entry -->');
460
- lines.push(`<div class="bg-${dc} text-${lc} content-cols-grid py-16 laptop:py-32">`);
461
- lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10 flex flex-col gap-8">');
462
- lines.push(' <h1 class="h1">Hero Heading</h1>');
463
- lines.push(' <p class="p1 laptop:col-span-6">Subtitle or intro text.</p>');
483
+ lines.push('<!-- Set isHero: true and fullWidth: true on this HtmlComponent entry -->');
484
+ lines.push('<!-- fullWidth: true removes the outer grid you own the full width -->');
485
+ lines.push('<!-- py-16 is used here because fullWidth: true removes the outer grid/row spacing. -->');
486
+ lines.push('<!-- In a standard (non-fullWidth) section, use container-row-6-* for vertical spacing. -->');
487
+ lines.push(`<div class="bg-${dc} text-${lc} w-full">`);
488
+ lines.push(' <div class="content-cols-grid py-16">');
489
+ lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10 flex flex-col gap-8">');
490
+ lines.push(' <h1 class="h1">Hero Heading</h1>');
491
+ lines.push(' <p class="p1">Subtitle or intro text.</p>');
492
+ lines.push(' </div>');
464
493
  lines.push(' </div>');
465
494
  lines.push('</div>');
466
495
  lines.push('```');
@@ -474,9 +503,9 @@ When authoring HTML for a \`HtmlComponent\` entry in Contentful, fill these fiel
474
503
  | Field | Required | Notes |
475
504
  |-------|----------|-------|
476
505
  | \`rawHtml\` | ✓ | The HTML markup. Use Tailwind classes; avoid inline \`style=\` attributes for layout/colour/typography. |
477
- | \`customCss\` | — | Scoped CSS only. Rules are automatically prefixed with \`[data-hc-id="<id>"]\` so they cannot leak. Use for complex interactions or pseudo-elements unavailable via Tailwind. |
478
- | \`customJs\` | — | JavaScript loaded via Next.js \`<Script>\`. Always test the \`scriptStrategy\` setting. |
479
- | \`markdownContent\` | — | Plain text summary of the component for site search indexing. Fill this to make the component searchable. |
506
+ | \`customCss\` | — | Scoped CSS. Rules are automatically prefixed with \`[data-hc-id="<id>"]\` so they cannot leak. **Use for all responsive layout** (\`@media\` queries) and any utility class not in the Confirmed Safe list. |
507
+ | \`customJs\` | — | JavaScript loaded via Next.js \`<Script>\`. A \`hcRoot\` variable pointing to this component's root element is automatically injected — use it to scope all queries (see below). |
508
+ | \`markdownContent\` | — | Plain text summary for site search indexing. **Strongly recommended** leaving it empty makes the component invisible to search. |
480
509
  | \`isHero\` | — | Set \`true\` if the HTML contains an \`<h1>\`. Ensures this block appears first in the page content flow. |
481
510
  | \`fullWidth\` | — | Set \`true\` for edge-to-edge (full-bleed) layouts that break out of the column grid. |
482
511
  | \`excludeFromSearch\` | — | Set \`true\` to exclude from search indexing even if \`markdownContent\` is filled. |
@@ -485,11 +514,359 @@ When authoring HTML for a \`HtmlComponent\` entry in Contentful, fill these fiel
485
514
  ### Authoring Rules
486
515
 
487
516
  1. **Classes, not inline styles.** Use Tailwind utility classes. Never write \`style="color: #FF5C00"\` — use \`class="text-orange"\` instead.
488
- 2. **Respect the grid.** Wrap content in \`content-cols-grid\` and use column classes to align with surrounding sections.
489
- 3. **Semantic HTML.** Use correct heading levels (\`<h1>\` only once per page, \`<h2>\` for section heads, \`<h3>\` for cards).
490
- 4. **Accessible images.** Always include \`alt\` attributes. Decorative images use \`alt=""\`.
491
- 5. **No custom font stacks.** Use \`font-sans\` or rely on typography classes. The project font is loaded by Next.js automatically.
492
- 6. **Fill \`markdownContent\`** so site search can index the component's textual content.`;
517
+ 2. **Use the two-layer grid.** Every section needs an outer \`container-cols-grid\` wrapper (page margins) and an inner \`col-start-2 col-span-1 content-cols-grid\` wrapper (12-column content grid). See the Layout Patterns section.
518
+ 3. **Only use responsive prefixes from the Confirmed Safe list.** Tailwind only compiles classes found in source files — classes in \`rawHtml\` are invisible to the scanner. Only use \`tablet:\` / \`laptop:\` prefixes that appear in the **Confirmed Safe Tailwind Utilities** section (they are proven to be in the compiled bundle). For any responsive behaviour not listed there, use \`customCss\` with \`@media\` queries instead.
519
+ 4. **Semantic HTML.** Use correct heading levels (\`<h1>\` only once per page, \`<h2>\` for section heads, \`<h3>\` for cards).
520
+ 5. **Accessible images.** Always include \`alt\` attributes. Decorative images use \`alt=""\`.
521
+ 6. **No custom font stacks.** Use \`font-sans\` or rely on typography classes. The project font is loaded by Next.js automatically.
522
+ 7. **Fill \`markdownContent\`.** This is strongly recommended — it is the only way site search can index the component's content. Leave it empty and the component is invisible to search.
523
+ 8. **Set \`cmsLabel\` immediately.** Use a descriptive value — the Contentful UI shows only this name.
524
+
525
+ ### Custom JavaScript (\`customJs\`)
526
+
527
+ The renderer automatically injects \`hcRoot\` — a reference to this component's root \`[data-hc-id]\` element — before your script runs. **Always use \`hcRoot\` instead of \`document.querySelector('[data-hc-id]')\`**, which would match the first component on the page, not this one.
528
+
529
+ \`\`\`js
530
+ // ✓ Correct — hcRoot is automatically scoped to this component
531
+ var btns = hcRoot.querySelectorAll('.my-btn');
532
+ btns.forEach(function (btn) {
533
+ btn.addEventListener('click', function () { /* ... */ });
534
+ });
535
+
536
+ // ✗ Wrong — matches the first [data-hc-id] on the page, not necessarily this component
537
+ var section = document.querySelector('[data-hc-id]');
538
+ \`\`\`
539
+
540
+ **Rules:**
541
+ - Use \`hcRoot\` as the root for all \`querySelector\` / \`querySelectorAll\` calls.
542
+ - Keep scripts small and self-contained — no module imports, no global state.
543
+ - Avoid \`document.getElementById\` unless the ID is unique across the entire page.
544
+ - Use \`afterInteractive\` (default) for toggle/tab interactions. Use \`lazyOnload\` for non-critical analytics or third-party widgets.`;
545
+ }
546
+ // ---------------------------------------------------------------------------
547
+ // Safe Tailwind utilities scanner
548
+ // ---------------------------------------------------------------------------
549
+ /** Responsive / state prefixes to strip before category matching. */
550
+ const VARIANT_PREFIXES = [
551
+ 'tablet:',
552
+ 'laptop:',
553
+ 'desktop:',
554
+ 'wide:',
555
+ 'hover:',
556
+ 'focus:',
557
+ 'active:',
558
+ 'group-hover:',
559
+ 'dark:',
560
+ 'motion-safe:',
561
+ 'motion-reduce:',
562
+ ];
563
+ /**
564
+ * Per-category patterns matched against the BASE class (after stripping variants).
565
+ * Order matters — first match wins.
566
+ */
567
+ const SAFE_UTILITY_CATEGORIES = [
568
+ {
569
+ label: 'Display & Visibility',
570
+ pattern: /^(block|inline-block|inline|flex|inline-flex|grid|inline-grid|hidden|contents|flow-root|visible|invisible|sr-only|not-sr-only)$/,
571
+ },
572
+ {
573
+ label: 'Position',
574
+ pattern: /^(relative|absolute|fixed|sticky|static)$|^(inset(-[xy])?|top|right|bottom|left|z)-/,
575
+ },
576
+ {
577
+ label: 'Flexbox',
578
+ pattern: /^(flex(-col|-row|-wrap|-nowrap|-1|-auto|-initial|-none|-shrink|-shrink-0|-grow|-grow-0)?|items|justify|self|content|place-items|place-content|place-self|order|grow|shrink|basis)(-|$)/,
579
+ },
580
+ {
581
+ label: 'Grid',
582
+ pattern: /^(grid(-cols|-rows|-flow)?|col(-span|-start|-end)?|row(-span|-start|-end)?|auto-cols|auto-rows)(-|\d|$)/,
583
+ },
584
+ {
585
+ label: 'Gap',
586
+ pattern: /^gap(-[xy])?-/,
587
+ },
588
+ {
589
+ label: 'Padding',
590
+ pattern: /^(p|px|py|pt|pr|pb|pl|ps|pe)-/,
591
+ },
592
+ {
593
+ label: 'Margin',
594
+ pattern: /^-?(m|mx|my|mt|mr|mb|ml|ms|me)-/,
595
+ },
596
+ {
597
+ label: 'Space Between',
598
+ pattern: /^-?space-(x|y)-/,
599
+ },
600
+ {
601
+ label: 'Sizing',
602
+ pattern: /^(w|h|min-w|min-h|max-w|max-h|size)-/,
603
+ },
604
+ {
605
+ label: 'Typography Utilities',
606
+ pattern: /^(text-(center|left|right|justify|wrap|nowrap|balance|pretty)|font-(bold|semibold|medium|normal|light|thin|black|extrabold)|leading|tracking|uppercase|lowercase|capitalize|normal-case|truncate|break|whitespace|underline|no-underline|line-through|decoration|align|indent)(-|$)/,
607
+ },
608
+ {
609
+ label: 'Borders & Radius',
610
+ pattern: /^(border(-[0-9]|-(t|b|l|r|x|y|s|e|dashed|solid|dotted|none))?$|rounded)(-|$)/,
611
+ },
612
+ {
613
+ label: 'Opacity',
614
+ pattern: /^opacity-/,
615
+ },
616
+ {
617
+ label: 'Shadow & Ring',
618
+ pattern: /^(shadow|ring)(-|$)/,
619
+ },
620
+ {
621
+ label: 'Overflow',
622
+ pattern: /^overflow(-[xy])?-/,
623
+ },
624
+ {
625
+ label: 'Object Fit',
626
+ pattern: /^object-/,
627
+ },
628
+ {
629
+ label: 'Aspect Ratio',
630
+ pattern: /^aspect-/,
631
+ },
632
+ {
633
+ label: 'Transition & Animation',
634
+ pattern: /^(transition|duration|ease|delay|animate)(-|$)/,
635
+ },
636
+ {
637
+ label: 'Transform',
638
+ pattern: /^-?(translate|rotate|scale|skew|transform)(-|$)/,
639
+ },
640
+ {
641
+ label: 'Interactivity',
642
+ pattern: /^(cursor|pointer-events|select|resize|scroll|touch)(-|$)/,
643
+ },
644
+ ];
645
+ /** Characters that are valid in a Tailwind class token. */
646
+ const VALID_CLASS_RE = /^[a-z0-9_-]+([:/[\].!a-z0-9_-])*$/i;
647
+ /**
648
+ * For spacing/sizing categories the value portion (after the last prefix hyphen)
649
+ * must look like a Tailwind scale — a number, fraction, keyword, or arbitrary value.
650
+ * This prevents descriptive classnames like `my-warning` from being included.
651
+ */
652
+ const SPACING_CATEGORY_LABELS = new Set(['Padding', 'Margin', 'Gap', 'Space Between', 'Sizing']);
653
+ const VALID_SPACING_VALUE_RE = /^(\[.*\]|-?\d[\d.]*(?:\/\d+)?|px|auto|full|screen|fit|min|max|svh|dvh|unset|inherit|cols-\S+|gap-\S+)$/;
654
+ /** Patterns for strings we always exclude even if they match a category. */
655
+ const EXCLUDE_RE = /^(bg-|text-|border-|ring-|from-|to-|via-|fill-|stroke-|shadow-|outline-|accent-|caret-|divide-color|placeholder-)(?!opacity|none|current|inherit|transparent|clip|left|right|center|justify|auto|full|screen|fit|max|min|px|0|[0-9]|\.)/;
656
+ /** Custom design-system class names that should never appear in utility output. */
657
+ const CUSTOM_CLASS_RE = /^(content-cols-grid|container-cols-grid|container-rows-grid|container-row|section-spacing|col-start-2|rtf-|animate-ticker|animate-fade|animate-shape|animate-card|animate-clip|film-grain|h[1-4](Med|plus|l|lbold|MedYellow)?|p[1-3](Med)?|hHome|large-button|nav)(-|$)/;
658
+ function collectSourceFiles(dir) {
659
+ const results = [];
660
+ if (!existsSync(dir))
661
+ return results;
662
+ for (const entry of readdirSync(dir)) {
663
+ const full = join(dir, entry);
664
+ const st = statSync(full);
665
+ if (st.isDirectory()) {
666
+ if (entry === 'node_modules' || entry === '.next' || entry === 'dist')
667
+ continue;
668
+ results.push(...collectSourceFiles(full));
669
+ }
670
+ else if (/\.(tsx?|css)$/.test(entry)) {
671
+ results.push(full);
672
+ }
673
+ }
674
+ return results;
675
+ }
676
+ function extractClassTokens(files) {
677
+ // Match quoted strings that are plausibly class lists (contain spaces or look like single classes)
678
+ const QUOTED_RE = /(?:className|class)=(?:"([^"]+)"|'([^']+)'|`([^`]+)`)/g;
679
+ const CN_RE = /\bcn\(([^)]{1,500})\)/g;
680
+ const tokens = new Set();
681
+ for (const file of files) {
682
+ const src = readFileSync(file, 'utf-8');
683
+ for (const match of src.matchAll(QUOTED_RE)) {
684
+ const val = match[1] ?? match[2] ?? match[3] ?? '';
685
+ for (const tok of val.split(/\s+/)) {
686
+ if (tok)
687
+ tokens.add(tok);
688
+ }
689
+ }
690
+ for (const match of src.matchAll(CN_RE)) {
691
+ for (const quoted of (match[1] ?? '').matchAll(/"([^"]+)"|'([^']+)'/g)) {
692
+ const val = quoted[1] ?? quoted[2] ?? '';
693
+ for (const tok of val.split(/\s+/)) {
694
+ if (tok)
695
+ tokens.add(tok);
696
+ }
697
+ }
698
+ }
699
+ }
700
+ return tokens;
701
+ }
702
+ function stripVariantPrefix(cls) {
703
+ for (const prefix of VARIANT_PREFIXES) {
704
+ if (cls.startsWith(prefix))
705
+ return cls.slice(prefix.length);
706
+ }
707
+ return cls;
708
+ }
709
+ function categorizeSafeClasses(tokens) {
710
+ const result = new Map();
711
+ for (const { label } of SAFE_UTILITY_CATEGORIES) {
712
+ result.set(label, new Set());
713
+ }
714
+ for (const cls of tokens) {
715
+ // Must look like a valid class token
716
+ if (!VALID_CLASS_RE.test(cls))
717
+ continue;
718
+ // Exclude design-system colour classes (already in Colours section)
719
+ if (EXCLUDE_RE.test(stripVariantPrefix(cls)))
720
+ continue;
721
+ if (CUSTOM_CLASS_RE.test(stripVariantPrefix(cls)))
722
+ continue;
723
+ const base = stripVariantPrefix(cls);
724
+ for (const { label, pattern } of SAFE_UTILITY_CATEGORIES) {
725
+ if (pattern.test(base)) {
726
+ // For spacing/sizing categories validate the value portion looks like a
727
+ // Tailwind scale value, not a descriptive word (e.g. reject `my-warning`)
728
+ if (SPACING_CATEGORY_LABELS.has(label)) {
729
+ const valuePart = base.split('-').at(-1) ?? '';
730
+ if (!VALID_SPACING_VALUE_RE.test(valuePart))
731
+ break;
732
+ }
733
+ result.get(label)?.add(cls);
734
+ break;
735
+ }
736
+ }
737
+ }
738
+ return result;
739
+ }
740
+ /**
741
+ * Expands a single brace-expansion pattern into all concrete strings.
742
+ * E.g. "{,laptop:}py-{4,8}" → ["py-4", "py-8", "laptop:py-4", "laptop:py-8"]
743
+ */
744
+ function braceExpand(pattern) {
745
+ const start = pattern.indexOf('{');
746
+ if (start === -1)
747
+ return [pattern];
748
+ const end = pattern.indexOf('}', start);
749
+ if (end === -1)
750
+ return [pattern];
751
+ const pre = pattern.slice(0, start);
752
+ const suf = pattern.slice(end + 1);
753
+ return pattern
754
+ .slice(start + 1, end)
755
+ .split(',')
756
+ .flatMap((alt) => braceExpand(pre + alt + suf));
757
+ }
758
+ /** Parse @source inline("...") entries from a CSS string and expand to class tokens. */
759
+ function expandInlineSources(css) {
760
+ const tokens = new Set();
761
+ const re = /@source\s+inline\("([^"]+)"\)/g;
762
+ let m = re.exec(css);
763
+ while (m !== null) {
764
+ for (const cls of braceExpand(m[1])) {
765
+ const t = cls.trim();
766
+ if (t)
767
+ tokens.add(t);
768
+ }
769
+ m = re.exec(css);
770
+ }
771
+ return tokens;
772
+ }
773
+ /**
774
+ * Build the cms-rawhtml-safelist.css content for this project.
775
+ * Uses project breakpoints from tailwind.config.json to generate the correct
776
+ * variant prefixes, and unions the baseline values with scanner-found values
777
+ * to cover project-specific spacing usage.
778
+ */
779
+ function buildSafelistCss(config, scannerTokens) {
780
+ const sizes = config.sizes ?? {};
781
+ // Breakpoint names in config order, skipping 'mobile' (no prefix)
782
+ const bpNames = Object.entries(sizes)
783
+ .filter(([name, s]) => name !== 'mobile' && s.breakpoint !== undefined)
784
+ .map(([name]) => name);
785
+ // e.g. "{,tablet:,laptop:}" or "{,laptop:}" — empty string = base class (no prefix)
786
+ const vp = bpNames.length > 0 ? `{,${bpNames.map((n) => `${n}:`).join(',')}}` : '';
787
+ // Extract numeric values the scanner found for a given property prefix
788
+ function scannerValuesFor(propPrefix) {
789
+ const vals = new Set();
790
+ for (const tok of scannerTokens) {
791
+ const base = stripVariantPrefix(tok);
792
+ if (base.startsWith(`${propPrefix}-`)) {
793
+ const val = base.slice(propPrefix.length + 1);
794
+ if (/^\d+(\.\d+)?$/.test(val))
795
+ vals.add(val);
796
+ }
797
+ }
798
+ return [...vals];
799
+ }
800
+ // Curated baseline values per property (Tailwind default spacing scale subset)
801
+ const BASELINE = {
802
+ py: ['2', '4', '6', '8', '10', '12', '16', '20', '24'],
803
+ px: ['2', '4', '6', '8', '10', '12', '16', '20'],
804
+ pt: ['2', '4', '6', '8', '10', '12', '16', '20', '24'],
805
+ pb: ['2', '4', '6', '8', '10', '12', '16', '20', '24'],
806
+ p: ['2', '4', '6', '8', '10', '12'],
807
+ gap: ['1', '2', '3', '4', '5', '6', '8', '10', '12', '16'],
808
+ 'gap-y': ['2', '4', '6', '8', '10', '12', '16'],
809
+ 'gap-x': ['2', '4', '6', '8', '10', '12'],
810
+ 'space-y': ['2', '4', '6', '8', '10', '12', '16'],
811
+ 'space-x': ['2', '4', '6', '8', '10', '12'],
812
+ };
813
+ // Properties where responsive variants are meaningful for layout
814
+ const RESPONSIVE = new Set(['py', 'px', 'gap', 'gap-y', 'gap-x', 'space-y', 'space-x']);
815
+ const lines = [
816
+ '/* Auto-generated by cms-generate-html-style-guide — do not edit by hand */',
817
+ '/* Regenerate: pnpm cms-generate-html-style-guide */',
818
+ '',
819
+ '/*',
820
+ ' * Forces common spacing/gap utilities into the CSS bundle so they can be',
821
+ ' * safely used in HtmlComponent rawHtml fields (which Tailwind JIT never scans).',
822
+ ' *',
823
+ ' * Setup (one time per app):',
824
+ ` * Add to src/app/globals.css: @import "../generated/cms-rawhtml-safelist.css"`,
825
+ ' */',
826
+ '',
827
+ ];
828
+ for (const [prop, baseline] of Object.entries(BASELINE)) {
829
+ // Union baseline with scanner-found values, sort numerically
830
+ const all = new Set([...baseline, ...scannerValuesFor(prop)]);
831
+ const values = [...all].sort((a, b) => Number(a) - Number(b));
832
+ const valBrace = `{${values.join(',')}}`;
833
+ const prefix = RESPONSIVE.has(prop) && vp ? vp : '';
834
+ lines.push(`@source inline("${prefix}${prop}-${valBrace}");`);
835
+ }
836
+ return `${lines.join('\n')}\n`;
837
+ }
838
+ function buildSafeUtilitiesSection(allTokens) {
839
+ const grouped = categorizeSafeClasses(allTokens);
840
+ const lines = [
841
+ '## Confirmed Safe Tailwind Utilities',
842
+ '',
843
+ 'These classes are **guaranteed to be in the CSS bundle** — either found in compiled source',
844
+ 'files or explicitly included in the generated `src/generated/cms-rawhtml-safelist.css`.',
845
+ 'Use them freely in `rawHtml`.',
846
+ '',
847
+ '> **Setup required (one time):** Add `@import "../generated/cms-rawhtml-safelist.css"` to',
848
+ '> `src/app/globals.css`. Without this import the safelist classes are not compiled.',
849
+ '',
850
+ '> **Any class NOT listed here may not be compiled.** For responsive layout not in this list,',
851
+ '> use `customCss` with `@media` queries instead.',
852
+ '',
853
+ ];
854
+ let totalCount = 0;
855
+ for (const { label } of SAFE_UTILITY_CATEGORIES) {
856
+ const classes = grouped.get(label);
857
+ if (!classes || classes.size === 0)
858
+ continue;
859
+ const sorted = [...classes].sort();
860
+ totalCount += sorted.length;
861
+ lines.push(`### ${label}`);
862
+ lines.push('');
863
+ lines.push(sorted.map((c) => `\`${c}\``).join(' '));
864
+ lines.push('');
865
+ }
866
+ if (totalCount === 0) {
867
+ lines.push('_No confirmed utility classes found — ensure source files are accessible._');
868
+ }
869
+ return lines.join('\n');
493
870
  }
494
871
  // ---------------------------------------------------------------------------
495
872
  // Main
@@ -517,11 +894,27 @@ function main() {
517
894
  const utilities = extractUtilities(globalsCss);
518
895
  const rtfClasses = extractRtfClasses(globalsCss);
519
896
  const rootVars = extractRootVars(globalsCss);
897
+ // Scan source files for confirmed-safe class tokens
898
+ const monorepoRoot = join(appRoot, '../..');
899
+ const scanDirs = [join(appRoot, 'src'), join(monorepoRoot, 'packages/core-ui/src')];
900
+ const sourceFiles = scanDirs.flatMap(collectSourceFiles);
901
+ const scannerTokens = extractClassTokens(sourceFiles);
902
+ // Generate the per-project safelist CSS (uses project breakpoints + scanner values)
903
+ const safelistCss = buildSafelistCss(config, scannerTokens);
904
+ const safelistDir = join(appRoot, 'src/generated');
905
+ const safelistPath = join(safelistDir, 'cms-rawhtml-safelist.css');
906
+ mkdirSync(safelistDir, { recursive: true });
907
+ writeFileSync(safelistPath, safelistCss);
908
+ // Expand safelist tokens and merge with scanner tokens
909
+ const safelistTokens = expandInlineSources(safelistCss);
910
+ const allTokens = new Set([...scannerTokens, ...safelistTokens]);
520
911
  console.log(` Colours: ${Object.keys(config.colorOptions ?? {}).length}`);
521
912
  console.log(` Typography styles: ${Object.keys(config.fontTable?.styles ?? {}).length}`);
522
913
  console.log(` Utilities: ${utilities.length}`);
523
914
  console.log(` RTF classes: ${rtfClasses.length}`);
524
915
  console.log(` CSS variables: ${rootVars.length}`);
916
+ console.log(` Safelist classes: ${safelistTokens.size} (wrote ${safelistPath})`);
917
+ console.log(` ℹ One-time setup: add @import "../generated/cms-rawhtml-safelist.css" to src/app/globals.css`);
525
918
  // Build sections
526
919
  const now = new Date().toISOString().split('T')[0];
527
920
  const sections = [
@@ -571,6 +964,10 @@ function main() {
571
964
  '',
572
965
  '---',
573
966
  '',
967
+ buildSafeUtilitiesSection(allTokens),
968
+ '',
969
+ '---',
970
+ '',
574
971
  buildPatternsSection(config),
575
972
  ];
576
973
  // Include CSS variables if any interesting ones found
@@ -581,11 +978,23 @@ function main() {
581
978
  sections.push('');
582
979
  sections.push('| Variable | Default value |');
583
980
  sections.push('|----------|---------------|');
981
+ // De-duplicate by name — keep the first (default/mobile) value; note responsive overrides
982
+ const seenVars = new Map();
983
+ const multipleVars = new Set();
584
984
  for (const { name, value } of interestingVars) {
585
- sections.push(`| \`${name}\` | \`${value}\` |`);
985
+ if (seenVars.has(name)) {
986
+ multipleVars.add(name);
987
+ }
988
+ else {
989
+ seenVars.set(name, value);
990
+ }
991
+ }
992
+ for (const [name, value] of seenVars) {
993
+ const note = multipleVars.has(name) ? ' *(has responsive override)*' : '';
994
+ sections.push(`| \`${name}\` | \`${value}\`${note} |`);
586
995
  }
587
996
  }
588
- const output = sections.join('\n') + '\n';
997
+ const output = `${sections.join('\n')}\n`;
589
998
  // Write output
590
999
  const outputDir = join(appRoot, 'docs/cms-guidelines');
591
1000
  mkdirSync(outputDir, { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"file":"cms-generate-html-style-guide.js","sourceRoot":"","sources":["../src/cms-generate-html-style-guide.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cms-generate-html-style-guide.js","sourceRoot":"","sources":["../src/cms-generate-html-style-guide.ts"],"names":[],"mappings":";AACA,uFAAuF;AAEvF;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,OAAO,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAY,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AACjF,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,OAAO,GAA0C,EAAE,CAAC;IAC1D,0EAA0E;IAC1E,MAAM,SAAS,GAAG,2BAA2B,CAAC;IAC9C,IAAI,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAW,CAAC;QAChC,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC;QAClC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,KAAK,CAAC;QACd,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBACvB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;YACjC,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7B,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,KAAK,GAAG,iBAAiB,CAAC;IAChC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;QAC1B,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,OAAO,GAA2C,EAAE,CAAC;IAC3D,4BAA4B;IAC5B,MAAM,MAAM,GAAG,sBAAsB,CAAC;IACtC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAW,CAAC;QAC7B,MAAM,KAAK,GAAG,4BAA4B,CAAC;QAC3C,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAW,EAAE,EAAE,KAAK,EAAG,CAAC,CAAC,CAAC,CAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9E,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAQD,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,KAAsB,CAAC;QACjC,IAAI,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC,YAAY,CAAW,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA8B;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IACjC,MAAM,KAAK,GAAa,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CACR,0HAA0H,CAC3H,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,+BAA+B,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC;IAC5E,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS;YAAE,SAAS;QAC9D,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,UAAU,QAAQ,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC;IACxE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IACzE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA8B;IACxD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;IACzC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;IAEnD,MAAM,KAAK,GAAa,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CACR,8FAA8F,CAC/F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;QAChG,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;QAC9F,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACvD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;YAC7C,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,KAAK,CAAC,IAAI,CACR,OAAO,IAAI,MAAM,UAAU,QAAQ,GAAG,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,QAAQ,IAAI,CAC9G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACtD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,KAAK,aAAa,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACpF,KAAK,CAAC,IAAI,CACR,yFAAyF,CAC1F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAE1F,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,sBAAsB,CAAC,MAA8B;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAkC,CAAC;IAC5D,MAAM,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC;IACjC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,wEAAwE,CAAC;IAClF,CAAC;IAED,iFAAiF;IACjF,MAAM,aAAa,GAAG,MAAM,CAAC;IAC7B,MAAM,QAAQ,GAAG,SAAS,EAAE,IAAI,IAAI,YAAY,CAAC;IACjD,MAAM,UAAU,GAAG,SAAS,EAAE,MAAM,IAAI,GAAG,CAAC;IAE5C,MAAM,KAAK,GAAa,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,gBAAgB,QAAQ,uBAAuB,UAAU,IAAI,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,6IAA6I,CAC9I,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,kCAAkC;IAClC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAChD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAC9E,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACjD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,oBAAoB,CAAC,KAAe;QAC3C,MAAM,IAAI,GAAa;YACrB,iEAAiE;YACjE,iEAAiE;SAClE,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAkB,CAAC;YAC/C,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC9B,MAAM,QAAQ,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3E,MAAM,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;YAChC,MAAM,SAAS,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;YACnF,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAuC,CAAC;YACzE,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,UAAU,EAAE,CAAC,gBAAgB,CAAC,KAAK,WAAW;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5E,IAAI,OAAO,CAAC,CAAC,eAAe,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC;gBACpE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,IAAI,CACP,OAAO,IAAI,QAAQ,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CACpP,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;IACrF,KAAK,CAAC,IAAI,CACR,iGAAiG,CAClG,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA8B;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IACjC,MAAM,KAAK,GAAa,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CACR,4GAA4G,CAC7G,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACzD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACrD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,OAAO,IAAI,MAAM,GAAG,MAAM,MAAM,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,kGAAkG,CACnG,CAAC;IACF,KAAK,CAAC,IAAI,CACR,wGAAwG,CACzG,CAAC;IACF,KAAK,CAAC,IAAI,CACR,2FAA2F,CAC5F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CACR,oHAAoH,CACrH,CAAC;IACF,KAAK,CAAC,IAAI,CACR,wGAAwG,CACzG,CAAC;IACF,KAAK,CAAC,IAAI,CACR,mHAAmH,CACpH,CAAC;IACF,KAAK,CAAC,IAAI,CACR,uGAAuG,CACxG,CAAC;IACF,KAAK,CAAC,IAAI,CACR,mGAAmG,CACpG,CAAC;IACF,KAAK,CAAC,IAAI,CACR,4FAA4F,CAC7F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CACR,6GAA6G,CAC9G,CAAC;IACF,KAAK,CAAC,IAAI,CACR,qGAAqG,CACtG,CAAC;IACF,KAAK,CAAC,IAAI,CACR,wGAAwG,CACzG,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IACtF,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;IAC/E,KAAK,CAAC,IAAI,CACR,gKAAgK,CACjK,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,KAAK,GAAa,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;IACjG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAC3E,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IACzE,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,0KAA0K,CAC3K,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,yGAAyG,EACzG,oFAAoF,EACpF,kEAAkE,CACnE,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAgD;IAC7E,yEAAyE;IACzE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;QACvB,mBAAmB;QACnB,QAAQ;QACR,iBAAiB;QACjB,aAAa;QACb,cAAc;QACd,cAAc;QACd,gBAAgB;QAChB,gBAAgB;KACjB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,gEAAgE,CAAC;IAC1E,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAC1F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAEtC,MAAM,YAAY,GAA2B;QAC3C,gBAAgB,EAAE,uDAAuD;QACzE,sBAAsB,EAAE,8CAA8C;QACtE,qBAAqB,EAAE,yDAAyD;QAChF,qBAAqB,EAAE,oCAAoC;QAC3D,qBAAqB,EAAE,iDAAiD;QACxE,YAAY,EAAE,iEAAiE;QAC/E,iBAAiB,EAAE,qCAAqC;KACzD,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,8CAA8C,CAAC;QAClF,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CAAC,UAAoB;IAC3C,MAAM,KAAK,GAAa,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CACR,2FAA2F,CAC5F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,MAAM,eAAe,GAA2B;QAC9C,cAAc,EACZ,0IAA0I;QAC5I,aAAa,EACX,gHAAgH;QAClH,mBAAmB,EACjB,0HAA0H;QAC5H,WAAW,EACT,kJAAkJ;KACrJ,CAAC;IAEF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,GACR,eAAe,CAAC,GAAG,CAAC,IAAI,yDAAyD,CAAC;YACpF,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA8B;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAkC,CAAC;IAC5D,MAAM,QAAQ,GAAG,SAAS,EAAE,IAAI,CAAC;IAEjC,MAAM,KAAK,GAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,2CAA2C,CAAC,CAAC;QACzF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACvF,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,gJAAgJ,CACjJ,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA8B;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IACxF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAC3F,MAAM,WAAW,GACf,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,CAAC,CAAC;QACT,QAAQ,CAAC;IACX,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IACnC,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,KAAK,GAAa,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CACR,uFAAuF,CACxF,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CACR,yGAAyG,CAC1G,CAAC;IACF,KAAK,CAAC,IAAI,CACR,2FAA2F,CAC5F,CAAC;IACF,KAAK,CAAC,IAAI,CACR,+FAA+F,CAChG,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CACR,2FAA2F,CAC5F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CACR,0FAA0F,CAC3F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IAC7E,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACnF,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,KAAK,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;IAChG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACpF,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,SAAS,EAAE,uCAAuC,CAAC,CAAC;IACzF,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACrE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CACR,yFAAyF,CAC1F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACpF,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACpF,KAAK,CAAC,IAAI,CACR,oGAAoG,CACrG,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IAC9E,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CACR,2HAA2H,CAC5H,CAAC;IACF,KAAK,CAAC,IAAI,CACR,kGAAkG,CACnG,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IACxF,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;IACvF,KAAK,CAAC,IAAI,CACR,yFAAyF,CAC1F,CAAC;IACF,KAAK,CAAC,IAAI,CACR,6FAA6F,CAC9F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CACR,2FAA2F,CAC5F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAElB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wIA6C+H,CAAC;AACzI,CAAC;AAED,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E,qEAAqE;AACrE,MAAM,gBAAgB,GAAG;IACvB,SAAS;IACT,SAAS;IACT,UAAU;IACV,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,cAAc;IACd,OAAO;IACP,cAAc;IACd,gBAAgB;CACjB,CAAC;AAEF;;;GAGG;AACH,MAAM,uBAAuB,GAA8C;IACzE;QACE,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EACL,iIAAiI;KACpI;IACD;QACE,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,qFAAqF;KAC/F;IACD;QACE,KAAK,EAAE,SAAS;QAChB,OAAO,EACL,wLAAwL;KAC3L;IACD;QACE,KAAK,EAAE,MAAM;QACb,OAAO,EACL,yGAAyG;KAC5G;IACD;QACE,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,eAAe;KACzB;IACD;QACE,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,+BAA+B;KACzC;IACD;QACE,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,iCAAiC;KAC3C;IACD;QACE,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,iBAAiB;KAC3B;IACD;QACE,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,sCAAsC;KAChD;IACD;QACE,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EACL,qRAAqR;KACxR;IACD;QACE,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE,8EAA8E;KACxF;IACD;QACE,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,WAAW;KACrB;IACD;QACE,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,qBAAqB;KAC/B;IACD;QACE,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,oBAAoB;KAC9B;IACD;QACE,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,UAAU;KACpB;IACD;QACE,KAAK,EAAE,cAAc;QACrB,OAAO,EAAE,UAAU;KACpB;IACD;QACE,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,gDAAgD;KAC1D;IACD;QACE,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,iDAAiD;KAC3D;IACD;QACE,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,0DAA0D;KACpE;CACF,CAAC;AAEF,2DAA2D;AAC3D,MAAM,cAAc,GAAG,oCAAoC,CAAC;AAE5D;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjG,MAAM,sBAAsB,GAC1B,wGAAwG,CAAC;AAE3G,4EAA4E;AAC5E,MAAM,UAAU,GACd,yOAAyO,CAAC;AAE5O,mFAAmF;AACnF,MAAM,eAAe,GACnB,yQAAyQ,CAAC;AAE5Q,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YACrB,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM;gBAAE,SAAS;YAChF,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAe;IACzC,mGAAmG;IACnG,MAAM,SAAS,GAAG,wDAAwD,CAAC;IAC3E,MAAM,KAAK,GAAG,wBAAwB,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAExC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBACvE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnC,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAmB;IAChD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,uBAAuB,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,qCAAqC;QACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QACxC,oEAAoE;QACpE,IAAI,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAAE,SAAS;QACvD,IAAI,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAAE,SAAS;QAE5D,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,uBAAuB,EAAE,CAAC;YACzD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,wEAAwE;gBACxE,0EAA0E;gBAC1E,IAAI,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC/C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC;wBAAE,MAAM;gBACrD,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,OAAe;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACnC,OAAO,OAAO;SACX,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;SACrB,KAAK,CAAC,GAAG,CAAC;SACV,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,wFAAwF;AACxF,SAAS,mBAAmB,CAAC,GAAW;IACtC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,EAAE,GAAG,gCAAgC,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,MAA8B,EAAE,aAA0B;IAClF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IACjC,kEAAkE;IAClE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC;SACtE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAEzB,oFAAoF;IACpF,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnF,uEAAuE;IACvE,SAAS,gBAAgB,CAAC,UAAkB;QAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC9C,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,+EAA+E;IAC/E,MAAM,QAAQ,GAA6B;QACzC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACtD,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACtD,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACtD,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;QACnC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC1D,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC/C,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;QACzC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACjD,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;KAC5C,CAAC;IAEF,iEAAiE;IACjE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAExF,MAAM,KAAK,GAAa;QACtB,6EAA6E;QAC7E,sDAAsD;QACtD,EAAE;QACF,IAAI;QACJ,2EAA2E;QAC3E,kFAAkF;QAClF,IAAI;QACJ,8BAA8B;QAC9B,gFAAgF;QAChF,KAAK;QACL,EAAE;KACH,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,6DAA6D;QAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,GAAG,IAAI,IAAI,QAAQ,KAAK,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,yBAAyB,CAAC,SAAsB;IACvD,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAa;QACtB,sCAAsC;QACtC,EAAE;QACF,4FAA4F;QAC5F,yFAAyF;QACzF,+BAA+B;QAC/B,EAAE;QACF,2FAA2F;QAC3F,qFAAqF;QACrF,EAAE;QACF,8FAA8F;QAC9F,kDAAkD;QAClD,EAAE;KACH,CAAC;IAEF,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,uBAAuB,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;YAAE,SAAS;QAC7C,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,SAAS,IAAI;IACX,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;IAE3D,uBAAuB;IACvB,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mBAAmB;IACnB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAC5D,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,UAAU,GAAG,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,uCAAuC,cAAc,yBAAyB,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAE7C,oDAAoD;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAEtD,oFAAoF;IACpF,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;IACnE,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,aAAa,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAEzC,uDAAuD;IACvD,MAAM,cAAc,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;IAEjE,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,uBAAuB,cAAc,CAAC,IAAI,WAAW,YAAY,GAAG,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CACT,mGAAmG,CACpG,CAAC;IAEF,iBAAiB;IACjB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAW,CAAC;IAC7D,MAAM,QAAQ,GAAa;QACzB,kCAAkC,OAAO,EAAE;QAC3C,EAAE;QACF,uBAAuB,GAAG,6DAA6D;QACvF,yDAAyD;QACzD,EAAE;QACF,8FAA8F;QAC9F,0FAA0F;QAC1F,EAAE;QACF,KAAK;QACL,EAAE;QACF,uBAAuB,EAAE;QACzB,EAAE;QACF,KAAK;QACL,EAAE;QACF,uBAAuB,CAAC,MAAM,CAAC;QAC/B,EAAE;QACF,KAAK;QACL,EAAE;QACF,kBAAkB,CAAC,MAAM,CAAC;QAC1B,EAAE;QACF,KAAK;QACL,EAAE;QACF,sBAAsB,CAAC,MAAM,CAAC;QAC9B,EAAE;QACF,KAAK;QACL,EAAE;QACF,gBAAgB,CAAC,MAAM,CAAC;QACxB,EAAE;QACF,KAAK;QACL,EAAE;QACF,mBAAmB,EAAE;QACrB,EAAE;QACF,KAAK;QACL,EAAE;QACF,iBAAiB,CAAC,MAAM,CAAC;QACzB,EAAE;QACF,KAAK;QACL,EAAE;QACF,qBAAqB,CAAC,SAAS,CAAC;QAChC,EAAE;QACF,KAAK;QACL,EAAE;QACF,eAAe,CAAC,UAAU,CAAC;QAC3B,EAAE;QACF,KAAK;QACL,EAAE;QACF,yBAAyB,CAAC,SAAS,CAAC;QACpC,EAAE;QACF,KAAK;QACL,EAAE;QACF,oBAAoB,CAAC,MAAM,CAAC;KAC7B,CAAC;IAEF,sDAAsD;IACtD,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAC1E,CAAC;IACF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAC7D,QAAQ,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QACrF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,0FAA0F;QAC1F,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,eAAe,EAAE,CAAC;YAC9C,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,UAAU,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAE1C,eAAe;IACf,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IACvD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;IACpE,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,IAAI,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/project-build",
3
- "version": "1.0.119",
3
+ "version": "1.0.120",
4
4
  "description": "Build tools and management scripts for SE Studio projects",
5
5
  "repository": {
6
6
  "type": "git",
@@ -67,7 +67,7 @@
67
67
  "change-case": "^5.4.4",
68
68
  "chroma-js": "^3.2.0",
69
69
  "contentful-management": "^12.2.0",
70
- "dotenv": "^17.3.1"
70
+ "dotenv": "^17.4.0"
71
71
  },
72
72
  "devDependencies": {
73
73
  "@types/chroma-js": "^3.1.2",
@@ -4,7 +4,7 @@ description: Guidelines for authoring HTML content in HtmlComponent CMS entries.
4
4
  license: Private
5
5
  metadata:
6
6
  author: se-core-product
7
- version: "1.0.0"
7
+ version: "1.1.0"
8
8
  ---
9
9
 
10
10
  # HtmlComponent Authoring Guide
@@ -21,7 +21,7 @@ metadata:
21
21
  docs/cms-guidelines/html-component-style-guide.md
22
22
  ```
23
23
 
24
- This file contains the exact colour names, typography class names, grid configuration, and custom utilities available for that specific project. It is derived from `tailwind.config.json` and `globals.css` — always consult it before writing any HTML.
24
+ This file contains the exact colour names, typography class names, grid configuration, confirmed-safe Tailwind utilities, and custom utilities available for that specific project. It is derived from `tailwind.config.json`, `globals.css`, and the compiled source files — always consult it before writing any HTML.
25
25
 
26
26
  If the file does not exist, generate it first:
27
27
 
@@ -30,15 +30,27 @@ If the file does not exist, generate it first:
30
30
  pnpm cms-generate-html-style-guide
31
31
  ```
32
32
 
33
+ **Ensure the rawHtml safelist is active.** The style guide generator also writes `src/generated/cms-rawhtml-safelist.css` containing `@source inline(...)` directives that force common spacing utilities into the compiled CSS bundle. This file must be imported once in `src/app/globals.css`:
34
+
35
+ ```css
36
+ /* Add this line near the top of globals.css */
37
+ @import "../generated/cms-rawhtml-safelist.css";
38
+ ```
39
+
40
+ Without this import the safelist has no effect and the spacing classes in the Confirmed Safe list may not be compiled.
41
+
42
+ **Keep your working files in the project directory.** Write your `component.html`, `component.css`, and `component.js` files to a persistent location such as `/home/nick/test/cmsedit/<page-name>/` — not to `/tmp`. Files in `/tmp` are lost between sessions and cannot be reviewed or version-controlled.
43
+
33
44
  ---
34
45
 
35
46
  ## HtmlComponent Fields
36
47
 
37
48
  | Field | Required | Type | Purpose |
38
49
  |-------|----------|------|---------|
50
+ | `cmsLabel` | ✓ | Text | Internal label. **Set this immediately after creating the entry** — use a descriptive value like `"meridian-pricing-grid"` or `"demo-hero"`. The Contentful UI shows only this name; defaults like "New Hero" are useless at scale. |
39
51
  | `rawHtml` | ✓ | Text | The HTML markup. Use Tailwind classes; never inline `style=` for colours/typography/layout. |
40
- | `customCss` | — | Text | Scoped CSS. Rules are automatically prefixed with `[data-hc-id="<id>"]` — they cannot pollute other components. |
41
- | `customJs` | — | Text | JavaScript loaded via Next.js `<Script>`. Use sparingly. |
52
+ | `customCss` | — | Text | Scoped CSS. Rules are automatically prefixed with `[data-hc-id="<id>"]` — they cannot pollute other components. Use for responsive layout (`@media` queries), `:hover`, `::before`/`::after`, and any utility class not in the confirmed-safe list. |
53
+ | `customJs` | — | Text | JavaScript loaded via Next.js `<Script>`. A `hcRoot` variable pointing to this component's root element is automatically injected — use it to scope all queries. Use sparingly. |
42
54
  | `markdownContent` | — | Text | Plain text for search indexing. **Always fill this** so the component appears in site search. |
43
55
  | `isHero` | — | Boolean | `true` if the HTML contains an `<h1>`. Moves this block to the top of the page content flow. |
44
56
  | `fullWidth` | — | Boolean | `true` for edge-to-edge (full-bleed) layouts that break out of the column grid. |
@@ -62,7 +74,7 @@ pnpm cms-generate-html-style-guide
62
74
  - ❌ `class="text-[48px] font-semibold"`
63
75
  - ✓ `class="h2"`
64
76
 
65
- 4. **Respect the grid.** Wrap content in `content-cols-grid` and use `col-span-*` / `col-start-*` to align with other sections.
77
+ 4. **Use the two-layer grid structure.** Every section needs an outer `container-cols-grid` wrapper (for page margins) and an inner `content-cols-grid` wrapper (for the 12-column content grid). See [Grid & Layout](#grid--layout).
66
78
 
67
79
  ---
68
80
 
@@ -103,33 +115,60 @@ Pick from the named type styles in the style guide. Apply directly to the elemen
103
115
  </div>
104
116
  ```
105
117
 
106
- Available RTF classes: `rtf-standard`, `rtf-article`, `rtf-article-right`, `rtf-legal`.
118
+ Available RTF classes: `rtf-standard`, `rtf-article`, `rtf-article-right`, `rtf-legal`, `rtf-embedded-entry`.
107
119
 
108
120
  ---
109
121
 
110
122
  ## Grid & Layout
111
123
 
112
- HtmlComponent content lives inside the site's `Section` component, which provides the outer grid. To position content within the grid:
124
+ Every `HtmlComponent` section uses a **two-layer grid structure**. Without the outer layer, content has no page margins and elements stretch edge-to-edge.
113
125
 
114
126
  ```html
115
- <!-- Standard: wrap in content-cols-grid, span columns -->
116
- <div class="content-cols-grid">
117
- <div class="col-span-full laptop:col-start-2 laptop:col-span-10">
118
- <!-- content -->
127
+ <!-- Required boilerplate for every section -->
128
+ <div class="w-full container-cols-grid container-rows-grid container-row-6-12 bg-dark text-light">
129
+ <div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">
130
+ <!-- col-span-* / laptop:col-start-* content here -->
119
131
  </div>
120
132
  </div>
121
133
  ```
122
134
 
123
- Common column spans (all on a 12-column laptop grid):
135
+ **How the layers work:**
136
+
137
+ | Layer | Classes | Role |
138
+ |-------|---------|------|
139
+ | Outer | `container-cols-grid` | 3-column grid: `[margin \| content \| margin]`. Background colour and edge-to-edge visuals go here. |
140
+ | Outer | `container-rows-grid container-row-6-12` | Adds vertical spacing rows. Replace `container-row-6-12` with the spacing value you need (see table below). |
141
+ | Inner | `col-start-2 col-span-1` | Places the inner div in the centre content column (skips the margin columns). |
142
+ | Inner | `row-start-2 row-span-4` | Places the inner div in the content rows (skips the spacing rows). |
143
+ | Inner | `content-cols-grid` | Creates the 12-column content grid. `col-span-*` / `laptop:col-start-*` work inside here. |
144
+
145
+ ### Vertical spacing values
146
+
147
+ Use `container-row-6-*` classes for bottom spacing. The values below all appear in the project's compiled source files and are guaranteed to be in the CSS bundle (confirmed via Tailwind JIT source scan).
148
+
149
+ | Class | Bottom space | Use for |
150
+ |-------|-------------|---------|
151
+ | `container-row-6-6` | 24px | Tight spacing |
152
+ | `container-row-6-8` | 32px | |
153
+ | `container-row-6-10` | 40px | |
154
+ | `container-row-6-12` | 48px | **Standard default** |
155
+ | `container-row-6-20` | 80px | Generous spacing |
156
+ | `container-row-6-24` | 96px | Hero / large sections |
157
+
158
+ For top spacing, source-confirmed values are `container-row-1-10` (40px), `container-row-1-24` (96px), `container-row-1-40` (160px).
159
+
160
+ > All values in the tables above appear in the project's source files and are compiled by Tailwind JIT. If you need a value not listed, use `padding-top` / `padding-bottom` in `customCss` instead — do not guess at unlisted `container-row-*` values as they may not be compiled.
161
+
162
+ ### Column spans (inside the inner div)
124
163
 
125
164
  | Use | Classes |
126
165
  |-----|---------|
127
166
  | Full width | `col-span-full` |
128
- | Centered (one column margin) | `laptop:col-start-2 laptop:col-span-10` |
167
+ | Centered (one column margin each side) | `laptop:col-start-2 laptop:col-span-10` |
129
168
  | Left half (text) | `laptop:col-start-2 laptop:col-span-4` |
130
169
  | Right half (visual) | `laptop:col-start-7 laptop:col-span-5` |
131
170
 
132
- For **full-bleed** content (background extends edge to edge), set `fullWidth: true` on the entry. The grid wrapper is removed and you control the full viewport width.
171
+ For **full-bleed** content (background extends edge to edge), set `fullWidth: true` on the entry instead of using the two-layer structure. The outer grid is removed and you control the full viewport width.
133
172
 
134
173
  ---
135
174
 
@@ -144,45 +183,88 @@ All breakpoints are mobile-first. Use prefixes to override at larger sizes:
144
183
  | `laptop:` | 1024px |
145
184
  | `desktop:` | 1440px |
146
185
 
147
- ```html
148
- <div class="flex flex-col laptop:flex-row gap-6">...</div>
149
- ```
186
+ ---
187
+
188
+ ## Tailwind JIT Constraint
189
+
190
+ > **Critical — read before writing any classes.**
191
+
192
+ Tailwind only includes CSS for classes it finds in compiled source files (`.tsx`, `.ts`, `.css`). Classes written inside `rawHtml` CMS strings are **never scanned** — if a class isn't already used somewhere in the codebase, it silently has no effect.
193
+
194
+ **Rule: only use `tablet:` / `laptop:` prefixes that appear in the project style guide's Confirmed Safe Tailwind Utilities section** — they are proven to be in the compiled bundle. For any responsive behaviour not listed there, use `customCss` with `@media` queries instead.
195
+
196
+ For non-responsive utility classes, check the **Confirmed Safe Tailwind Utilities** section in the project style guide (`docs/cms-guidelines/html-component-style-guide.md`). These are extracted from the compiled source and are guaranteed to work. If a class isn't listed, use `customCss`.
150
197
 
151
198
  ---
152
199
 
153
200
  ## Scoped CSS (`customCss`)
154
201
 
155
- Use `customCss` only for styles impossible with Tailwind (complex `:hover`, `::before`/`::after`, third-party widget overrides).
202
+ Use `customCss` for:
203
+ - **Responsive layout** — `@media` queries for flex direction, grid column counts, show/hide (see Tailwind JIT constraint above)
204
+ - Complex `:hover`, `::before`/`::after` interactions impossible with Tailwind
205
+ - Any utility class not in the project's confirmed-safe list
156
206
 
157
- Rules are automatically scoped to this entry's `data-hc-id` attribute — write selectors without the prefix:
207
+ Rules are automatically scoped to this entry's `data-hc-id` attribute — write selectors relative to the component root:
158
208
 
159
209
  ```css
160
- /* In customCssthis gets scoped to [data-hc-id="<id>"] automatically */
210
+ /* Responsive layoutuse @media instead of tablet:/laptop: in rawHtml */
211
+ @media (min-width: 768px) {
212
+ .my-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
213
+ }
214
+ @media (min-width: 1024px) {
215
+ .my-card { flex-direction: row; }
216
+ }
217
+
218
+ /* Hover and pseudo-elements */
161
219
  .my-card:hover {
162
220
  transform: translateY(-4px);
163
221
  transition: transform 0.2s ease;
164
222
  }
165
-
166
- ::before {
167
- content: '';
168
- display: block;
169
- }
170
223
  ```
171
224
 
172
225
  Never redeclare colours or typography in `customCss` — those already exist as Tailwind classes.
173
226
 
174
227
  ---
175
228
 
229
+ ## Custom JavaScript (`customJs`)
230
+
231
+ The renderer automatically injects a `hcRoot` variable pointing to this component's own `[data-hc-id]` element before your script runs. **Always use `hcRoot` as the root for DOM queries** — never `document.querySelector('[data-hc-id]')`, which matches the first component on the page, not this one.
232
+
233
+ ```js
234
+ // ✓ Correct — hcRoot is scoped to this component automatically
235
+ var btns = hcRoot.querySelectorAll('.my-btn');
236
+ btns.forEach(function (btn) {
237
+ btn.addEventListener('click', function () {
238
+ // toggle state…
239
+ });
240
+ });
241
+
242
+ // ✗ Wrong — querySelector matches the FIRST [data-hc-id] on the page
243
+ var section = document.querySelector('[data-hc-id]');
244
+ ```
245
+
246
+ **Rules:**
247
+ - Use `hcRoot.querySelector` / `hcRoot.querySelectorAll` for all DOM lookups.
248
+ - Keep scripts small and self-contained — no module imports, no global state.
249
+ - Avoid `document.getElementById` unless the ID is guaranteed unique across the whole page.
250
+ - Default `scriptStrategy` is `afterInteractive` — runs after page hydration. Use `lazyOnload` for non-critical third-party widgets.
251
+
252
+ ---
253
+
176
254
  ## Common Patterns
177
255
 
256
+ All patterns use the mandatory two-layer grid structure.
257
+
178
258
  ### Centered text block
179
259
 
180
260
  ```html
181
- <div class="content-cols-grid">
182
- <div class="col-span-full laptop:col-start-2 laptop:col-span-10 space-y-6">
183
- <h2 class="h2">Section Heading</h2>
184
- <div class="rtf-standard">
185
- <p>Body copy goes here.</p>
261
+ <div class="w-full container-cols-grid container-rows-grid container-row-6-12">
262
+ <div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">
263
+ <div class="col-span-full laptop:col-start-2 laptop:col-span-10 flex flex-col gap-6">
264
+ <h2 class="h2">Section Heading</h2>
265
+ <div class="rtf-standard">
266
+ <p>Body copy goes here.</p>
267
+ </div>
186
268
  </div>
187
269
  </div>
188
270
  </div>
@@ -191,39 +273,52 @@ Never redeclare colours or typography in `customCss` — those already exist as
191
273
  ### Two-column (text + image)
192
274
 
193
275
  ```html
194
- <div class="content-cols-grid gap-y-12">
195
- <div class="col-span-full laptop:col-start-2 laptop:col-span-4 flex flex-col gap-6">
196
- <h2 class="h2">Heading</h2>
197
- <p class="p1">Supporting description.</p>
198
- </div>
199
- <div class="col-span-full laptop:col-start-7 laptop:col-span-5">
200
- <img src="..." alt="..." class="w-full rounded-lg" />
276
+ <div class="w-full container-cols-grid container-rows-grid container-row-6-12">
277
+ <div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">
278
+ <div class="col-span-full laptop:col-start-2 laptop:col-span-4 flex flex-col gap-6">
279
+ <h2 class="h2">Heading</h2>
280
+ <p class="p1">Supporting description.</p>
281
+ </div>
282
+ <div class="col-span-full laptop:col-start-7 laptop:col-span-5">
283
+ <img src="..." alt="..." class="w-full rounded-lg" />
284
+ </div>
201
285
  </div>
202
286
  </div>
203
287
  ```
204
288
 
289
+ Note: the two columns stack on mobile by default. To flip to side-by-side on tablet, use `customCss`:
290
+ ```css
291
+ @media (min-width: 768px) {
292
+ /* If you need column layout earlier than laptop, use customCss @media */
293
+ }
294
+ ```
295
+
205
296
  ### Coloured card
206
297
 
207
298
  ```html
208
- <div class="content-cols-grid">
209
- <div class="col-span-full laptop:col-start-2 laptop:col-span-10">
210
- <div class="bg-orange text-dark p-8 laptop:p-12 rounded-lg flex flex-col gap-4">
211
- <h3 class="h3">Card Title</h3>
212
- <p class="p2">Supporting text.</p>
299
+ <div class="w-full container-cols-grid container-rows-grid container-row-6-12">
300
+ <div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">
301
+ <div class="col-span-full laptop:col-start-2 laptop:col-span-10">
302
+ <div class="bg-orange text-dark p-8 rounded-lg flex flex-col gap-4">
303
+ <h3 class="h3">Card Title</h3>
304
+ <p class="p2">Supporting text.</p>
305
+ </div>
213
306
  </div>
214
307
  </div>
215
308
  </div>
216
309
  ```
217
310
 
218
- ### Hero (set `isHero: true`)
311
+ ### Hero (set `isHero: true`, `fullWidth: true`)
312
+
313
+ With `fullWidth: true` the outer grid is removed — you control the full viewport width directly:
219
314
 
220
315
  ```html
221
- <!-- fullWidth: true → background goes edge-to-edge -->
222
- <div class="bg-dark text-light">
223
- <div class="content-cols-grid py-16 laptop:py-32">
316
+ <!-- fullWidth: true → no outer grid, you own the full width -->
317
+ <div class="bg-dark text-light w-full">
318
+ <div class="content-cols-grid py-16">
224
319
  <div class="col-span-full laptop:col-start-2 laptop:col-span-10 flex flex-col gap-8">
225
320
  <h1 class="h1">Hero Heading</h1>
226
- <p class="p1 laptop:col-span-6">Subtitle or intro text.</p>
321
+ <p class="p1">Subtitle or intro text.</p>
227
322
  </div>
228
323
  </div>
229
324
  </div>
@@ -231,16 +326,63 @@ Never redeclare colours or typography in `customCss` — those already exist as
231
326
 
232
327
  ---
233
328
 
329
+ ## Images
330
+
331
+ **Do not hardcode Contentful CDN URLs in `rawHtml`.** If the asset is deleted or re-uploaded, the image silently breaks and the CMS has no record of the dependency.
332
+
333
+ For images in `rawHtml`, use a plain `<img>` tag with Contentful's image transformation API for basic optimisation:
334
+
335
+ ```html
336
+ <img
337
+ src="https://images.ctfassets.net/…/image.jpg?w=800&fm=webp&fit=fill"
338
+ srcset="
339
+ https://images.ctfassets.net/…/image.jpg?w=400&fm=webp&fit=fill 400w,
340
+ https://images.ctfassets.net/…/image.jpg?w=800&fm=webp&fit=fill 800w,
341
+ https://images.ctfassets.net/…/image.jpg?w=1200&fm=webp&fit=fill 1200w
342
+ "
343
+ sizes="(max-width: 768px) 100vw, 50vw"
344
+ alt="Descriptive alt text"
345
+ class="w-full rounded-lg"
346
+ loading="lazy"
347
+ />
348
+ ```
349
+
350
+ **Trade-off:** A plain `<img>` does not use Next.js `<Image>` optimisation (no automatic WebP conversion, no LQIP placeholder, no automatic `srcset`). The Contentful image API partially compensates — append `?fm=webp` to serve WebP, `?w=N` to resize, and `?fit=fill` to crop. Always add `loading="lazy"` manually.
351
+
352
+ **Rules:**
353
+ - Always include a descriptive `alt` attribute. Decorative images use `alt=""`.
354
+ - Prefer managing images via a CMS asset field where possible — that creates a tracked dependency. Use `rawHtml` images only for layout-specific embedding that can't be achieved via component fields.
355
+
356
+ ---
357
+
358
+ ## Iteration Expectation
359
+
360
+ **Authoring `rawHtml` without live preview requires iteration.** Expect 4–8 rounds of save → screenshot → fix for a multi-section page. This is normal, not a sign of failure. Approach each round with a focus:
361
+
362
+ 1. **Structure** — does the two-layer grid produce correct page margins?
363
+ 2. **Spacing** — are sections spaced correctly vertically?
364
+ 3. **Responsive** — do cards/columns lay out correctly at tablet and laptop widths?
365
+ 4. **Interactions** — if there's JavaScript, does it work correctly?
366
+
367
+ ---
368
+
234
369
  ## Checklist Before Saving
235
370
 
236
- - [ ] `rawHtml` uses only Tailwind classes no inline `style=` for colours/typography/layout
371
+ > **Visual verification is mandatory**, not optional. Tailwind JIT failures and grid structure issues are invisible without a rendered view. Take a screenshot and check before marking done.
372
+
373
+ - [ ] `cmsLabel` is set to a descriptive, unique value (not the default "New Hero" etc.)
374
+ - [ ] `rawHtml` uses only confirmed-safe Tailwind classes — no inline `style=` for colours/typography/layout
237
375
  - [ ] All colour references use named classes (`text-dark`, `bg-orange`), not hex values
238
376
  - [ ] Typography uses named classes (`h2`, `p1`), not raw `text-[Npx]`
239
- - [ ] Content is wrapped in `content-cols-grid` and positioned with `col-span-*` / `col-start-*`
377
+ - [ ] Content uses the two-layer grid structure (`container-cols-grid` outer + `content-cols-grid` inner)
378
+ - [ ] Responsive layout not covered by the Confirmed Safe list uses `customCss` with `@media` queries (not raw `tablet:` / `laptop:` prefixes in `rawHtml`)
379
+ - [ ] Any Tailwind utility class not in the confirmed-safe list uses `customCss` instead
240
380
  - [ ] `markdownContent` is filled with the plain-text equivalent for search indexing
241
381
  - [ ] `isHero: true` if the HTML contains an `<h1>`
242
382
  - [ ] `fullWidth: true` if the design needs an edge-to-edge background
243
- - [ ] Tested at mobile, tablet, and laptop breakpoints
383
+ - [ ] **Took a screenshot and reviewed the render — no layout bugs visible**
384
+ - [ ] **If interactive: tested the interaction in browser (toggles, tabs, JS)**
385
+ - [ ] Source files (`component.html`, `component.css`, `component.js`) saved to project directory, not `/tmp`
244
386
 
245
387
  ---
246
388
 
@@ -104,7 +104,7 @@ cms-edit set @p0 bottomContent @c4 --links --append
104
104
 
105
105
  **Rich text fields** (body, additionalCopy):
106
106
  ```bash
107
- cms-edit rtf @c1 body "## Why it matters\n\nOur platform helps teams **move faster** with [confidence](https://example.com).\n\n- Instant setup\n- No code required\n- 99.9% uptime"
107
+ printf '## Why it matters\n\nOur platform helps teams **move faster** with [confidence](https://example.com).\n\n- Instant setup\n- No code required\n- 99.9%% uptime\n' | cms-edit rtf @c1 body -
108
108
  ```
109
109
 
110
110
  Markdown support:
@@ -116,13 +116,23 @@ Markdown support:
116
116
  - `` `inline code` ``
117
117
  - `---` for horizontal rule
118
118
 
119
- Use `\n` for newlines when passing multiline Markdown as a shell argument. For long content, use a file or stdin:
119
+ For any content with multiple paragraphs or newlines, use `printf` piped to stdin — `\n` in a double-quoted shell string is **not** interpreted as a newline by bash:
120
120
 
121
121
  ```bash
122
+ # Correct — printf interprets \n properly
123
+ printf '## Why it matters\n\nOur platform helps teams **move faster**.\n\n- Instant setup\n- No code required\n' | cms-edit rtf @c1 body -
124
+
125
+ # Also correct — file input
122
126
  cms-edit rtf @c1 body --file path/to/file.md
123
127
  cms-edit rtf @c1 body - < path/to/file.md
124
128
  ```
125
129
 
130
+ Single-line content (no newlines) can be passed as a quoted argument directly:
131
+
132
+ ```bash
133
+ cms-edit rtf @c1 body "Simple single-paragraph body text with **bold**."
134
+ ```
135
+
126
136
  **Surgical rich text replace** (compliance / quidget tokens — does not re-import the whole field):
127
137
 
128
138
  - Matching is **per Contentful text node** only. If the author split a phrase with bold (e.g. `**Annual fee: **$95`), the string `Annual fee: $95` will **not** match as one piece; use a shorter `--find` or full `rtf … --file`.
@@ -377,8 +387,8 @@ cms-edit read @c0
377
387
  # 4. Update the heading
378
388
  cms-edit set @c0 heading "We build for the future"
379
389
 
380
- # 5. Update the body copy
381
- cms-edit rtf @c0 body "## Our mission\n\nWe help companies **ship faster** and _smarter_.\n\n- Founded in 2018\n- 500+ clients\n- [Join us](/careers)"
390
+ # 5. Update the body copy (use printf for multiline content)
391
+ printf '## Our mission\n\nWe help companies **ship faster** and _smarter_.\n\n- Founded in 2018\n- 500+ clients\n- [Join us](/careers)\n' | cms-edit rtf @c0 body -
382
392
 
383
393
  # 6. Review
384
394
  cms-edit diff
@@ -4,7 +4,11 @@ Use this skill when editing **rich text** fields (body, additionalCopy) and inse
4
4
 
5
5
  ## Rich text (rtf)
6
6
 
7
- - **Replace** body with Markdown: `cms-edit rtf @c1 body "## Heading\n\nParagraph with **bold** and [link](https://example.com)."`
7
+ - **Replace** body with Markdown (single paragraph, no newlines): `cms-edit rtf @c1 body "Simple body with **bold** and [link](https://example.com)."`
8
+ - **Multiline content** — use `printf` piped to stdin; `\n` in a double-quoted shell string is **not** a newline in bash:
9
+ ```bash
10
+ printf '## Heading\n\nParagraph with **bold** and [link](https://example.com).\n' | cms-edit rtf @c1 body -
11
+ ```
8
12
  - Use `--file path/to/file.md` or stdin (`-`) for long content.
9
13
  - Markdown supported: headings, bold/italic, links, lists, blockquote, inline code, `---`.
10
14
 
@@ -15,6 +19,8 @@ Use **set** for scalar and link fields; use **rtf** only for rich text fields.
15
19
  - **Append** an embedded entry: `cms-edit rtf embed @c1 body <entry-id>`
16
20
  - **Insert** at position: `cms-edit rtf embed @c1 body <entry-id> --at 0`
17
21
  - **Asset** embed: `cms-edit rtf embed @c1 body <asset-id> --asset`
22
+ - **Asset layout (optional, requires `--asset`):** `--align left|center|right` or `--center` (same as `--align center`); `--width-percent <1–100>` for per-embed width without changing the asset globally. Example:
23
+ `cms-edit rtf embed @c1 body <asset-id> --asset --at 12 --align center --width-percent 40`
18
24
 
19
25
  Editing or moving existing embeds is **not supported in v1**.
20
26