@classic-homes/slides 0.5.12 → 0.7.0
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/README.md +1 -1
- package/dist/{chunk-25NZMEQG.js → chunk-HI5ZCAHO.js} +599 -34
- package/dist/chunk-HI5ZCAHO.js.map +1 -0
- package/dist/{chunk-42YDHMNB.js → chunk-ORNJ4CTQ.js} +18 -5
- package/dist/{chunk-42YDHMNB.js.map → chunk-ORNJ4CTQ.js.map} +1 -1
- package/dist/{chunk-6CYZI27I.js → chunk-UKRX7A2V.js} +2 -2
- package/dist/cli.js +4 -4
- package/dist/{echarts-render-2QVSBZ6V.js → echarts-render-GDCT5QAF.js} +17 -3
- package/dist/echarts-render-GDCT5QAF.js.map +1 -0
- package/dist/{images-8N30SsCW.d.ts → images-rkJZtnjl.d.ts} +32 -3
- package/dist/index.d.ts +29 -8
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/{mcp-P3CPIO3H.js → mcp-MG2E7J3I.js} +4 -4
- package/dist/node.d.ts +2 -2
- package/dist/node.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-25NZMEQG.js.map +0 -1
- package/dist/echarts-render-2QVSBZ6V.js.map +0 -1
- /package/dist/{chunk-6CYZI27I.js.map → chunk-UKRX7A2V.js.map} +0 -0
- /package/dist/{mcp-P3CPIO3H.js.map → mcp-MG2E7J3I.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/brand.ts","../src/schema/common.ts","../src/theme.ts","../src/generated/fonts.ts","../src/charts.ts","../src/inline.ts","../src/video.ts","../src/layouts/text.ts","../src/layouts/parts.ts","../src/layouts/types.ts","../src/layouts/data.ts","../src/layouts/diagrams.ts","../src/layouts/media.ts","../src/layouts/index.ts","../src/edit.ts","../src/schema/deck.ts","../src/editor.ts","../src/validate.ts","../src/render.ts","../src/runtime.ts","../src/styles.ts","../src/parse.ts","../src/images.ts"],"sourcesContent":["/**\n * Brand profiles: who a deck speaks for. A profile carries the company name,\n * logos, favicon, default footer and (optionally) a replacement palette.\n * Admins manage profiles; deck authors pick one and may override the words\n * and images, never the colours — that is what keeps decks on-brand.\n */\nimport { colors } from '@classic-homes/theme-tokens';\nimport { getContrastRatio } from '@classic-homes/theme-tokens/contrast';\nimport { z } from 'zod';\nimport { Image, type ImageValue } from './schema/common.js';\n\nconst Hex = z.string().regex(/^#[0-9a-fA-F]{6}$/, 'Use a 6-digit hex colour like #a91c22.');\n\nexport const BrandPaletteSchema = z\n .object({\n primary: Hex.describe('Main accent: rails, bullets, highlights, \"value\" slides.'),\n accent: Hex.describe('Second accent: \"build\" slides and secondary highlights.'),\n dark: Hex.describe('Headings, navy grounds and \"neutral\" slides.'),\n })\n .strict();\nexport type BrandPalette = z.infer<typeof BrandPaletteSchema>;\n\nexport const BrandProfileSchema = z\n .object({\n key: z\n .string()\n .regex(/^[a-z0-9][a-z0-9-]{1,40}$/, 'Lowercase letters, numbers and dashes.')\n .describe('Stable id used by decks (brand.profile).'),\n name: z\n .string()\n .min(1)\n .max(60)\n .describe('Company or division name shown in the logo and tab title.'),\n tagline: z.string().max(80).optional(),\n logo: Image.optional().describe(\n 'Logo for light grounds. Omit to use the Classic Homes mark + name.'\n ),\n logoOnDark: Image.optional().describe('Logo for dark/solid grounds (white version).'),\n favicon: Image.optional().describe('Square icon for the browser tab.'),\n palette: BrandPaletteSchema.optional().describe(\n 'Replaces the Classic Homes colours for this brand.'\n ),\n footer: z.string().max(120).optional().describe('Default footer text on every slide.'),\n })\n .strict();\nexport type BrandProfileInput = z.input<typeof BrandProfileSchema>;\nexport type BrandProfile = z.output<typeof BrandProfileSchema>;\n\n/** Per-deck brand choice and overrides (deck.brand). */\nexport const DeckBrandSchema = z\n .object({\n profile: z.string().optional().describe('Brand profile key; defaults to classic-homes.'),\n name: z.string().min(1).max(60).optional().describe('Override the company name.'),\n tagline: z.string().max(80).optional(),\n logo: Image.optional().describe('Override the logo (light grounds).'),\n logoOnDark: Image.optional().describe('Override the logo for dark grounds.'),\n favicon: Image.optional().describe('Override the browser-tab icon.'),\n footer: z.string().max(120).optional().describe('Footer text on every slide.'),\n })\n .strict();\nexport type DeckBrand = z.output<typeof DeckBrandSchema>;\n\nexport const CLASSIC_HOMES_PALETTE: BrandPalette = {\n primary: colors.red[700],\n accent: colors.teal[700],\n dark: colors.navy[700],\n};\n\nexport const CLASSIC_HOMES_BRAND: BrandProfile = {\n key: 'classic-homes',\n name: 'Classic Homes',\n palette: CLASSIC_HOMES_PALETTE,\n};\n\nexport interface ResolvedBrand {\n key: string;\n name: string;\n tagline?: string;\n footer?: string;\n logo?: ImageValue;\n logoOnDark?: ImageValue;\n favicon?: ImageValue;\n palette: BrandPalette;\n /** True when the palette is the stock Classic Homes one. */\n stock: boolean;\n}\n\n/** Merges defaults ← profile ← deck overrides. Unknown profiles fall back to the default (validation reports them). */\nexport function resolveBrand(\n deckBrand: DeckBrand | undefined,\n brands: BrandProfile[] = []\n): ResolvedBrand {\n const all = [CLASSIC_HOMES_BRAND, ...brands];\n const key = deckBrand?.profile ?? CLASSIC_HOMES_BRAND.key;\n // A registry entry with the default key replaces the built-in one.\n const profile = [...all].reverse().find((b) => b.key === key) ?? CLASSIC_HOMES_BRAND;\n const palette = profile.palette ?? CLASSIC_HOMES_PALETTE;\n return {\n key: profile.key,\n name: deckBrand?.name ?? profile.name,\n tagline: deckBrand?.tagline ?? profile.tagline,\n footer: deckBrand?.footer ?? profile.footer,\n logo: deckBrand?.logo ?? profile.logo,\n logoOnDark: deckBrand?.logoOnDark ?? profile.logoOnDark,\n favicon: deckBrand?.favicon ?? profile.favicon,\n palette,\n stock:\n palette.primary === CLASSIC_HOMES_PALETTE.primary &&\n palette.accent === CLASSIC_HOMES_PALETTE.accent &&\n palette.dark === CLASSIC_HOMES_PALETTE.dark,\n };\n}\n\nexport interface PaletteIssue {\n field: keyof BrandPalette;\n message: string;\n}\n\nconst PAPER = '#faf9f6';\n\n/**\n * Every palette colour is used both as text on the light paper ground and as\n * a solid ground under white text, so each must reach WCAG AA (4.5:1) both ways.\n */\nexport function checkPalette(palette: BrandPalette): PaletteIssue[] {\n const issues: PaletteIssue[] = [];\n for (const field of ['primary', 'accent', 'dark'] as const) {\n const c = palette[field];\n const onPaper = getContrastRatio(c, PAPER);\n const withWhite = getContrastRatio('#ffffff', c);\n if (onPaper < 4.5 || withWhite < 4.5) {\n issues.push({\n field,\n message: `${field} ${c} is too light for text (${onPaper.toFixed(1)}:1 on paper, ${withWhite.toFixed(1)}:1 under white text; both need 4.5:1). Pick a darker shade.`,\n });\n }\n }\n return issues;\n}\n\n/** Validates an admin-supplied profile: schema plus contrast. */\nexport function validateBrandProfile(\n input: unknown\n):\n | { ok: true; profile: BrandProfile }\n | { ok: false; issues: { path: (string | number)[]; message: string }[] } {\n const parsed = BrandProfileSchema.safeParse(input);\n if (!parsed.success) {\n return {\n ok: false,\n issues: parsed.error.issues.map((i) => ({ path: i.path, message: i.message })),\n };\n }\n const contrast = parsed.data.palette ? checkPalette(parsed.data.palette) : [];\n if (contrast.length) {\n return {\n ok: false,\n issues: contrast.map((c) => ({ path: ['palette', c.field], message: c.message })),\n };\n }\n return { ok: true, profile: parsed.data };\n}\n","import { z } from 'zod';\n\n/**\n * Inline-formatted text: **bold**, *highlight*, `code`, [label](url).\n * Never HTML — anything else is escaped at render time.\n */\nexport const Text = z\n .string()\n .describe(\n 'Inline text. Supports **bold**, *highlight* (brand accent), `code`, [label](url) and newlines.'\n );\n\nexport const Track = z\n .enum(['value', 'build', 'neutral'])\n .describe('Accent colour for the slide: value = red, build = teal, neutral = navy.');\n\nexport const Background = z\n .enum(['paper', 'navy', 'slate', 'red', 'teal', 'plum', 'grey', 'stone'])\n .describe(\n 'Slide ground. \"paper\" is the default light grid; the others are solid brand colours with white text.'\n );\n\nexport const Image = z.preprocess(\n (v) => (typeof v === 'string' ? { src: v } : v),\n z.object({\n src: z\n .string()\n .min(1)\n .describe(\n 'Relative file path (resolved from the deck file), https URL, data: URI, or asset:<id> in hosted decks.'\n ),\n alt: z\n .string()\n .default('')\n .describe('Describe the image for screen readers. Empty only for pure decoration.'),\n fit: z\n .enum(['cover', 'contain'])\n .default('cover')\n .describe('cover crops to fill; contain shows the whole image.'),\n size: z\n .enum(['fill', 'natural'])\n .default('fill')\n .describe(\n 'fill stretches to the layout slot; natural keeps small images (logos, badges) at their own size.'\n ),\n focus: z\n .string()\n .optional()\n .describe('CSS object-position used when cropping, e.g. \"top\", \"center 30%\".'),\n })\n);\nexport type ImageInput = z.input<typeof Image>;\nexport type ImageValue = z.output<typeof Image>;\n\nexport const Item = z.preprocess(\n (v) => (typeof v === 'string' ? { text: v } : v),\n z.object({\n text: Text,\n sub: Text.optional().describe('Smaller secondary line under the item.'),\n })\n);\nexport type ItemValue = z.output<typeof Item>;\n\nexport const Marker = z.enum(['square', 'check']).default('square').describe('Bullet style.');\n\n/** Fields every slide can carry regardless of layout. */\nexport const baseSlide = {\n id: z\n .string()\n .regex(/^[a-z0-9][a-z0-9-]*$/)\n .optional()\n .describe('Stable slug for this slide (used by editors and agents to address it).'),\n track: Track.optional(),\n background: Background.optional(),\n notes: z\n .string()\n .optional()\n .describe(\n 'Speaker notes. Blank lines split paragraphs; \"- \" lines become bullets. Put detail here, not on the slide.'\n ),\n time: z.string().optional().describe('Timing cue shown in the notes panel, e.g. \"4:00 · 2 min\".'),\n step: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n 'Journey step this slide belongs to. Draws the vertical STEP rail. Requires deck.journey.'\n ),\n stepDone: z.boolean().optional().describe('Show the step rail with a completed check mark.'),\n showJourney: z\n .boolean()\n .optional()\n .describe(\n 'Show the compact \"you are here\" journey strip at the top (uses deck.journey and step).'\n ),\n hidden: z\n .boolean()\n .optional()\n .describe('Skip this slide when presenting and exporting (kept in the editor).'),\n backgroundImage: Image.optional().describe(\n 'Full-bleed photo behind the slide. Best on title, section and statement slides.'\n ),\n overlay: z\n .enum(['dark', 'light', 'brand'])\n .optional()\n .describe('Tint over the background image so text stays readable (default dark).'),\n};\n","/**\n * Brand layer: colour tokens, fonts and logo. Colours come from\n * @classic-homes/theme-tokens so decks follow the design system instead of\n * carrying hand-copied values.\n */\nimport { colors } from '@classic-homes/theme-tokens';\nimport type { BrandPalette } from './brand.js';\nimport { FONTS } from './generated/fonts.js';\n\n/**\n * Slide palette. Mostly brand tokens used as-is; the few surface tints\n * (paper, soft accents) are deck-specific and derived here.\n */\nexport const PALETTE = {\n red: colors.red[700],\n redLogo: colors.red[500],\n teal: colors.teal[700], // brand teal 500 fails AA as small text on paper; 700 passes\n tealFill: colors.teal[700],\n navy: colors.navy[700],\n plum: colors.plum[700],\n sage: colors.sage[600],\n stone: colors.stone[700],\n grey: colors.gray[600],\n ink: colors.navy[700],\n inkSoft: colors.gray[600],\n inkFaint: colors.gray[500],\n} as const;\n\n/**\n * CSS custom properties for a deck. A brand palette replaces the three accent\n * colours (primary → --red, accent → --teal, dark → --navy/--ink); the soft\n * tints are mixed from them so custom brands stay coherent.\n */\nexport function tokensCss(palette?: BrandPalette): string {\n const p = PALETTE;\n const primary = palette?.primary ?? p.red;\n const accent = palette?.accent ?? p.teal;\n const dark = palette?.dark ?? p.navy;\n const custom = !!palette && palette.primary !== p.red;\n return `:root{color-scheme:light;\n--paper:hsl(40 20% 97.5%);--paper-2:#fff;--paper-3:hsl(60 11% 96%);\n--ink:${dark};--ink-soft:${p.inkSoft};--ink-faint:${p.inkFaint};\n--line:hsl(210 12% 80%);--line-strong:hsl(200 14% 55%);--line-faint:hsl(210 14% 90%);\n--red:${primary};--red-logo:${custom ? primary : p.redLogo};--red-soft:${custom ? `color-mix(in srgb,${primary} 8%,#fff)` : colors.red[50]};\n--teal:${accent};--teal-fill:${accent};--teal-soft:${custom ? `color-mix(in srgb,${accent} 8%,#fff)` : colors.teal[50]};\n--navy:${dark};--slate:${palette ? `color-mix(in srgb,${dark} 75%,#fff)` : colors.navy[600]};--plum:${p.plum};--sage:${p.sage};--stone:${p.stone};--grey:${p.grey};\n--grid:hsl(196 30% 20% / .03);\n--shadow:0 1px 2px hsl(196 25% 20% / .04),0 6px 18px -10px hsl(196 25% 20% / .12);\n--font-display:\"Spectral\",Georgia,\"Times New Roman\",serif;\n--font-body:\"Figtree\",system-ui,-apple-system,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;\n--font-mono:ui-monospace,\"SF Mono\",\"Cascadia Code\",\"Roboto Mono\",Menlo,Consolas,monospace;\n--slide-pad-x:clamp(24px,4vw,96px);--slide-pad-y:clamp(28px,4vh,56px);\n/* Grow with the screen, reserving height for titles and footers on wide, short windows. */\n--maxw:calc(200vh - 176px)}`;\n}\n\nexport function fontsCss(): string {\n const face = (family: string, style: string, weight: string, key: string) =>\n `@font-face{font-family:'${family}';font-style:${style};font-weight:${weight};font-display:swap;src:url(data:font/woff2;base64,${FONTS[key]}) format('woff2')}`;\n const out = [face('Figtree', 'normal', '300 900', 'Figtree-variable')];\n for (const style of ['normal', 'italic']) {\n for (const weight of ['400', '500', '600']) {\n out.push(face('Spectral', style, weight, `Spectral-${style}-${weight}`));\n }\n }\n return out.join('\\n');\n}\n\nconst LOGO_PATHS = [\n 'M9.902 16.6c.3.7 1.7.8 1-.6-.6-1.4-2.3-5.1-6.1-6.3-1.7-.5-3.7.4-4.3 1.6-.4.7-1.1 2.9.5 4.3.8.7 1.9 1.2 3.6 1 .4-.1.9-.5.6-.8-.5-.4-1.9-1.7-1.1-2.7.7-.8 1.4-.6 2-.3.4.2 2.1 1 3.7 3.6l.1.2z',\n 'M14.602 16.6c-.3.7-1.7.8-1-.6.6-1.4 2.3-5.1 6.1-6.3 1.7-.5 3.7.4 4.3 1.6.4.7 1.1 2.9-.5 4.3-.8.7-1.9 1.2-3.6 1-.4-.1-.9-.5-.6-.8.5-.4 1.9-1.7 1.1-2.7-.7-.8-1.4-.6-2-.3-.4.2-2.1 1-3.7 3.6l-.1.2z',\n 'M12.202 0c.7 1.3 2.1 3.2 2.3 5.3.1 1.5-.8 8.3-2.3 11.7-1.5-3.5-2.4-10.3-2.3-11.7.2-2.1 1.6-4 2.3-5.3z',\n 'M9.002 18.1c-.8 0-.7.8-.1.8h6.7c.7 0 .7-.8-.1-.8h-6.5z',\n 'M13.802 24.8c-1.1-1.1-.9-4.6-.9-4.6h-1.3s.2 3.6-.9 4.6h3.1z',\n 'M14.202 22.5c-.1-.3-.5-1.4-.6-2.3 0-.2.6-.5.7.1.1.6.4 1.6.6 1.9.3.5-.4.9-.7.3z',\n 'M10.302 22.5c.1-.3.5-1.4.6-2.2 0-.3-.5-.6-.7 0-.1.6-.4 1.6-.6 1.9-.3.5.4.9.7.3z',\n];\n\n/** The Classic Homes mark (flower) as inline SVG; colour follows CSS. */\nexport const LOGO_MARK_SVG = `<svg viewBox=\"0 0 25 25\" aria-hidden=\"true\"><g class=\"logo-mark\">${LOGO_PATHS.map(\n (d) => `<path d=\"${d}\"/>`\n).join('')}</g></svg>`;\n\n/** Horizontal Classic Homes lockup (mark + wordmark), mirrors LogoMain in theme-svelte. Colours follow CSS. */\nexport const LOGO_SVG = logoLockup('Classic Homes');\n\n/**\n * Logo lockup from a name. Classic Homes brands (divisions, studios) keep the\n * flower mark; partner brands without a logo file get a clean wordmark so\n * they are never shown under the Classic Homes mark.\n */\nexport function logoLockup(name: string, withMark = true): string {\n const safe = name.replace(/[&<>\"']/g, (c) => `&#${c.charCodeAt(0)};`);\n return `<span class=\"logo${withMark ? '' : ' logo--word'}\" role=\"img\" aria-label=\"${safe}\">${\n withMark ? LOGO_MARK_SVG : ''\n }<span class=\"logo-word\" aria-hidden=\"true\">${safe}</span></span>`;\n}\n","// Generated by scripts/embed-fonts.ts. Do not edit.\nexport const FONTS: Record<string, string> = {\n 'Figtree-variable': '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',\n 'Spectral-italic-400': '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',\n 'Spectral-italic-500': 'd09GMgABAAAAAF6QABEAAAAA6cQAAF4qAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoIiG9xsHJY0BmAAhGAIgWQJnAwRCAqClwCB9jYLhFoAATYCJAOJMAQgBYRgB4tSDIFvG/rVF9g2jZ5hqJ1QKc9mu9poLpCbPsrtgO90/IcKxjFLwHkAlYXr9OL//5OSyhiaFE1DQd3QbT8UCUqI3Msl2FIZo3qpD0yj1DFn9ZrDgiB0cT+4ROf+ii7xhZcgEt5Y7FSUUKTT3sBt6xUNJw2RMvFelMFN9zPnQbavoBruQYtcnwOTE4IyFIvFyQoGeZuLv/GK3FKRdzPwRMIT9dzN79EfizNQ84/FT1Ju9T6p0xk4M0yoOcWp67RbkhLr1mRBEvemir7433g1YLs+qDIscviR5/9/f/A/1z73EWrUV5cS1ZRV/48cHYy/mZU4P89v88+99/HgQSuiYiHaY5g9sXJoL8yJH8EpLCqcW+uqXFZ+l6UDNLeUMdjIFYu65W19q4JVsWhyVAgYpBiF72O+Co8d/1Z9lPr6adRXmF+Jhf99TXvPufCgQTbLNAD4kT39x0OyDKnq9MCXOkTLKQXk1Sq1zzJU0AGbvaeooMwDDrSy0DMNIgy455/8xc9z5y2BHxIMxKMqdGVVlauTFU7W9e80OLDIzFGdtS03DMvdg3ZCTv85RQpQIY0VOaDI73Mj13VrKw/hUnaEpJ9CKY+T71Zx0lXcVpdpvAL4H9JLaRUxzI9l6La+XAesIhSMLrniUFdVydiGlmUAaqQh7c4C9QLPPXOS3mfJHacPELJYliF4YLXu9FQfT04hormcPU5S4keyJUe8vqc/Qriyq7WFQk/vx8vYpoURn96LjWAy/1Fn8jC1rMJTf4HsAh2gHGjZSUm/KF18GeYMs7bpScdm+fslHzELc+S+ZJtuEZOn00NdAhGsa6f2c4mAHuDRt+nvvecz3NMjl/bSEnMqSlL32Z2FJUrFhP7Cb0wrZqRNVSIB2BUxCgzhv36vs9m58yguhzK+yraDMAiJkDiELfWxRKF+mocoSpNNopCKOFpR1RsUxvJ/U0uq8d/uS3HSUakAHU/vgGfhodXXSN+jL1lbmtZXSnvco7G8kuz1leYUGFpZaOks+FhaQaUSeDQM5IIOJpA2nJ+vqXn9f8YgB1o5LgQKTtEpegv3ZbyVjtszzrz/pUHRSLalke2VIVlZDkhywJEDHkHMWUKSpYBWTmJaolMR+dzDqb21tx6PTH79smb7/f5d+6fnDphbsruQFIWQWLch9QRyuJQJWVFrFM7tnCJEiREIhTIUKhqB90B9f+Nm/1HYhBDYITxdoDSTLMx3+8LmxTa9FEaGkEoIIkFc9zw/zz2p/rXvCOwy74yqioqqiIiKqvnHcujzvZBQHUvJwJ/77thPvxajMc1XmhEUEKQ4tAjm9vP6MeYKm+snQ1IMShwEcXSqYm3kxItPUPm8WbPyY4E1ABNBRoKSSCmtdBoakQIPNAJN9TiGIo8PBAWlRCRt6p56pNJU9VEdzAaNhnBwIXxSiDU5xD57xJETxB0kFCRuLhMvgSRZ5MqjQAFFinMZQPQgBhAzyASISRDTIGZANM2BOebuRTAwnguE9uVJ9jnOTSZuXwYCxlJJRQ7+TteC9H1mgx6kX3UmA0hRgN6pgMDX/2kwgOwF8QYgBApGxN8FAobxx8+MOnBRQHCg3C8dygp83hlSJY0fK2r4UOUgCjr89Fm7lzo8dtd1F/102lH77bTZOiu0mqfJFOOMMIiJQY1ypfI1QbbXAdlcB5RVPKKjHG9YUAq+0rUq5/8V/z3K6RKqLeIf7IPdfpE+Emk5IexPpfArSjsXyxlibbABMTCJUwA94Vjp5pROwFbgwC84xecBU6EJjpfaPmLeaBwMLj4BIRExCUtS1mzYkrPnyIm7UHGvUt9MkmQpUqXLlCVXd1p5ChQpVkbPwIwGtgLrgZXA4rLvXKi/qoPgHbSXlpel6a9MjZuvjMlbDPi1uEUMUx6iEcDfvnrvtafuu+mys447aLet2qyyxALNpplglCHa9FOvVqWeCuWaJh3idncgK4EEOl9B7gExmWAGFJbuj6SgrApOwED4ABehHY6VPpfDB08oZIEFDoIXJEMPbgKwWWOHIZAGKeAMYZAEsiK3vSLnLYDAjV6skSDS8hl3COQYAVQQ+W9WIHNhHHj0d1x45H0UGD3zVcWRg3NkUFZfZpSilykV79akUOJLn6Afr4wwUwdBGFrki7P4/LOWY9rJA6n7HnseQ4jNniLMDFWaJ9HqktPsGbH+/AVL/tt6C+8ef+eZTh8buvlqTXVZE88mepYevph02uUrk+3MJ9a/1mfnE3djUTeKLe8ORaqVngRtT9vvtkFdbs9i8m5St8iXx0KelwYuaHPGu2ZCD2vBMNw4bbPLCzjcAf1Fjlp0l5rbf+/nBkcbonf6S6uWr/aI1t6xuUk00yK6YPPU6HGpW8mrA+2cRgc86VtdGtpNwbJhXiqwRNUqUUpFtE3aoHFAqLcJtVgGPKMNbWv1ItvtJLbHW9rnAKlDWDvibRxznK2z2Hl0k72n2jmUg3jgWcHhwBvmpqUd1moxliWWlrwMICuRWoWV1TDWwLUWxjrPtV4bbEuwgxUc2wDbdjh2hG3IEpqHR/Y7gHIQ4jDEUYSOI3AmZLELnqfA3jP4nmPpBXZeIvcKideIvcHGW6z9j0h7uckGsj0gBBfmFJPl/yKWoHUNlZSVlIMTLs2mWGzBDynqqUJXLzGm8n+EOk/IGwiNFEuRrUihTBny5YnstVBlAbcy8RoO7i5bjrtQVFu0EJyoliEXmO8k3vVT3l9qH/olzFbZqupOTHDqXvJjG8EgPTH/J1Bg4Y/9GNAI0uOqBSWczO2RdbyqcWNN03xS/Y5SeJ2CtdzQB4jCamxxnj1H1C4LV+gAv8yEnIKouPKoB5Kd9MZJUQZDEO6bWzqBNOPxuR0syxy7ikHFzNTIrl+t/lFzlrJuYKCSwh1Mn6HWjVCnTX/Qe2qPkxQtX8NyRBJDLokMok5sIlHEqJqVtc0O7XUR9NR9bN/907CVfTaSv5jNMDhP5yyjl4MoUfc/XMo/m8bQ95uEByL5QCeTfpm7gRPOT84YC9g0BLYs5UgmMxIgJK3QwjEvzC2ZYVoxBsktdl1iv4s66uWEv+LXAPJxtMM2Ug2ER7pFdY+x3y1peZLxTOhp9zhe05WswP5tTeNnONd5JLQOvOv0RSZ6mpkhpNlbJIcw7UUS27WGOeLLGOFXtyJEM74wyGWkc/l3h5mq0vp2tH3XSUeGbE5TWMTGthQz1cIKPvHLcD+XKHDclUr0lGU2sDiqMmriDGUVvd+cBWCK5m1BUlh0ygeC8B9vvKgznPqrhrUCv0J2DatHWq+83ZZyzSsHNUE/+jicJveHXfTrfodwpgxA1xtafL0Ry2AWZUTDmXoQa9a+xmihMravCoGiBKYG0eqycQi8dUWKN4u8MQyGdgj9uUfhhzTQAR9nVQTdgO3uNTK7JEK+7a5cTv7PallHfsNDl7SiITfjl9LmWFxDraDa6hirf2nv/fJs6qQQ7+fJeVEC1U1CsI2h5K+kY816YTeOqtpiC9CVCUuSHFlr8RYvVNxuxPyeyJVrF9K286UGo79N+BWBBE4klC/U12h9KcDO7MdCSYd2th+VNGwNy+j25KF+5s+egqifE6I8WycvqVqwNcrVge8e5jSp0EHDrqu6MFUwKjhrpMhVSdFAuYZYEg4dVMXxQ1vLOYkYDIwFnSL1ZXasMgegLKWrjURJvEhJ9O78MLifQ5kX/UpbGQodlVBDNtOFMBk/iOMJY7ZCm9kvVCDGxKp5qYV642AkfGdnZenieMZq6I9+g7o5D76rwTKUJDFXAbjw2Yt9OOyajoUmBbLNmrURxTTEUb9Klg+K31gRgW5rHleIrD9u986WfZH7ScpcJKvBuTeanqJkPM5n2OQ67AsTjo1Fa3XIGfS+TK1H3dI3D4efzxhqvpPM5Td0SNa/RSZhAaaXwpvKKg50tlxv4Fw15feqXxjpMpxwUw+EyxOxgISqyd6u6J7Lceu08AUitN+6Rq1+MH842I3ur1fSZngoWxm77qjtw3u5YyilNqqZMhHUeAMv0wXLLVcFUc1Y6lTberyflKiMMnsTRyLNmvS16aBbSubM3Qew/4AZlEMOUbgD+WfHFh76Dzdj2AncWBb70jeQUiZpnWpSxTUjZ3NVMPXdKY2f8yTV3mBh/nRUrRNvg1+xqfl+4lnTCuwO3afzKErwxa7SLXc9vf0f/Jv8NR+7e/67Usyb96QNPzf4d7M6O2HNpYsl+23Ju1Nuw2U2HXo7zLYoim2dDdy63bL9EOyenOVZnTZDWtnyQbdxOayAliYaeTVuow6JtQakIQ830FLuon5Y3xhbotTixFNWeVwdL+CyH9V/jT9iEt1hL4U0xUm1CMuq25LBNr75hbGCMF86rS6pFcs1kxQm6mk/VL6SBbKy+zr1wudcPT6vmAu1HrzY8eS6R35usghpTOunUG4YOeqoinCKikuH3oQhu/Pug5Vwwj/OWlVDOgwXWmW7s8dVehgzrCp3otiFd39wmahrjrxmgoejK0WswiJtP6mIuDM7Zz+mosrRqvMsWU2f9kPwpoARUUrY/IUHsZvB5B08cHlQmEg5w6W3j0PntJpTcJ41qEo/WOeuW5MuPQEoJkY1n817Hnp7yhyktRWQFMeeSFrdzhtN2XYnhckHi9D0RC7eJfOi60I6xxZQ97Dhn/xk8Gb7qtYIPR4peyoTG4r42sGScNMOSp0UUv+ArvvT9N3mbE8b1KKtmXt3DfF5IV4rnb8UVpoW/rR70CoxeuUwRJ88oDgJNH74lbY984HT3Xa7SjYu04k0w9CjihsguoVKpxGSWMmzPpq69KqBKzONmKB75+TyTOYmFnm1tAqrnE/53nqVrzY7378PVjA+mgewxnBKLXYaeO9rs2oHNd/1ap7mFwucquWFMZuw6Ka2fUu28bXCeqMBhQ3G8QSDB+N7QkAIE3lbYhKYBfYswaQQVmAyCGswG/hsEZHDYoc7eyw44MERASdvScENxR07Hp7w4gvzw5b/bViAMES4KCzRhxeIEQuLA+lW6fL3rjkRcCQhkQwjBa7UsP57t2CgYMsikGzYckByYesOjxaxPGj5BChAqpBARQgVv85KiWpIH3pcdQysGQ/PVq8fpH87jgEGow0x1JuHAWQ4jJaQ35fLqVBYBmSWo7YyfJNc5CoXuZ6U22AzG1uAs60obcPZdpR24G8nKnuQ2Rey23Q5ykEO6hpeuim8nSH8nA03DcnHZDUSz79qNs7fpeOCRc0KQviQodHsuLDgSgLxhVjiscbhz0EAEXusPJqwAlqiZ9qRQP0EZ68I4gcUN8BF8fqdwCgCjrgABYsmJcTH6MZJPDF5LGjYoPJUtgmmgxqhRGJMPDthMGApD/NsKYSL0HNNpWvsJSspOde8dcHkOCEAi7M7am4Attt2wM5/jY0DQS8GtsN4gZVlZ0cYt8Rf/QUJEP5rQFhAEBm2lpHdxPpibX4HX4e4O9I4xvkXzvtPpl4r0oprm7GuihMUMCg+TluojM9d2dTMzHTN1NCLctM6KsFECQiBicRQb7zWVrO3mt5qViFl/QV4R2xTfu/5y4q6eljxYTDWQeufaDwEjPjS9SmDQXpjhR5MV9bA1rDlS5UazHUNkF9/q0O2CY9Pj08Fwp31YF1ZhmWzNEtYjD2VCdtYm5CYBSkZm18AJ4uaIdxygTUPPY/aR+kD9cjgfBWBt1NvK3iQ68C16NJcBeQy4yXYgMMRVYLP4yacj2xuBnpaW/l5ksUqBz7Tbh1zlBnpDVdkhAHq1eitULZUGtFC+VNxp4gH08aFpceGpcWEpQbAUqLBkqPCEiPDusVHJNIGHmXpccrSYpWlxihLiV6WHGVmNwhyoIjvG00MQy64D5oT+8c9PtB+VCmPHqzDll1T8g1Uy44lH7JYwTAYKclIQW5a/WCZMKgYl330qy4+ySTd3md83Sb12x9//dOhEwEFYUQaFOgNaxnXrZxWBHwCsAqhBgDwkvGV36EavE+tn9Yp62sBz8yFKnbpBYt49OoRDrltnTB8swUrnM+972GV7Tl883mj3932VuTdjs03nzP6EQ2pw+dimm8+a/SpudLYX8Tim88YvSxMGTAhT/HNpq2w5x67LD9L+OZTRr/dZku4R5h3ToLhV7f1oRDVoh5nej9SH33y2RdfffPdDz/9yjR4hcWKpOIq6wKYMM4NzfjNZwfyTLsWQQMgw33Duqn9lmW51n5unovn5g/U+2w7o0718R3Zwc/zvZzLs3dWTdOMGMOkJziWUQw45MlB7V1sa3MaUn2+FFHLgs8eOm+vdRaYYpgG1fK9oQJeNQ4EX0WAQPkiiAgUN7AoAjEkArA8ECMMIGgNxEgjAFsDGGUEwUmE/tFGEIwBxJgmQXCNIMY2DcAzghjXJNTyoQvXj24NXYqgR0NQhGoI0XMW1RGWlPOoVow0ArA1gFFGEJxE6B9tBMEYQIxpEgTXCGJs0yB4ZmiuHKIEO+oY2XLyxBsCVEW6FfZr/NQ5glTaNa4soFUiqRKKGoYv4Wj8Fmqi6HW9PnaD7M7RMrOQR3RgeYMEJGIEpEN6fggIrEwiRYjfmguUXJieIXzE7vgMjSP38FBFI1A4p4xkgcXD9N+ZMZbC709VQH9jgXp4CveLtB+vLro0/zLhWv5+cDWw1id49i1LAyPB0heKffuBYVmffgN6HJC3phlYjA8U3x3TEShXqEr/b7hELBYZMIGPMLGK9TbIMG0OOeWSRz7oRPeKzetzcu7O/YMIRRji8s0w3hlfCrnCUaFUuCsCFOEKDeNZZ6XzTOdZSgulVed/MIGCr3BxSpQZbImNDjvtssc+xq/ovEZ+A5BGONd9KmwU9o/urwh7p/RvwNOgnzhgXaP33jKLQIMn9IgO/730bHuuBsijbv7iz6PtuL98Cswy1ACH7dGaYF0wthh/SAAlfB7fhG9vvd84rSX8Ev6w+lfnpd5+fknyFPzPQrPcRhdcCoNsbXDQIcfDhRbLLLHDYq1ZVIgsrXTKYTsdicReIxy1y7GIE1nhsiuxctVuJ4xx2jnbkjpjbDblwXsfjMzaSQeM985522MjGnFglRj+AgQKEiykfAgVLkKkKNFi9TeMUb2+GjQyVQBmAww0yGBDDDdUmH4WWaje0iYzPqPssc9qa6y31jptLunyW9S1cTIAs1D7losMJSqRZ9hGtqOLqLTy2bLfuzh7xWySD/KW6pD/kDSErDuc6fOw741KR/raUMIAqPfvSgDaCgh5SnkVO5xp4ZVbib5Wn8HGT/UZ6sNyqFPCBIQPvq/Ah1PAdx8oPPzy3GyxewtTpA+vZDyeDWRc6onsGWsJd4Rb6RVAwuAqIjArphUZiAWHnCzQHbDLF+ZcQ5MI/mFj5cwsNy7XQ7eR/DYD1fRM28SO3O2sMJ0O5xDz9podiix4Zf7+NawR4oqpZkM2Ibz2+1ocZfgiLoIN2vTIDSLHghdu0IH/aXGU+VfpdMj+pE/hyFuyruPfvsdr0ufN9fpWkOiIxsP3uYc3RUYNsWPnLX1cE7OQF+ToP2GYIn1ZVpAsBV7OCGT5O7NDO29Q7chDxqlyQnjrCc9bybKi8UwSnVzEUyITso2c8lKpdlGJQlUNpCOgQ3FakQf6IOexywMiW4+B5DhAn7G2s6moKGidQxShLFYOOLBo1SwCPnspFqmB/MBavES6RvqVRl6M1OTyyIfWxLF6Uaubjz74STJfHatAa6ooghIfFWCsjQY3LiUnIJQukqmmRPXqpThIugTIHI45OeWkShKgTgvFdIfeYX0yijQr7LuHFj5IMcJJVVn5UIgaIOeBm5fKEp3ONQjtsoDZFqnevGS9Te1x6s+QiovVKIaENcKwrFwHw2kZOmq9NWL1oaV2GjLTOeJvmxsqEiQRoGt8T4d/hpJTkj78ViGrhnSuJLpJh1NO6lSW1DkqpsQVnA1JTgMfvvnMNT29zWErMx6ZzSP/4evZZWxizYoWMhjNd9HIY4hKRz10YSHGXdYumLQjWhWQ9VXOWowm5y59adwbyMBKt7VHNUSI4TNyCyo1DifO8VocmyVjySEzwLb0iEi4Lkj1mtvGXAbm6JunkRz6xHmQw0SxIQ/Cibc+Dwtz5+acc2aQLBgpKrM1Pua/Y+uWVnSQwX5UsZb9ggEdMA4dMoqOGI+OmYBOmIhOmYTOmIzOmVLPhY4hq5CRQvHhmxfURF8hw03dJzjFTsHv5qfFTcHfpZZhjloo20xUHp0BGZTEOc5wgQ2X2HCFDdfYcIMNt9hwhw332PAIW9MM2IAtmkcGegUaqSqNZUW0yTPHbbcA58H5IMxcAhgmXtNGiSsS35Mnk40J0IqeGjMePXK7bFwOMq8rff9UVVXWWkqBsGkDvJK/bos51MfRzH6ikCjhYF5wDgGA2y1ZyRu1Fb5UdsAGhkp4CbeRm66jPepLGxUPI5xEOt/V/ojMyOod1EEnlCETfJe+PElXKMLvmdTbPrlyULRy/qGPPIHg0N1dnN8ItjerUk2r8NF+miVgIx1gSy48qJk6KfDWKTr4y8TSnt75A86WM5OH8nKgLt22ykQqp3llEGKv9Fo5pDy6NaXhGDohz9hFvuaKBuWQ7uJO9EXBSFiWQVwxSZc52LbcMuc6xIBaFiSJLgeb+HiPWVxcnVwWhXGJzS3ptNOMou72S4NI0Kr4jLyysWIovnJTJhIHALxhLe3XBGRJ1NwcX+m9r7Eh1ghnGdLZODyX4FyPdwUMtWVCl7esmZyAb795hTWw3uSQ58RduNXSXgppBlNyWW6XvjVj9djQOi/UetSyxXt7HJu27/sMkp52rm/BU/ANfwBeRMoWcLRDmQ4jIiiw5mIMPXSD46RqNr83Up2pBqATpXM2almZJfIRsjzsDlY5sH8phq4MikEyO/OGrBjrNFVWpUWP6+H0yDTSE45bqqw0FpUETeCnqu39WoEwF8+ppt1g6zwLPkcGVHNxj+KLRun4QOd1gdMX1BiksjSZ9hKwdvFciXiFAnAfCOG1Q/RGkeCtU3qXADzgvUP0QZHgo9O7P+EAgBvCZ0Z0F6sFbI6cEREElyEvBnwuDWZGggsbFUUKxC5KEpFkpA7KFMhdWSEdNFw2DlTFQM1lDWogtAx1MdBz2wOyKHbMxr4zNCY/wUxnum9WsHpzuYCQFgIvBVpdEpU11l7FxqvpFrVesGu/0F6gg2DHvaLh5DWcvYaL13BtI7oJdBfsARUdT6/j5XW8vY5PG9FXoJ8w/8eFf6W8fSWFrcJ1ho68WGNV3frooCV70M4e2T9dlVoI6p0mAbIeUJeBzAezngEW/QKMWArai2DXH7C8FSZ/35nDR+oL8futoGyvHZLjxx0dRSMj1vJzQL4nzX37kdUMxyFJJE5ssTJMTnjXZJRIm0e2CSZKlMMb0IxqfgdcJ6jPglQQlr4W8kambD0ysrwbdIQM0rtD6EpIq0Wy50kXw9DOn8ttT1hLkkoie04fqZ6qYt8yDENKDUeekoJ4mYsTdm/hQFFCyZFS7OIsx5HcrzCuVUPFYm4caoID7GF3nkzcpCjxSCYbAweS3Mv4gxUGmH9dI4qBp8acqtBarNp8RXHVapG5kYoFz3OcIMAB7r1sdX0wWK2sI1GEG2wYGSGORPxA5TDmIm69lcWBkIujmhClPips7mASqdjBmCjZgs1iKoqvqqbCqRXmnJ6IoxUStSLqSlU7F7tnPJ1/rjXqT3jxE72cxVw872M643xVLxWFH3IOchHji5rIpl+1tiPgLtmCVcsccFkBScegQpdrlItJXwAa/BwcgAdobQstXA36NRjUJYKhIMKTt1eaSqAu8eC0AeEvVsJIDwA9yggaHAUadFiyu0NAyPiN0QkHDyIdjtq7omZz79leCli56BA9AHzpT6p9T4vK5ZmNT9MTHVgLJS4tOgPyMvwl6rdwkpVPxDOEDRjZsLwye2FteFmF7U6i6li1BV9ZxudIG6G69awzjA4CmxUQtOFfnYQn+5AiPQb1rg3AWthrTI23HdzqIUof7PTNf4edTD9j1jNciMLLHIgwxST1E5KtIUb5iUsD8Tn0+R0IK4nP8WFhbdE756YwaggI+G97MFEePUVPyVrdkrN5/TAbXTYO1FUv/8EdxjvzFm6U1arXhtdstBEioMHlDZERjUKy1WRdqsPLHJ/LriJHoyoTIUd1uUgkaoEtUjXYGRvtnxFw4ASOhHwqu3PA1CVmgrPxIl1m1fCTeAi2HwuV3pWEjZMNBJAd+IEXtARbjWCK0rRxC+GyBtPJxJc3XLOKGrbRvJW1V33bFXpBobGt12PN60WIU4fIERTfetqlOyBp4Rx2l1eBuqfQlaC/a8/kuNAHVJzmm7wgt6nG9QSe8xfCGzFbjFJqkMopGkNzKV3klqMRMRbWy4rcVdE2RaUlzHKgOTivNs7s+oh2CEew8JK1834Ji5tamIWsGejv4y/S0j5lgRgLvfaK/IMzj95S9UBvk4ECdIcZRd7dvM6gfAzZcGLizLXgXg2+eyoEDiNL2DonF6asp36GrzT+JjTnIllgelK5TWvQQfGG0HTc0Zfk37/Of0ChTlzWBzoIkULpuJsBH5+k1yRkEJXQIgkxqipmpJXcQDLvoPXYG245XcEZ0kZlArk2UlnD8Mt5Cr8RMadUZbEkW2+wZMBvpqMyOTXmVJBSUGDKegyaM+pbcjLOFhvMq01PTl4lm7aL4AK26U6saVu6mawlNbRs/WRAJbRBUtS4SmHrlTPSYgN9AEC4yBKMSrEeduwlq1j+28ZlA3RoG6POiKU6Zj/n+yMKJt0SmTSI1laeeRR6r6sGXPK1FSpIiCL9cOo7TSZWOOQasDjZtgighpShCeuN16Lsvipsel5FuF9IeT8avCI6AE8+H+C52z6MfB0GVgebWxbTBJhJSDEv92M9RGWAiIZmNDW8RmHeK5kyrre7GE89GVgppSBQfeBKixO7DgPLqcpaO4FqZuVw3fWSORz8mLYhUpWOWIudV8JVdDnvzfEQ7Ypt3gXZMAA2eIq4dhdnDNYGr70nh4PSMpX193XYNvsHwNyX3iWIexJw6/x8jVrrW9EMpJQP6xVdXMnxbr7lKIp0ghN3UCu3lJ1XlqoafaVmrxscbjSxpGLhhi7JFuyP/n4LGdrDoi1g4OvHUkYCvwXzGlub5oOF3mnoZlA/fuwT6YtFT8WEWhvZBCh/ARbJBg245Yb8QycE/D3iDYYZ6RukZSUkyKJVf00TWUuO6CAVp2+tURbKjzOrGQUxzn4SVKvdNvycOznfHg3iDfUMiAAHnuvS4QNxD2s3/6gGRal/HPgae5I7NAbsjOqAULyoE7BDSdJPzYBYMne718eoQaqt+4IFMmn8K+7AITHck9zJjQSYKDLoaCkDq4SJnGNnsnRgTXV30yNFG8x8icnsLfmgWMghGt1UTfyK/vZc2AvfenVPPwvyWYH+erpI465bmsqjGqseweD7C6qDZtK2EHhsGNPpTmrMAQlMOJhCOoIH5WE8JIsmY1DL1BCwM6Q3c+BfAlm6zt1ZElW6zM1iFAOe8KUga/jfIlAWllZh8gimw8GsnDw8AvpBCXFHgRumBHXykCE8+GYolmC0vvAu3vFcA4chqwrruiX3CAYsb3M6Bb96xBvNWOGy6p6V/Hia+GIfyZY1RfeiQ9xr+VzBxeW3qNpSqe68XvH6u4mD7OroIu4X4EOBGfKN9wgR7/nseJtOV/cm7qhCk8ZGpdYP4pGy1JiTUjqamxPL7HqCj/BXoO7AJ6G0JHV0YcWIjyASeUNWkNsQv0pQ3m65ApvQpSyUR6CaLumKDna4chnpwiszEmqojfzbrHYnc76bMYTEXJnn5FBcLnNJC0CXjEmHmVBSieOU2okOjoqQjM4EwoBbwNTJo2YSa1LpB3a6AqkluOi/IoIS9KAvEied9DiU2vRQDmaalVe/2M35MdQgnnZy4aqL/LkZGQKfJiJNzAATsMROZHKdHiWaYJWrFpSa/uYBrqtn6K7GY3ZdEEcUNu5OmdjbtoZax80jrQQnM1LzKrd7KnLabgCfm9CfMvsXGwE3tNhBprGdm1pso7OReL6Iz6jhZCefm9GN0ZMHdN7gPNUS6nPbpszWZ1M2cA+fIBOfN3cqrXwZbfcWpZ4u30BqJkFUa21JPakszK01D1uqAU2FCnzI3/Fix0JDcGvCzIM2FBZQXjdSgPEpS/IMzuHTEbnOLcqkxP8MrHCQqBFiYlusuJZfRMj9Q2efCnE18N2h06hhv7iSOPfBuaw+bwNqzARSyMLN6Vwhk90KmrnGJh+Ja5Fe43T+tutDdBvBFhcCoLSjVeXPAPvYboWGHzQPWa/wHNX5qVmsHvcv+2IoqNna6WF7if4cemDfmOjRUq8AQNCXFokDQ+m+2j9lEmRBeZmVHhVkam82siWGPEY91dkQz/UNEM5BAs/m7O+OCNGmKDeRjc0ax7ia+E3BJCbzbILtl6Qk2VNMHdOfW/kA+Y723FdfuMAzjk1Nh7/NFbMaZWuSfp7LRvWcfyhAjAf3mFRhxO/8+4Ibj+I/lQIjLYUCXsUlIleNOQPilIc0QFrxT71MCh/AKC4ZsiveSSJ0AXO8YTj+SXKyasPJcQ9m4rCNWn9g6t6Y51FvhIdA9w29Tu2j9FzOaobkMpKVyqQSkFJtgTdIlGWJJfhnj0A1Awqq8KcPsUYAcSS8AcMQ0bH6nFhmbZ2py6zNYbQYT/XG1IM+fYfKM6gwtkRVyMcp+zaX0dUqqlCqJFz14IeA+LAk1KDuoCeeF1KeQd14gfE7LZ+gHrDgivgAXKANie9SWHzxn5c7/nTboNNYQup3lq+BAfEOGqDGdvnjDze23gCVz321Pot+OO0//SOojtNlQGEZdpa/NZqmmjo87rqsbhvFjci4z8zMYN2+8fYv7uAQbnh4Zxd84dVXmp67oT9/aN62hoNxH5n++oJsqFns7gW7UW+2c8aozrtMm0Y+VceYGGTguXrwpr29e21/iI2x37jE1nBjueNokcAJLGDbIgmbllNLQkOFvzf6/v427otg8DfxubPbH1Lx9ut+p2CsLSxeHesX1/u26T8/8h/7ukQAAaP/Wp72qzryJ+nQm+giB0h5nttqj5/JYimUrSz5M/7Ewu9HH37t+/Xc6CotI3/VSt31Z904fcYq3eYkY5VWg4MO1bRpFjQeNz+FylmcEw+aTwcBSEN+VzEhJ1CMV8N28qBHDf0Olyac9qKDeaFgsdxcOd9Yo6xVC//SRSMBo+qFSk5YgmisSMZsRrfWbUXG+xwlA6FE8dqO6cvNQUMAf4lwFC0dSv7HtjRonTXs2a7pTXOjfDvtaKoHDW6/1UK2wqAor4bt4EEPe0cczsGQRfZiY/c6d7OqVl4vbUnPj1hHGtv6BhWi3avb9IMocOCO8K/1lgQK/BzFjG2QIiYSwyjm69/gmq7RzLyB6xNXm7MzYmsksAoe9KYJGe2W9LXCMjJt+kpzSGhF7P6DuBclGVzXy7e36jy13DnOzvb+OCV1mXagVGB+DHnF5M2IBLcc54JBAV4t28ODnkEhnuAX2U10Mr6nUFhi/JX8PEmGTJLhcyhH1E5AOVgjYZBexYTy4OCXPtRxmjPfU8NyOel5y/osnZg22ysJzLZzLCV8E+bcUc52K8xfPMpWoL6DPja/z3z+g+44JGvNCKgqhv9F/SEU/zupKV9He1gRvvmdOXA6/LQ5BpZw3od+hUpB/bdiqngBo+FHFwj5M6E4r4bpFECjuLv+Q9Ug9AcU47XXSgTw8KVqnrm8FBmf7bEvTAZ0y5o6h82RxGwvV+7XLmvsunfTNOUqS5o90+mFOlMlJnWFylrFnuXyyjrLiiXCfZ952D0UiKud1UO6tFvwS4QHuWrVUmQ8EYlZTUGdoXKEG8XVGc5FJw94rfMT/L6YRS2jvdOCpNUB5bssmlvePoHfN/N+qWI3gP5IfNU+M+yypqoc+HmYEWj1AnlC9L+VD/lrhaJnPokFBLgap9FyFmkKEV7A7EYLBgqNDk+ghNrW9mi+wqXUl1Q0qfUSTxEOvRXF7yncy5LanXrOznnUd8+AJbZ0l8Y5y9zEq+ePVG9EsT5RcD5BgRvX1PPLeJAiiWyYlW7DKNnGmPV+V+u9CldhJOJyC0v5+liOxdyV4JofQlHQEEfVhwd61WJc5lDTMfNjKMlsuJn1/EaACb1vPpxoZX+R6WywcswTUBFbfDz7z3ZJ9Cf4GydCTOgqZGPgW8TJB1n/v/bSzF52BuFlfBh6BlUw4f133rtNOVjQFejbf3MXM09Ak6EYEzbn/pWXxMuChNugSp7o8Wap1fynOcyALfz/0n+wBKb5CmShP5eJnwR4EEiJ7it+VBZE4vEyn3FS4UwU66IGB/16tXI9PZT8t4V/ehz7pTl7Iv5jHcbrz6AoDzj+/so33DRoKv2AApzwAL9ppohhJ09hSyBC+pkmGYJNdRr6SlNCxt11JPfkDZ92sHhD1Ra+JBKEb9An+C1CPEenZTNUkGuOXPj35uKczna1ryOgW2ZK86I5Yqrjyr0uu4JUFhBvPG6s4yi87jquhT1n+pKgRNlWnzc4Gtwfx1hIXLywe7XLMT/ZUbfvSO3AV4ZAd4o2oI3spDtwScGsk/or5wZtqxt++rN7LRTh5fsN3UPBWBBU0Kd96Fa/khkeyPP79oNTWmlOMhGOW4oDupLFSL7c7rAIBzzpaq2S/CW5iWCMDpFQUfxdqs/u4vEfLSTD2iIlwmOaegbj6RD31j9csqDYw5xR8j6SKhW1Ivpe8TMQRwGYawwO+N1qgdLlNPP6nOkKjWoFxaL8inNVCBK4JTbuDI9ulXnhCr6nKqgt9afiGkGbN1mtUrG+6C1A3x7Ql0+695lk9QaHwqMiW4C9MPBFJF8hIuMdB/0M+E2cgTgHwDp7RkjoKP6mnAzvt/2bIT3/mHEzjWJRfcG5jecQeMUOzgzreWTQk/QbwC5nKq3SKqUA81aPtBWDxppUDjXjGi7jDKW+lHBM7krluZz5ATqChh1QQ2PimNYEuOXepz4un4bLz/KJWiXr5Y15CXunuEc3q0tebQ96IIAIL8iqwIa5WcLKnKBhzRs317PO6eko3OJn7vzxKVyBMtCiCJYl9CI62+kXZtxZyMB/8m03JmyGSySPJDVa+mcbxRX22VIQ4n6KXyYPzwVENhZ1rJMpbFxgZr+hslmMAmqh7LNbbS3LBqr6dpSyso8CMPsQDCfGMhTqcK6N9fYQEW2x7xLOVcsMAW5d4+/Ki3aSgkxSkkhsEpmVDvAer5EDYSbiFAAzxa1cPXYBGynTKzDHhWj8ZMCzzrEi0oFOrxC8mB+Y1tNFFeCnauHPPzKk262Xyl+Fl1jDIdLzQpuhnAwiSLERTuxriNWduKMqQB/750dqUGEzdyD5n89otMQYiLMArKuH94hYAvsiLxOxHoC1wIvyfmCAWUBW0fyXQqpUi+ILaPBwPRfX6vh2slZfpVXXLqpopvNbtc5Oy2bSipGGj/d4DbQs5OPO9g69UkxfIMvjXQkZq84cTsk0FYmupJRZa46Uy8/wDXbGVJub7ZXx3mB2elzsUgnzLmp2k2mWixiAtwZLpOD+XmHn0s9GaKiZbUxLcTfn6n8CsqDYzeq2qbrDR++i3BQVmFkWLpb6V0bKL2RXdvciJw2FXulPszwaAm/D8citmheE1v2m6YNfWfgHpuhCHlIXt5P5h76REXiaJWyxLSoyUOpDWER7YkkwhMiWemmY14MOSVJMfxYWKBQJfE7fgVJ7pvgivWC/mEMb4C1BcruESCxFAbgRlYJkcw6mY7Z4SPQfDYsg/lUok1nuAtWxyOJNSBCpRGJJonEvE/EKkKlSaHPJi2iYAdW3wscWAe06kTE+QrHLbb/TmQHP+0H5TtWLISpiMwALxDNtjb00K+qlC5+K8NMBcmWRZZt+BE+EiG7E5ICtNhSF3HBVs+oQYDUJCfcl8ZuaxT+SA/S19GhGLmmjNzDPvtdDQywHYK5jJesti3zm3Hsusz3be86toRd/pghdOC2zD53yu1xfNdEsmFUX3iokTAdIgGXOvS6YXU6VSonZibz7iaESf+WSEB2xCYAFK+Fs8lvYpp18Jwq/lrS2sO6kogwF7GlMeusSWYg3T9qJXCWDlh5mqCG/YUSOV51crtvrTsMhV8zceUxlr8gdt8SKz/5gK/1OPgS23NreSRGVeJgzLJp636bf1LO2n/OW+seaDMa6tvtBZ1lQcWDTOTal85H+eows/10PXSxridX9qQ/ay4MnbS69zX3F595eLbhrPCZ8Fjfpgs/Vd5745w7vxBbwR51cbPWM5dWmgNIgrFJqDTKlDTO5kp55LRO2z7G5Paiy8f76LibwBNZhDtL/P4bWF4aD6HdrfAFFeojLZpXEc9msfyZRrQvnDbHZk8x1l2PVVIvYueIfJuF8HrKCnRV6QOKJAjkO1/GopMK4EKrxlaYlWqfXJmMWFRRkAISJCTPzBCARO4M8FfTBD5eEWcaerdk5D8YngstIpRsCY+qwfcGMUlcR9npedHbSZ53bISildVRQbdqyUutg64B+TdLDneeor9MNnjIxIkKJs5K3sQ4OZ6kFExzj7IAPR65NxxiIM+R1vZxJW6sYmYqvvdYpe7wu9JEdBY3lR7juC28uQU2tHKOl0fVHWgve2MFNX2gem1L47hLaSvSWI8zqI/mddaN1vJUXNo0xa8byu4IjQWCLYJ9rAmPx3vBaFPrmMnSt5DcsGhnlxY2qLTeGZL9iyB0mHPqdFvSQ/BcMCUeA+q5FnDLgDuCwB3G417C4c5tupTjsazz4lKnvdajwOUBwhs/3gWhJeFXWKjC/iJMF8HwiNh4Ajc2EpQzi+2jCXpZcn39BZumV6TxDE2EZQLyE9s0VSUkK0kYyOhKLV0yd7Cslo07hOdyNZF8fPuvmZv0wNl7Bb5opVNiFUxgzROj6xdsLSL3fADvMiJC+3lHkMr+HICCR8UzyCgJZT/08GgEZ/GF99np65Ufci+2DF8VXyXMkiQZpKHxobpg8m0Dlc2jFd73uFDB4oYhzIb73wvOzNCHy+vVGEoGGXg4+8iEwLWyWl3ZtKlvmOX++lo796BXtDU4+wS8fv22oxjoHTxHkfPD8Mk1Ivna9kUygMpeBj43ZTKZ7aN/XjOT4LDrmozdcpB86/u1ivHNXXfzzlCdGfZWQmLUPs8d7hMbV8x4Kxis6x6Wof88fyes9bDmaR/iujTD247HNymzW5Bf9ObBmWc5k3jiPPJDlYh909lU7V8nQuT4FIgQ5TkmeNaxuoBOHGk40gHIGzckxvlFpsckVFotSbrUo3Bwb0HtNoRcTniIANo1KA/JDta0l73UecDtxsKqZU6lbKknr6V4Y3TYCq57Z9WMABwVk9lG3Fb/bddDtKEKMIhsGD2q6ED+UdmpcJaMlvi4d1F4bXMdHsc5LUhbRwbCTrAD5BkjUEMBtWDqrwMUPxGoqsRqSGvIZOblWplQU+KjmVSaBYGP4iE4yu4RDLNeMavqsREhoCr2BiQxBZBtOJdb5PsTjt0pD2bX+9mWkoosDxbAVrD+hFStLUmMvE8IdE1H57Io5Q1mb+z14v1jjSVhwwD2i0hBtkJlYqq/ys13kppC8+HIRjil97iZ0inTeiA1rySYpTLFmRTHL8UtBdorcEuoZZxcxxMToGJ8oY7C/c2IFU05d57Cv8Dd3Jm4IXDGPKdRRFm9HXM/QZ78F5kIx3oLLwo7eyuFg6ZJkWDPc2Dysj9YPxWxLo05Ze8gk06VtFV41yHpk1HJbLZEIJCYMPkATFJTZ3QxGhJHSl5pmdXuiDSsTpWvTKcf8QWfY3EhfdjE8lbOSq3JRCFP2Ms6+fd6GVQHUb2lFpoYC/sWJUs1wQ/vS4kRqMYfiJUsbX7cjTM+gqrxaMcfrtwz0OAKemcqKavkcT8Da3+0sbw3GqvwlxqmtDjsf1YmaQcYEnhzAiCxyboVJJxXhn9yGXGRi49trpv71SJeQQQmNzTS10+7RxeWyuMYectkcFEOVVltnlvA9bqHsVaLRIN5vLtGnWQDn6lvwTnAOhaS6w2qfjbezewiF1Yfx9PtYVGURWULGzj8bH4Ef4lwze7Pzwz/nh+EkE+daAbwKXiC+8TUrDr3Z/WYELqXfmAtvgv9KPT3nkyL5R+DJT+BfjG0r2sWVcCM/gOzI5HzGqWpUgfs8fieeXqSCDVLTsiLMu8cxLfvwRZefVz9e8GhB6sNtGgMEsmzjosIk5d74T31Fe75gMD/EFZ34nMX8cu5a6zisuNinobYK8+Z0W2viKhS/OuNmveONfwo1iTOct2m8m/1fSPdg9p/VnrK7/uYI0RlqrzfphYfuoHJHv7NWTctVJOuJ1af7zqw1nGg+XFgYMfi0XIfg54wdHGfaoqlK9rYVFgRHQnkhQOViKyXcwqp/P5Rgn8pcajHf61S/khcGc91/oPKO5Lq4eaVP/WzZ29z8ZEGfKMsu9cgDlc12dF6Am+u6kl94Ndc99zITJfj/SEHh9+zb1Hg34Qc07egbbNpz1DXwgeQ7EfLoyEIxGnjrG8NPL5IY4QhrtkbY5k3WqtQUB0jzkugo9O2B9AIzAc/dGcp46uGuCmhxGRRXFtm1Y4E14jZJaz3VbRpyEzqvt7KlLLer3VXZqtJpz+DzX0dHw5lwvtuGCOTP292yM9uLe53n/GWCtqIE5140maqgJI9+alHzInTnopYpLeczoA+he7DK08PHYYPQKxB2+3tT+hdgOhc1L6Sf8vIg50VkKNbbXi7eFZjX5NX3TKkQ7xzTcqbRJZ5JejkS5sT5TINLMkAc+/X/G0kCquKl/toTbfxtlNVe6eFBTFhVY/3i4XAt33EJEI2JZRH8XH3+pTyK0aKOM+UiN1dkEwIksS2UnN2TCj6wtaIEr2vOXeTxfA5jJUttDjHtFCK70FxYYcwBJA4B1w3pPfYS02y6LiyV+MXC41LNitx6DepBAeGHQyGqTOHh8SxcrsgRUFEcecGo8yvGaxmal95muMembZ3OeO2rJweF/0i3IR1uMaFwXKtKZWWbk5A4rFCX+kNE7S1jUF8Yy2NdsNJLPOlUqcPVPdtlvoOsrpxa1tT85qXREe6UGuCFtugQ2v0wJpN73eVOr6Ojw7D6tE9pE3E/ZIc0MxI8n2DILis+BMXUFc6O2hW2dBBVuckjtpUvSq6JHgGnAleQ6gRLbhHnVVRHRWqBXazUx+sUBrkfFFgFUk84KnBAkiikMMVblCEUm2PfveNLmYojUZcktmlf0xpsNg3rWNfB3yat5cjKWrH2gHJ/ZjMJPvvyKH7X1c4R9CAs5Nta65Bqrd9uF/eHfJrvucI+f59wAie9igsiy/n8l9nqCvbv3TIQSxyQkWvFnhUpcXH6fyITq8SPH4957KrlH+WQ5z5zOZ3RymUfEQjr8dRwTkiCKqD96GWCIot0kll5zsuSaGaT0R/nQt8IaeBOBaAA2X6MZJZYySdU57qEyMU5xFlfsBTzmbz/PGposBHdNKq4ly3l/2yZY0E3ja2tIQxLw0jZNEzOpaLq1bm8Gn6gpuAmnn/r8v6D2C7DJhLn62oCT2Lz84tnIg0Wm8FqmzE3mkIpvcREI4kkk+wVWWPBxnq3gEJVGnmM+WFZAbl+ZaDt3fzS/zSacMtxbiOtE6m1SgVc9oUTXhJT9SmoWA3SP5rvPUrVxG36Yqwad4NFJW/CU3eZHgOTqTRWHu2fg7edEFLp4zVFLhnzmw1mITLMiWb9F8FjTKtl8Y7lTy5MfkVKfZWl/cEu/neacVYJnD2z6kzBpRynvez/Vu2YR/8YOE1YorylOzPvDGm1krj6NITS0ux8wZW8+epI/8h0cB4aKUvX9o+myZr4TsuxmK/t29nvyt+3BEoiX1b3+HaIntw/OlbqEvepuorK1qZkSLvDq+y74zaHT88ez1oOde9U11Z9XsXbU7zwzPT3zixesMW3Oav0uwV16csLNr/dzihmnJ22agf/IWewWONKKgw15aHr5SG5mN01rHWu0rialfp0WfB6WVApZE8dVjuOGNR2n07RJ9E4vDpFvw91N6N3f6VKE6tDMQZd36r0lda5LeuK2Ez4375c3uI5GZl/7+8mi7lZv0iB9dydZDabvJMLrv3WYW2KgxIIUJzjO4r+PDJQHrP5EumkeCHVKtDKAnG+RuwCRjnsRFRhp81cNnyMLq5KgNCPUJL9j7kaHvaoQNZoxobpDhao9EIEZKsETwVeOW3jyIJc9jAXrOsY1VocWr9Ti958pdU1aQT8VKmiL85JSdoe92vYZGtupuBCnCZlpVcOL/QV22mJs8X6D01FbKTPti9UzEK2Kr/kXJsEFs/eo7qSwzulBrFhX7IAn1sj+OajnrxDHNOWMLyQZ+N7VMr1vEw+MsUOcNKrhu9qk9K0raSlsmrHHunEov7dq0K9cj5OxclErvTOVyMpBRJAaVeAYUVjbiK2/8R8ca5q4CA1e4QKcyzOLBJhAeBnBv/RQu6Z9zX+8Xb1U5pAiGzDqLTlk0pNoyxxO4te2nPHKvsP5iF2NIlFie/Eu8jqsVMrf8j3qxQQx7RGqlvq/djFBcl/5bN8olqRV9iUF7eb9T7Q9MD0AOwXM2HyDefwHi3MfxXfSf8C5kqszqNz4zGLYc8oPsdHgvQ/d9F4NOBZ595eVa30dVjkwCcm8nbO0OJEcPIvwF3GK4uJzNZYi+1qFdfH9X07NnCQihilwhb9kng1m62hyQUFD7ASzpsc+RPgN9z7t9ct4P0V+NCaYzSRHeTbrZfKYGEo4w4KCeb6E5cmYXZ0OH8IyXu0sMldTkgKT0LbDvfd2/V0pAmNSDXiAr/+97dr4INxYnkWCXEcryiAL2tSknhC8/c1HUhoNubxnB9xBEb45irmPdmVHCnHsSnvrrTb1Dvk2/pDugOJ7pglXiR+PPsujiCz3GVURyNfTQ+ff/14249flFdFnXATvDfK+cZwwVlaIBoYZWI9gfbUnjxWT21NT29Pz2zv0dx+uZ2JXty9F+E6AdOLBQj/E61DTy7nnOrruKEV2SnTMizPlAbCvKT77CLloNKUyzOGK8p7MSFyfCLnqnLiuY72jb5HgmeDuP8EH7We1NyeUmRPK/M6I7NM6Ex7EmhOgmGYXqRu+mekCZ95vPCX/mtL6hmOHbMd1VAQmxmcbmaF43GyGJ8su6ZJiZmoRL/zZkwes5JH6DXPIjvjLDIY1fP8863lggPz5u9iXNBZsjflepP2dZ+zpSTz/E5HetN2DS5L1gBavbtVloipvCxoOYNpCaWGuajKaS3bnUtA60itIFtN1dW28xq3xiJm3aXPDB7U3ChBct3KG65tcNzJm7JNqVgZ9toWuzXeylvnRrpQV76ol37Qyx/rlZ/16ni9NlGvv6s3mt4crbf+0duD3vld7/6p94ay+/8CGgV/FDVOxd8i/0Z/i65B/shf+ScdvnMYgSDBjgycLEQBWOWP8BR4zCFP0PtCWpoSyf7Vjiw+8I+fRHPby78Fus79zl4jJPvbwb/39Rhg0fe3n/8X3PU6aB6AUb2zv/Z6OAD0dlD3nrQQn1iTTqR6+qTlssppZz2Tm1ID8pY81HvMNGsPbW43yqn+57BIqtDL5vTRH13si2OODtMfdWwWgnonzMqL00yFub7uWApDWmoXsk7mJwepR+bOsaGB4U73rpij/WMMwc0GwJSQ2F6qKeY2e/VuX3mzyWV+BHhdl+JSN/uCF9RTD0zZ/LBM9xU75+/DFfcnNWHnXUeTh8l6QgSYXd57wjbPOuUzNs08u3KRumfB5+GD4YNar7gkK/Gu2Vk68L3MKLpfspkfxRwkf8de33jXc4HyCleP+QlgMtHFpovOD9hHG24Pv2tQqPYuzb3tANkIYNuxEoltaM3zMpBf14y7nbtbKe+nHps/z5+83TMYA/L/WvQEdewg/6gPq14gF9RRGuRrk1Dvnrhrf4C8m2Br15DLmpEgdFjbc9UcgKdP6xsv6AzSpOPrzpCUfqtmt4DKi82vcmpYwhlesKhq6iYCcELIPGD2hChLEdJRjwBLUBt33R37vf7ouYtotsAXm+GMA+L1fxJ1ef91/Nf7Bq21ssgpRhU2AKKQCUrqGFW2Dir3wKAODoUuhTgcdGYgj7oQijQYhCYTgFfKq5AjmWCJgIaFla0p2OagD1hUKppKgyaaq00iImgBXim4sw3sKAr/hnZsWwDn0rhOas+xIjsCE4xasuGg1yqibBB1FZ9xU7f3qLKDPFIwQxcAjnkqciYJfVPHvUg4j66SrQ86Z1Fh4wVoqdpCn7tJAFYN4us+aBhcijYc36uwr/mnJX4/egQkJvwLHlLwNJNiSPE9iuAaJtDew7/JZmOFGHNbkvOomI3nX01ff6YnOoe3zZoaeknjMjIV0/edsVtbvqMGAIbg6m/RtmJnBpWVnLdCclF0c1MUUUzixTmAqkdRuc3NUp96cHShUJIdHQlKYFK3BvbRLNmppW+HiJ49ZzytCmhs5nweBZahLcquogfXQsExYFNn1KSBMKVNDTLccSGI6shOgG0ITds0bdG2B40lFYINuCrjQjEAJco1hWt4qkRVMAJpfpxAvpIpMqgxRPvK2zu1NC6qyBqJivqQ27QJW2lANbzca8KWiaExi8ADykEIYdziQGrrkDNQo14imQ+6TOrerqEm0yiAMJ55NHity6uKjMxsULNfEnQrUNtwpkMBNsCzbMMWbGvQiJbXq0FSZ2lv/IRVzVgqZmfilHIoMIiEboV7a8pUFWAFTNOStNvIUhCU3FLgpm4bSKYZpVlOX0Lr2HHPYrpAYdxZnmKcBFShovFw4sfTAKxbRmAGoL/K61q0jc08sBG2jVZCCSpmQwP/wV06RI5UxEycMR/L7KZIrrXpIlsEHm5uOI3O8mGsVyxuFcVXQLTBIXSZMLCIYhMSYJZ9B2DLc1I3Ba3u1QOVG+77KES6DLPTvTP0m6G8x107+Uhfnd11A2eTMHBtKbnhJnqOYlOHOEdhIRz02SCAtIhACPeRr/UFLISJYqJA73tipBM9fDVPkeNCrGXIBefQZTgGMimFAQRqQ5XVLWWrD7ecTq9E3u0Wg6tr1TpKQ/wFKhn41TAMCdXjDsE1bdvMRNso9E3VsqZjHBB1BDgDqeM5YNFLCxP3GcRzrcNK0EJrQDDEFQaCfhaAqrcmIr4iboA1VpQvQLYpMQUWXT4qefTEVJe8Kuip8jRdu2rSUM3YrxJcl9DCy+LbZi9SkerZwsrwPKDwqqgPjj6MtqumMzIT87kx6gGcSSCGOPAdW/+lmfhBcke+8JH3e02VIo2BfIJ5dIszdY8A85YQpEvN5mOFDaMrAFqeitydT8Zd4/ZPiXsKeIw+1vKTCAOKkkWdmFCiFVCvblMKjDmXpbHn2FbO4C11M6LNIU7TSRx52Jjc2GwGWCDsIQbIwenQcf5xDXBp3szzFHzwW7P1W4tT0K2Fgwoh5hhy3pxiTu8xxGBxUlFCIIhM+cY6rJIS2hWAERW7tG5Pq57WwdGb7S3FzsgGHqDtyihEciYOi/rS9/7Fdtb/t01UxBY6Whh8oQsTidaRyovI9AjYb3Aac9VX6dwa56YkblJm1uWgFwqBl48tk9OQbk4I7AzkWHlU0bkkqWe917sy9xxd61WOUbbxMlQcUEMClSYZadyN7To7KClQK9TagbugTG7lVQTLOtqLt9IyMY6GDSMV6tCobQou9tzcaxnn1VPH5pxLs9ZK5S7uSOEeRdU2SrvUzVFdBp6ph+ln0UWaukp9V1c2itHRxsg6SCtCslPHtW2u07fRcVw3Xi2bghevM9ZrvEGeh/tZRjRaAzD2Y6110FFVor0BzgdiM9n6Szd1MPQSnJsNOrnJ2dsR7oir0NV60OhpcsNkgoKdcQ7+ZJ9J0IZLeC/hidg09H6JO8KHAz+q0YiYyNXK2tQCi7w/wUQj+Z3KNFyvkHx7fTqsbtY341HftbWuyT30pmZrmRxbVDE2XsV+k838AOQaJNZ0PLZzVFcjwif5pz8+MnXCK9jqcgAHtB+lKp0nElhNj+yLZ4QSPU6/bQbJjAaj5jeHjdhw1NN+mgJKlm4R+HHXNNRax0+S3V91dsTRdBjAhzHoDCCeixJ/TCJimLtWAXMq6mFt6yoOfFvd6bVxjiq7FnBzGA/gjDzkQEOmBJzPTF28z/ciIIB4xVRbRDfnLi8aIlpVFGiMmiizaZyKcKSLSePAbiDmBsc6SEJGO2UH+AD2pV3XVTPK5yOPDIo1q9tDZUODGG4NPGZoJoXoNwrgIlRrTTIKoZjckrG2SSyQhcR6LCUscAFBZjpunB4403WwjX2kQmssyidBeoG7HXJDwlo8dFojMFGWoA1b8MFvxiVmnkvTYDzPqFNb30VRDDabeIlIoJQZXMijAFxwm0agsobK0AVHJ7j0IwPjXcWMdXBGFatSzUqtR9V/qskkN308OZRTfzgOGAA8Vn0xMD3z/+QgQ7PKPcsUNigcHSqZE7ppgOWi8SSunN4A4nCkD5OFUsQpdPpMNb42z3zXkXPMsgsFQsyIsEWeC7FJZBAYoxGOl2KpWhDTBTsLaicrrTZPDOLhrhp2IxJ0H+9C1msDUAiZIQctr493CmKn92LMyHOU5GF+XDQfIX5i3UMVRW78+EBini1TRYBzkOvECxbO8jh0bO55zt5ZBk1sC00bxjYG4/7UmeoWx0fboCXxRQlAweRI07WxoL0Fj0/7aZPGSlJnE4u4P4b9cpSmIN+xk814hOTzy83t9na0Hq+rIvS1niOuoUdbVvDpqItYlG9ndsh9q3hC0skBzWbOgaWUKwqf6rcmTZXGjjWIeIDepRSS+9sC7w96PerjCBuj05LNAQp8wjle1mYalvt6YVJNsuTq0zeTJo1tJZqgGxzPpDIhGJo+hj1ej3oknxzXdEP71Wg1KbuKHlZWfr8yYufRKAGN2jJ0hLCvC9xCamNFIHbEeKyGcrSO5brtQAA9sBdavXYx296yhjYcl9xhcJssqEcwRhfJj/eb1XQyHrV1HJo6vJf/hXa+mxzPNsgwiJZ0XsO7NttId1++Kl5/piUwShXOqO5riHVkMOteyjNgRU+FUOaU/N8YCMNmqQrX0RZlZ9B5b4968MuxNsGrrmK+jvUtDRAtV2jig/0DwGDLakPbNgLXW80WLG0jUL29iK+1RuZtAsLSmivtANmiOlPPABhhPeEpPtS0C/JC1Oeg8sGyNMoy4W1EQw/IzESUVaPQ1CG4RWGBan/H4m9olnmjd6ZL8HGebEVX9/s+37UtgupbHQKQGAOwNRDcA1CoNglr4wwQnvtKvUcAOXT5DrnB0e71PXWsvM0OwEM7xn2ectFnEj+oMnhUkJ0v78PE+zyE2r3QIuRCEssX+Ce8tugFiX3nrKIdv782gP9b9tWHMbUsKCj8f3IT9yykhrodLRoZ1EnByGugEw5CQYUWBU8WjbJ4D5TZFnyBC0faV4UHwEAhnUJgTKM9+TANZPdp4Pdu/2EjbTtcbUS1UGG3+gG00iYftvSTHwAMq2VnXW6mQdG3xbScWgYXPre+8D3WeTo4VPT7Vm2MQxs8r5yIoZz8LQsE1QzOJjfFxr0JtXL0pcTJBO4rsn7wXPzH2l02t0WEUOETbR8iPBpKjMcJ/6nwtZBO+U0hWiy96w+ISqXH1FUwPNHuVqcjga1bOmMbf5aA1vukhDo2YwHUdRluA84pBTV63i1/jmUDO/HO8CHNClXrP33ZzFvmxy0w8VyOWgcSJE2iEL/Ntm/r1jKwLnJ+4Txg7kQ1UDunre0fIrX/pyqvz+A8YNFi8PaZQmNPvbtNhS2Ffi+lQ+u3S8FPVm37/rEr37Y5/VsXFWAyRN+uwC8JsAiEaa+6Cczb4VH0De0H+W1AASfRTmCMCBJqdS/YnyUiLq11QRYGFkgmiyCmBIKAMBHYClR9f4sH4koOuJFn63HA8Q6zd1zPvvNxLhImaj2tchhDgYj43G9afvMq7/I+E2x7fG9imr8cSmBgQtDh71Qu6pgcqaNnhbzRoR/ecanPP/aF7sGia1JYGVw7F204vt2Ivnam+vZitZyVli6UrrRTfxkAOMLQoncnbKcR2QreVWCB2oDs2PiKp5UB5aKtekOB4uKlyL5hUqBq3+8wpfj0G5NFG8uWFojiuGPvMRTZip5UEgnvyFk6GJ9AwsrrH6D37mPJOfYcJB8SlJKC/IYEpENSQpcjmPIexUh2H2/vHffLed9WZZZ4jkHkjM/Rz/Zav3i/naHkbKBTCA2wu/FEdVhPqmiu1voqwGArtvycjCrTQPLlxeVpu17MJ6Pqtr5FqXp0l59HuybbTWJ++I4JwShY9m3VxDVK8L/cnrFPmNVM2VJPRvAcJpP6Bt0JH24ym9/1TNv9Lst0guTjw+56f51ts+1quZi3le+SVE9hEdug/PrLV5JLHYGJhJdvi8gdFk8KaRpyobwllojHk+9yy5+BqPFkhBMKocTkh7VS2zKHbErdk62UzMSW68cennrMFthSlDnyfEcDQgAWO9JWZRr7nmOBhsHKObQSNwd9LxF4dl8nXAgYxZsLgjP0uMIPUcuCqOiJKcUxMaa2JMW0N26QXO6bvmvLPA5tU+tlkQI20aH19UGvvUtuQZINJugxdxtHYjkSbr7XjLQFsZNeeZPYsfDx8jhH1Kxz3b3hLnOHi7AqBCUxAc5Cr1TL0p3pMUhKJpoMXVmOqvgNfgeak6fKlFug30imCcCZJI4ghDBI+Dv0E3y0SfPcQM6uPzAloezvgXSCm4igKiVlpAlm0xw5Fx1FcVxOgPtXhdmkqXTD1ZW5PJTpLSN7tFy+Oa/LV3V69vL0/lWjJNjzMmvGHeRC9ublK/P1Z7oGLiEZZiAn5PdlEg/B/2wh9xVSwmSbFHJ+D9aOg6PEVZ+rHA69n8xq6Yp1n4mzJHgB7Rrj40eA7/Xx+eIIG9gUYW0UUa0mKkMPFRy4ACTuNKfDoWHVECPF1E4ALvDeKTGHrg7M8xxcqiCDrBnprpi09B9NBOhtOiIghtkgdCISkzicoGX5UktKozQ3dUc3d9WwB3Qm7X3bNAindp6K2BrQSLuITDATRWD9IgpFMSrTpVF5puumVxs0U81LgE234sjaSwjknJKBVx3wMK1AsZ4Yf6X3YiRUnVbdb4qeeO/vkFcHiFNMcPNgM2adlTJj0KYed4CCvBcICc9gUed16TMN7PSg4yFC2rKiLbFxAomHTzMbuQpViQKF29CNr116GL4zOioSe//hwvYqnSXg47Lffo6kaxUB0qcqizkR7nYBcTD1LGeTwCNY1tDuRIlcKCIenj5xae8iZqvUFj1yVXAkSM1yc9RUWsc2Op64U16JJRFA8O5BLmvnuK1bzrbeDPF/wq9I2OXW5EDl996U4uBpqRPmIRc8Bun0Ds6TLU1gu7k7OGtj6NTJ0IhpUGIxqLn2UGnaO24Oi07XbSHvjLjkF6GxojA5xxBDXVqX8C9EeIjeWxQc8Gv08GgbdGx3yYq8d5kqt1dlXhVVOchbRA3n1idPyZbdwbnk5BQuWbAwoQbSeicYDT7NNmm9SBmTnxEFpfqwrnZwLNywjDaGloJWBA2TWsfeAYV8Wy7DoyazyBQ0ouqOfsc8zHKtLXPcsIEOJJpqDgSEwt1Az4bwqQ/B82Fb1VzeGt+q8H7dosEhtnWejPBkTWBoitk4bF4sBk5tTtMA6PiRWfFrAxTPMpXWp1NNBNuJdewxfrvSBBAi+JfbLRIRYnhTKC2TmrIecpzNoXRsm5CgACGDFloh8EUURU0+Qvc071sP71e8MQAW6LYygV0dHskwYyZjVKAVfAmZmVEDRG3qLflVZJgmtBBdZY8NOgKaLANNNtKUVu2HHYKrN9tEgeG5yJplkKHlFAxDtJ+mqwKQ1N7Z6tHrjdCcRSAnCHC8W5bYA3C4YD762CKMcmd/mE3UhTalzZ6tLYy7LTEqfrIzt2Ne45hn6iR1mfRpPy14eT/ajQPsiPPIU5oB8j8ZgM/OLKR1HrPP/ZxUpVUaQtkZSUNweE80tEmoh1Zyd59skfMfbuZ9WwSeLVQVaRBXF51x765Jyrnbd8/XAxsyfk1Np+m4qeIIN9SakHuVzGfaovTIb9ZMSTfHTMwXipT1wZrlRywkPVHkfCxa38b3rDIl94fuQoCSQWEID89g9oFlKhM+vcD61CboZAde4ZsEvek7IOmh+QUt1e266/4aJjCp9aDWh3l7TKvjYds2pRgTdapIXZkK6vbnlYFSb1aCNRJV4REpeJQ6n2RZY5RWMBFJ5QS1iiVkpbpGhwlEyEzpgwGpC17gIfynvpI45cx9ZxH97rcEF8nv/tw4vWk64TfXTbhLRSNup8V8fbVeTsZ56nsDQEr0wa2wyiIlWgvgT0+c2t1aiCNaVWqYmC0nR3VHy4mg0iIBt1xj4fceOB8oadssDw2o4E9COTvApzQU1okBIAN+roMBGHwkQ3SXDTbrBeucYfzDUj8+dsCyalO3PJfccggM83FVUvJWpPtUD2az/QA+2DvnWyDnDyRU5oJ8DxxPi3maiAXuLLj6FF9Qm/sWdFDbQyzMaj5zL7PXr1h5QrSWSr75dRxWDX587NBsV0KstXlr50E1C0vqNkk/sA/AYFBiSVlmL4o7Z6iquoO6fmg25gO8LiiZBTxISVS+C72GMPy1pak2XVEWDExqoDErrkvI4FY6JSp+pWFyfrBiEpd1rAIbAL0B7/vnXKaUO8h5v4+pawWOryNv2UdFyRnlW0oEPvtc6T5NllPPudoVtq12MLQX4Zv542SjcSpAbXDNwH6H5LOL3b39vcWsnWVzHbW64RH6oIa0eZ9smR6b5/oD1+qDTxnlqKYTGTqOWgzKJWKkqkI+Gw4GhauQoZWThBBNZcnig2RyLkH9LXWc6/G0hrrqdweIQrf1Do5OxYADRE++DJwKUc2aeT/9ScbXv6xsrmpOxCJhl6MLg5FNVUmk4elH6IgEzRolU9fDxLhqEiTOsVYVGOCizceaGDSGniFAWp6qd89AfhBG9JJQdgpU6G4Mdxb0enXcr67WV0GjB7UjedFD+s/2jIWnZ+OJq+Xluih8c2lIzoBQhjmrWHhZ9C03xGqlKP1MFUsFeiuogQk4FqFjylKJrPjPn9JVqfqy+lgUXPNRHjZIPR/1TjJt4mdI8fMLp82qiorOUdzCBKWzyunu2VnCy06+kz3X2KmMsTjhDBISc9GsdDHv0qQ+MR7nrxavutkVh9wHbd/VrmMypEpeo8C//Ku9pbk8qw57L/3Fl0chlelBHGWMHFLJXKvunrUiaQhseZVDCBPwIRXKjiAroR5rH4iE8gIz2TTWDFM5SW3AVeb88D47Asa/1abjPYme7JfXOJ+6bVbtdjGfTcs8CnWtJAQEEuXnWcx7ICn7QOiPNks2QhvRweMpbMyePOb9peU4zEgd9BeC26Qc+0x0vprI3lZy05yVN8HxZCk+YaQt0EwxDOfy8VrDfNq1TR36ljnsBMtroulmvSjyhPdJK1cdj+6SHrcjK611Hs+8W77PI+xZFbwW1MKWcsE2ZbIaFbGt5aE1O7ARkZOnxCkzNRXLFn9+bfJ9NFBqsxhPx8Ns0jZRYDIGiyYfKNnkliqmOk2s+EjIqZXmkln8kwQvJe8gCKG7pqLAChOIP7CMHbWKHZY4n0EmCAAtCEnFf2Lx2fm1iYbkA5D7oLPprulT9F1tAut/8dyjP2wFi+3PMwYHoTqSFDKXcc5CKP80dNVXgqK2YOKv+NFptz0Ixyo5JKKHtZzPDkzHhbqImZA0+DCSwMNnkcvP86++SCUT8Vh0Zoc6Mqi2Bv99t0wx0wukAptkPuWbKhL6WY5jEQ0pwK3PN69EQEAl+e/z33o9mv5xROQ14L2ZuyIA+GbXv8V3x9KuupgwNgwQ8JvO+EYcvU/Xi8p74M3wBpz1fSMI4G/gR+AeAPX2ts9gpBYJ3bdIGZAqRuqu0AMHkr5IBu+hOYpUDtJakEYB1QB2bzoi0MI7nJ9YNVriQYJ5Z2nPCdq9s89mrcK1shuW8GI6u40BBAAECGGslIhC2qtCQxgAEAakZ4Gqv3h0mHp5VNK51y3bjurofh0R2MfhFnOVnrIvFzwOmsuoXHpKPVjnw15S1cilNnTiqYal6jzpNpH24XZ03HjJWwiLBSqgyxAAhhtJ56wgHljJulkCAaxBEsHEVEi9yE5NBgAIaF37y2eCp9mQHE3P5qB8k951KK9LZTD17r+1gj4HmChLpa+UyUAMkA04VhwV6yv8Fo/kvejRGJ/7FbqulGGrX1kND99Z+Nhf1CTzOLs/HQ1naEeNGh0G9kct26t+a+4gZvhtRGuP+kIy3IG7qdsoWaQpFeBIvlKv2p4H/EU6LtBTTYL9Teo8AIzBEcz68jM1SmgCJuQFv0MRcUBx/S14q0T0ksw0GrUskIKDCBTCGrlwRR4IMaHzbwRWUCAKlt+e87JBtlzg5hdlH/BvAsaUv55j8m8rr6HRxQFJ/9wf/WXb/2T9ImjZYN3/HBLT56PJKSWTgMRy8vHKSZ2bU34eJUTlll5AgHLFtCszWYb9P+zHsE/Cvom2k4Q1U4Pm3PJ/X47Mc+6rvrvPGZnXhC0iVlfNralrKIhYk05OdGm8Ig3YG45HvUeuAQgz5szJUdCMalsjUGGrYK5NVCMD0zGWTs3NLJWXr+QjEJD1DhOrwob1tsZUkCkfeUBBwGjVCDQwAF4slSYRx8STGD+KSSLW40mKyvZJFq3ekzRvwSbkVXANU51dr1E4HzPSahWDajJDe11Pp0K3xmxqXmvQR3drncykWZkx6Srj6Uo6ZnVSqCjzWz6soWS6rncr+FPzretBIigC3F2tjJmJkxq6H99EwVM/ftRCqQVSC9FVkEpBynmVExVN5RR3+tB9s+XKokmtmUJT0gzn+AXGAzWg3kfNNBV/vipEKq0uqgydVDatMqpt1RXiVsI16+bGnLipeh8622ublVOrYFTHh7HbxZXMoW6LPHBosc/wVV7w7zRdmcA/+bww651+goGEIApcuXHnwZMXb12odKXmM2XjexJNukqosB/KBmecslG5CjNUBodzqpx21iXnXXAxNFS75rIrNuljps1uuu6GGv974x2NBImsM42ELGuy5VCynH6+AoWKFCtRqodaOv+po2ewhFHfz8ONn/b/TD/9y0YcxCAuDDDIQIMNNcRSW0w03DAjjNRur7feizfVbXdMc9cDD8NDfCRAQiRC4tBhwoarKHyEiJEiR4kaLXoAEUcOJNYToyyntMxOu2y3w3EncLGiiOmgQ9Zax0KMXl7bqpttxjuGhy9arJ56ExhnAheTTTJFi1Z0lNjGGGsOS1JWZFwxH4cd+9hx4gbGi58gYaLESZIGJUueIhW4TzQBqVKnSZsufYaMmSquJHOWrNmy58iZy/6S0ob7dnEIfTDLR7splInjxNkKB8wt2WhMUvLlr7SAw8ksVLhIUUfSvXiJkqWagxTi+FzGVKMzKD7STRYSMRGCJOI105qKQJmJTp0CZlMVV3UaTQFYnmSOB/QnuenaPao4tcGejGGnPavyR+oQumAoqcwcTOOkENBTaCKZ1ax72NHd0itc4CEmnb6SuAJOyq/UVdlDCY1d4hOmKm7d//GCWuYofwLIgm3hMIfgtcgBTTVG43+sTBCS+CAamaASeY2hSp1eX9arMmVNtgo71SHpxFMRH6e1i9KbyWXKmvwNxvoMNVRXCnMyRpmleK9KU0yptJYnmWJFVwV8TWDRkZ6ezY7wjspoqYIw3IqHl9doap2m1xn6+OmBVcfAlwRvqdFQpdOm/pXCUQoFewE/FHHcun7jlEbdAMJJBSNRPQWj26A7j8JcNNRorm/ktGQbBKByBURmhLog9GAQAiLUQ4TuD0JgkTKdoRq2AQQURCjApQAA6MEUAAoyAigcAoasVn1ZYw2LfytIqnuVszK+xYSHqYZlhUlHlFoX17L/UZj0RDEhi4ld1tBg7G+uZxrgoLqJbLNB5+sb5wtpuzl9fm+RTNPN8ls3Q9dvgX0dywBUZ8QFebDBO7hxcS2rnMrlJNLhQRUdI5sbHcJIqnExnU7FUgHezc9GKbyOY+R/XlZ6+HAVyz4MG16LrQ4KsStA3l8EcGwZNmFUuPlywlsQVTLT2t1JHQWOIrstq9p17E33zyEXO2GpLWF5m2LFelKJtXQyFenUXuHZQu+f9DntsSzG6G3+Cho0GgAAAA==',\n 'Spectral-italic-600': 'd09GMgABAAAAAF6oABEAAAAA5yAAAF5CAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoIiG9xmHJY0BmAAhGAIgWQJnAwRCAqCkVCB8ScLhFoAATYCJAOJMAQgBYRwB4tSDIFvG3XTF9g2jWZ4yG7g37BS3SqERyFuB6mHtJ8vMihsHGDWhE8q+f//pKQShyVlScqB3/gNqmwjog4swaYlrbCd1U0xupsSJXCpgQ276Xi9tT6x6DQZxuBYuPiCq0Z7hp7W+kP4DUGFSSwWm1V7nvA51VNSfebufWyFsfnmJRRuONUBz3vgpofF/6JHk78svm1prowDN5wv60qKkFjUrgSRpUr6FOtAY0DCjxbTOyTBtymh5yiSnYLfNTn1dUJaMbyIgucs9TrLwNhlUKKNWOtMv/zzvH/f92Ouc+tWVXd/ghGZvfqQM8VyKDED4xb3z/Nz+3Pve6u3DlawMUIZtAgjaoywKPl+UIwCjMIqbIwGrMLIxojGSKIgxFzva2SSIzv7ANhFPNzatPxhgN9mvw1RwQIUpAQe8XjkIx8t+aiSECyMnAtdtNNl6i5qNxdRt11t16u+iNj+9xJCfj/0Qp9L+ErsKhTBtsxHGN2j/03bd+czcProS0vuIKZUlKTuszsLS5S6pUp+H19tj5jV1Ejy83e/Uz9vWMekT9nalu1abf4C+VcscJERCCwQuEjvGoRjsXscgzH2OB4xGu0GkyFZarkfdZX/ZHsMKEtmGsQl3e5RYAIAXZN0DVD7AeVgX+1QAP/+95+zPOem9zqAlFGaYVOIbFvamRLCSOXtaW2toZ3SpwoH9PftkKbcskUs5rp3cKYxBd9DB5ZI0aX6qk66zFdfvv+pqn2YnI6Uh/xM0pEpzYVpUEs6zTT8VMCiNcwaZmzTA9x905/KSQo4EelOlQN6y/YKBHbaf3s7TwgRbPMvNyA094lbK4uABLzqBIWdd9cos+lm2JBeCrcW9jJD29RleahT4pcTt058KEAHJ62rFqiVjShdzD5p6n8cxq53j2wuxFeQIPwb8BJZgSD8n83KVKU/dSs40unOgJBrdpyhzKmzo+wi9a/qLlX/LvUA98pa4DmGKVVrdlrSAZsoAsouNBFGTClx5AiTYNfRhk43vCg1Rn6+MtVKuxcABZJvwLPUeZ6l7p0UfaozNnsb2dAFyW7PAruzuyQXC1IEFpQELnh3EHgGhryDyDMEQPozFM/aN8ZThETxAElPUe+Ni95XboPw09T4zAdh/PCvSzTv05pLUOdmFvGQy2naabt9fHnxHebazgOHRQYREZEgNgRJRWSY3d2/moyJNXgh4KYKqGH8Hvdj8x/qOpwwqbgjfhz7af2Z1VT3Ss8uMGIFKVLFknzdveLbXtVPpN10E4dQFSuyMie+fi01c1YFVgcEn3cmO7e/BRsMXB60ByO+XJ257CNWOHAJuHh/x1CqrEBIqFy/Z/acntHzeq9VD5gCHR3CRBkOCTkVDQ0dt+HRICGQqAMx4iRI01EXmTJlyxn5QAZACiHDIKUIMxHmIpQhLDiwxNIzgoEz7EToW2NmeZSVDuv2qUDAabw5EQ99uKszSE41DB4AkhfUDS0ECRKwWikQ/PxnDi4E2b/DPxzgAQMjgIGA3Rkntpm1oJBAmFBPc0Gtx2ErrIB8s2ZMkyxBFCKhRZ1farz30uMouOuGOpecccwBu2y1XqVlFphtmglKDFWoj+5yZVgA2VsLZL9XbicQ0AZW5dtd3/PpHv58lbWAdz74ep5Mc9kxOhoL84NTaQyE5e2TxcP1J2MuhyVeaRLLvYBSyIYCOAc3AcGhPHdKE8B5ugQwAxbAyfzWDwsbOiYWCgcXD5+AkJiEnIKSikZeSx5CRAnqzU2QKImTS6o0HXXSWReZotL551tXaBg6cGfgtsDNgRv6J702tD7UYvAVavJrylJsKS3nvTIuPhv8te6eKA6iI4CL/PHNHx+99tR91a4454Rqh+xRZaPVVlhkrlKTjDFcsX4KdJOlo0VcENuyQLYCJVw1kFdA5gBZBOR/II+BApPPKyuGuzAOvsEV+AVn83XlKOhC7BhcBRs4KQtgOjHSYDwkQRwYIJQSIc+7LO58os2KAAGZrMaKY8nZFERAmyCgORU1+D2FLIUx4aN/KHj/FAmOrn4YQEfLlTQo5TFj4+s6VVZAJ8N14e9huG1HfgT5DBOBuO3vwe7vdbhpn/9SoZP+/EumMHPCa76ON905iciKVXFmlNx6+qWXs8fahNmH/vnvYefjbKF3F4irHD8uv5fwaPC1zWmllLy9rEncp6blHqEavfOJkQDR76mjV4FM7rXY2Iig4I7VAidlRGVlrS/dYYGD0pyKaapM3R0ctZ2tpu1dBOCX568Zl2Dn6KS8u7tNBq/8R49uRVpFZy+1xTrGNquLgGpgoG05KCSgxbq0YoyryiF43Ti9cJqZPjLs7ilEJl746tEoLkWz7hdpzXyDp8Ja4JOq0O3x5NvnAIHDKXbUcRInyZ1OhbPOUbpC7cVT4zW9aqMQG6zxCLDB3FWssEqr0Ky2Bt1ah2wgsZHUJiybUbZg2ZqUbapgu4tBazLtBcM+TPtLSXFDNxI55jjSCYRTCGfwnMN1uWSkJ9traLzB8ZbYO2rvqXwg9JHAJwqfyX3BV7OLYp8AwUxNXlxAnNTroQrWAXZgFwwqGFSiPdkYlIUD+KdRb4lC50EZZ/4PpDdDav/JMpCCBi4kEAMFAiEEgE/poIklnLu2gzvLDsdLUDlb7URwuipaFLRPSvi6Hvp2Jd/X8wA7zU4vXsdam4o3uvlOBAN4Hde9J5Dg+j/LnDIuVqAY1QCCTNZqcIKUcVViCb5bcvs4V8NoJwuqgCqQS8wQ70c/62wRvp4h8GMmJxRF/PqDPWiiUBfG++zu0imIDpQgk581Bz/aWlXrtXfuZy9hNMa+WnV24plAmY26IVnAb8vuoFVLhUSWfSjbu8KJAis+hWWDigs5I1bpwlaOzQkLmmKs/zjUifbTvewkjrNPcm8+0avVA/MGpYtfUuRIz1ft/eSfboYTvSjc3SL/wBHR1THc6rpNSHVPdhjDmFMAb8oXWEoazEfsNkEH7Vx8xJuAlOIKRj1shkMUEtIlQ15DiDgZIZyIzZpGDEpu8/I13RBFLHOZ7LKGsr/CCXSXHz86iYvpaR57oQNc9O4lQL3dtBB72loEAVPDpRj2vGUJ4qsh9Py40R0+WAZhjSd/0dQjVUl5H6TXh8mFYXVRpO+UdWal76i9quAbP4rzrJFf88hUcWWkcVAQDNujgh2UKcrW1kR7qJxLgKiyNMYHnSjjIc/TqQcJhMO0cD2u/3Ig9MM2H2+X9z94F/HYzSQF9RlwsnyldesaTajQcZjaucBfh7sNy1IX0PNQyayAidrCihsvz6WCEyICFIMu8woQTCsldzfHm/O0ZVEuTBRKnGJ8TnZ+/fIqtIBY7VbVuW7laFJb6RbC61SZpNSG+hqZIwUNqoYXF3zVNUcfZw3TSbtgvolm2Qof0jxhyOsY0WATmU9eN/WO+jpsmmzbK71rnKKQmWUuaWvu9u9LeNAu+Y8WQbbeUMIWHy2++HtCD9Hm1y4nXqqqc/Bl/xdrrkCeQ0Ww+2iTewlGsU9KQUl03ZePqiZWqGCou8+oltwZ5eRAGwREjo4UMNZsI4xUFITFFOmXSaTfhmhauFB25VApFL41lTPN1TG+GLYL9OzcelXmBL3aFWstKGAvJSNlhe/QPlEw66vljzL0DSWi0lcLUTBCqMGCagxNLvWM8nCFoxHbyUYIydWHhtBSOLFsboKxWlYd1QZFcwDCTIBl6EYs0RJ6VdlqDkEt9VLokh8xyoQbZBHZRV9E/UMt355iWqszf79M7sSvPeQOb2OITvbuXIuImkqiI3HEDgAVHUw5DUfCFcS8fjs5ZAce/UUTepwZI31JuDzWMN2dpGcfKpsa/FHVLRAx8pJ3V1Sr37OnuBdjYhJ1V/KL283CCffslPxtI+YPu7RYHzTFon/9TnfLe9ZLGO7GftZ8Wkb1dNbW/S7J0Ww0wtLZNpSXnsdJ47wp5pl0q9BaIVVToangm8KkSK2dJ7goyFQLVdBvLGMNpvJSr7l5M2ehPWDDB84gagDjdAMKr3oreM9/SQW9C8H3ld3jprh/rbCrOqGnZc1J2J0SRao7ZfcyX3XJi/mqrw1eJrHN6GBpSl+NTaSW30XjtumsXiToQ62CNse9zXx60L/vN/9xpdnvRHHv3ZNeqblDvdOK7MpjzuZKVNsWZj0eACy77nmHFjuUr2/DPWj1IJl9MXy9cRY2e7cXhiH4R6a9QSn+V9Ita3jWj0VHcdWh3YqH+2e+8ENhmrx8aYmzAVckZUpAVCgB3apRclCdC1XdsZLWiQbpO2FUo4VcaxdHz6QKtZs/HrlfMqfklOm2SiTZfKV8fi1Q9zdfkcxyqskTQnwuF3o0s+HJaY/kfMhVSmBWtZZed/17oEHmETGp8O5dmZ5+o8jS/mpCO7daze4k6C3ebbLFFle5RmPdvh0uYgfPXvJp6P/1LB4BwZx96LQaBUM/qV9wZz7f+kWO00YmCESW0vSoGmLQA1wQBYM9OLwPq+HdN/AoI6FWiV4cQu93Q3s3hvSEZ5Upvbc1fKbVSpRB/9WSGJ+pbLbX9nADY6dqAnRbxh6WshdxPWemnm493yHZiqSo7FpG9xIQxZT6Fc8jrDkxDw9I+j6WtUOKKzQp9wtBJZup6g5HBp0bqKqjdfY3yA2Vxt5s9nSzSVzvzHT90LBw7ccXli3+ze8nBVrbPNQkcSplEeI1Behv1pkw9axdz5Hs77oXU7VvqRvSVXXoMsXzj3qCunW1srzH8oyZJ/Hj+JqGWxOQ1W6Gr1l+FL4aFVGoCFuqF070shW3928eyYxx0FmAWxnPqMIBox592cLkhEUPvbAMlmucK1z0fWWsK5THXkBFyqwqYXnojsSAMZPAwoZxksDFg/FTSUAIE9EQwyQIUpgMQQ5T4FDiU6FR86AhomWhw+WWYnruSB7ULEnw1BbmR8m+wvyFIoRpjybCkyuSAxYFib57fc11xIMpgVAiliQUZ8m/7FYsnAxpgqRj6ADpiKETts4EuqDL4C+TRJYA2XhyfpPqqhektwEoAxWSK/JkKDYcMuIT00ij0Y0xdnOMAzIeS0WpHsub29RbC5l1fG2ottBMzdxMzfyust0uCrthsIfRXgb7GO1nd4C3w2SOnpJkT+mgAy1owYc8RUO2LwiAH7kLCNowWaJk/TIzY/7x0jOh8SWFENqQoaNTMxExE0LaQsTY5JjstPzxadDOOydIgY3TH1lNCB1GYJ6SD/EDcrs5heT5hwkc4tKhAAYWQYKHgyWamxgCqv24rUCaWgbj1oO5NSkciwkOn1AYVG7MwqxLemHaiTnx5vPWRnFDYuMF9xwlGOCG2oPEHQC7J7vbtZy7c3Q/iimB7tpP8jRBr1ELNOU5jvp6RAXhvDEgIggiw1CxXtg2WNXd7+frJLPT7bPkXzQ/7ELFsJ6vf4GL0B70tDi9kodEdR6Vgod0vF7qo1yx1wt5wrLkcxrBamWAAiM0S/3YkbEZY9PHpnEy+OJ7XKLSfvucU6cGFsP6k8lFA6Hy/2b8amDCC7p750PJC4p6DIChHhRCH+h+ltwXDRs4GDJe8lyE9FfAHTuBeIAFzMACBtCBAMysdDkuXhqPgIiEjOKL36JPNxT3VwRudTz0OHccPCYcY+afuP7o5NF6eyG7vbvyXeyulKg2tpoVsrAcWcTX2AKWkVO8Feh1VWXkTZExCn7pzDljUtnrc5dvgpGK9ZEnSzqnWBFC2HnzoM8C65wA5ooHSw6AOWPDkqqCJcaExUeHRQchxOsc+Kvqil9Njlt1xqkmxaomxrh5NATFiOB3RieAIdc9BbHy+vGgz9Q8poSlAGjXdocy4iKA5F/MRucQBIOKqKqEcuWZgJv4Vojh6g/1RBz+JSj8Mz8PSTRo1KRZi1YECmFEhBWdFztrmWfuVCLA/F9CSOgAqNwIrjRELss88gHTNbV9xOCxU9CJJR4d3MAedd+xjarVw7BszfWOcb/61vMKBjNt7XWO+qH2tT7bIIatvdZRn9CYev3qT7e11zjqztwhjvWj2dqrHXVZojCUZklbc5Vj7K2XqmWsJmztlY76Prus5hFjq68QIyy2jZGIjKgCP6vDSfzw0y+//fHXP7Xq1B/L6x51h3DezPJcBJer5lMmPDxLyBs1gRjCAKuosbrt1iDNvW012/3txnb/S9O2rd4mbb02/6bYZNMy76d6jszGWTATpnAaJzy2UY3HqIZCNd1oT0saU0v+VGmiwy/PXXPEVivMNs5gvWSMKeB2dRVAu62AjzFArNhfMWcKmXVF8ACZO5CFhSycCMlCSE5kuSvy7ERWOJAVKZGVTmRlaoTKiaxKiS2eNm+ca+NhBB8cwZgJ6mqb1Uxi7kAWFrJwIiQLITmR5a7IsxNZ4UBWpERWOpGVqZFVbkwXNQT4TyLQHScblCFiihItO+nAqZ+BeiBldnMzEdTmczLI+hB8mKPgKF9V4NHN61ng1rL1FF0a4pGIj89uEIKQHYALXNndekBGYElM8NIpYHSEDVC4eix44BhsFL6FG+8iDJklUSwViQ7XjzIXsCR7QeSETBYamHfEG6zfkq9ZRN3YI8Hd+1vAs4Fb+yg+5nFpsTAR3PhqpOkyP2B3k27eENB7AP1kFgE3xAGG7NJVEZCpkOP69/AkDjQy4HLaCOWQI0+JcaqcdNFNL3zXih7rNOfnwjyepxsiSIJFmG7I0p+uv6pepdfpjXoPvb8+TB8b/BRgNMwHFnJFRmlrK8Hl6LUVJkpX+UZbbYdTLqn20o/86jjnSt8aiI1g3vIqeoVe8+Dt+lDixsd84mte0UvYvPJW/oNaabU7x6Xfaq5q3gRwvdUr/t7I4LP8j/fHo1+OfTny5alPuC9Os2VsKa2ndggBPA54EfAa4C2mqQT4FvA34Bz/oN9ZMFwd/K+wWWeH627GQkrbnXDSuSiosNZq+61SmSg+EtvgolMOOJ3QEROccdDZBHlZr9qtpG475LwpLrlqbxKXTU0RB775bmJyFxw33VfX7IuB6IgJG0Wy8xcgUJDguBAiTDvh2ovgMMI4RYoNMtgQQyuFYUYapcRoY4w3Vqjhyq2UbmWBsh8phx21yWbbbLFVFadf+8y1bU7Pw+0x91l1zX8UDc95nWgWraaquZulmsr1r+rNS0ABKHMvi1X+88ldDZT9tuL5tr9Nhkv8aVy5GJi/9moAq+jK6B34/wG1D7ByqWwY+wO2lTS29dqW9H3rNWFKmCnhYz9R4MM5mBcfKF798tytcngIC6SP78l5vJCFF3UuB8ZawueEJxkXQCIGVxGBRVlU5CBWbEUe6I/4ucsrbkRKhOAyNzdyuW0/keO3JagbOY5iT+F8WbhWi8GxbG7aifRizq8+3kSaJq7QRPVSQnjPH2rxEicVhDQ+6NJD7APPT5Vq0IP/aTFX/lWGZHAyn1Dc8bZjjWv32yPdpM+U751fc2Ysnl5OPD0oMumMPYfBPyLWCCttxQz/ScEC6ZeagsrDrVZMa+qLcIBDOKiWlyHn1DknfOAJb624vVPNIGSZ2VE8xzJn2sL5SBTVPipRqDoBOg96FKcVR8AEFDz2UUxi6xEzRxkRY21bvFQUfS4CIpmloQMF2WwYG+ghTKn4To4GtiBMpDDf31Lk1UhLIe/70JrYqRe1ukTYlXfcfG0C+myoogQqHBbgYg1yqmJOQJiXieSGC6L3MKWBtxXA4FST83NBFM8BNitKFwrjflMqijIr4sQNLHhAyweToQuKoBAtRsHDzUmprug9bkEclVNYrJJ5LUzeq4yxnLNj8Aiy6UQoOoBJVs11ZEwLtdN6a8TqwHKOhcy1dvhTbWdFDK+CbIvvuUhJ2JwqNIIf6DhlYIsZ88xcOBdETXWlzYD0nah2EcicBB+++Sx8jPUejUaWt0C79v2Hr5ugsd5FGzvIQPhdJVEfoupoh9qV5Nxla4s4h2hBQN5nLfswk4K79IvK7sQDK62BV8OwACcdbJ9QWpw50UhKgYgNJo4VM8CWjYlIuP9FKe3mdrGSgdv55knMYUIzStAwSnoZhLNgaRU6ZUucc0HgDs0X1eyMT/lrrN7Vih4yuFHRjwUEgcBBKPAQCQLEwggSQYRUkCATZMgFZdUUkoIZKZYP37ygJnopGNGNnlEs8tyfy88Xde6vx1iBFVrhahdRPdkQyXMRSyywQsUaFRtUbFGxQ8UeFQdUHKPiBDW+ABrQwjI9MCgYyZU+iquKFm2B25wVuAwuB7ZhDWBWPKGOxG2p7oNn0kwAYCOvnWyO7qCuFNeDPErzE/9AHdW3PhoCW3wHPDV+5R4rZIIdtVGiMKfoVFnw/gGA95eynXfJdfcxcgAazFwIE55EdE+lI+qrTcUTvUmkSi25Z2RO+hy1tQl1wSTepV/2LCQj/IFpvLnmyimh+UuDIf0Cgvftr0HBXxltOOtyNa3G4WFaGNCkEx3KTStqkSbF28AMG/yureSyC38k6GZhomTejNQ1226VSPWssEyDjMuc1ULDk3+ZphEYeuGIsRfpIhgNtNDsCs6LREFHSpZp3DbeVjn91QqpVHS+AYMmhIuqhYhERh6PgpQ2hayJ4JyP/M10gDpV1+bbcHAobaNMwtJsPy+6C1FlUadEkimRzffTzCI52OLtMh/5Go1YE9hoMK1JoAqKfjPm3f8XOZJFEe9PmGawb344UQICey38ySlodyDOYQappUCKx9w+fWs69Wi0zqvkDCsO+ex2O9NO/Dh/0LMe4ifwElJTn4M3kYqJcHYB04k+jSJrrrrgRQg8jBo5+OFIfZTtp0NvQYNatlVkvkRWO+6+G25Y/07MkExuUSt7wEa2jcVMm1VT4dUquERg+OsbcWqzsvA7pPgB3zDc3LcKFLm6pXkPg8PzZuItZEAXQR6hvl3Hz2e4zgbejqDGNNU1YNY7AHWQ1zTtXRSAT4vvCfoCvYbQEIBZJ2XQEoBdQ+gI0l0cSUBk9FzAryUMXCDcQSIwcoG4ljBx0VK1mBIy6iCvISwEUNZJWawEUNcQNgK9ZRpKrjb10Kkl7LroPUIE+y4wqCUcupwyQpaJoj4eCVJx7gmq2tTzrENNnT02wQZzD66FB1i2ywrGlXtx7V59Q9gRt/4j7DzA3gMc2uWOeHQfntyHZ/fhxV8McPUANw/8zqLHh/vx6X58uR/ffoCPB/h6iP8o4ldbbp99iqtFaLV3vFhjVd2QckN+q13+h/3qryKDoNVqBei2gHkK6Lrg6hcB3OBHAg5uDLbPgbu9WdCA8992jsFWCTTh81DQ6PWbJVxwvGAKu7KQpBSWPUMvhSoffkIoYr1RMLUgkimSW+DMJ8ggr4qMBTpUkEQgnNfT4qdLogrzUOsIz2dCPpRODj8ULXg0cJ2IKSdL89NTuFKIj9V3BLR+ve1u8o6iPIrVwBsnuq/rw0OH2EQpbE9d4BoHhW9m/NExI007Vj0lM32zKIxEGdam+ZhOdDONyaEhZmQGpr9Ip0FRteZEsXc0r3MU7RnFvHgY63xkGlI6CvSI1SWnb9R7I93sSn1kafzIaGQWQR19eAfasmX5lY1zJJr4gUlIgbEn4zDSheHQToTNURGLeEQaWky09qTxj3iGeWyY+wbGWrHQ+Iepph3q+o4m1ATNPJDw9hx39QrrC11/yjf8q/H1seHaHPQv6xf6p/WdlEvXMRnI9fZ7pVY+MC9wUeOJmejaH7X2RsGZvx6rFtoehxWQtA0qcLhGOd4kEiD1P1RIQw0QJonVGGjQmwSuc/GAVcmgYvFSEwjU2RZYnxZQz+8CRroNuQEyMbTAGHHwy5Fak0DI+OjSxabWkbY8603RYrkvqEtd3TbRbShVfmN4P1gxaZ3PeLS8lsfPSG4nYznyHBlU3X6tJfel43QfLUZXL3LQnlMbWUgGmNmJkdV4qS9UsXoNVK+SuNIo5/M6sEp/JRDRZUmyDjjR0h8o5m1KQ3NNmHHjVMsGhMToC3qTP4YZJ+P4S704jYw3oiKBTPcZewOZFWaUZz5VOLmP8z6KD8QRmySb1Be+8a8o4zgmgYB/T0VVrOPZbzwXaklFQXwTOjtNgXTSddWLpkMRfH/SnDWyWq2bcFeK1kAUNDhsovSOkGwtogt0xKMxR5ENQINZwBacyBxNT1ZgvVa2N3NNMgi/RXAEvxmM5i85U+duOpiisE5aY3kAtJlUekMWPA2vBQFk/O5iQJ8ChDbz4xM3P9vpXTyJTGJm9cWoGJEEnTS74gLyQmEC1Lm7HmvAPV1rvU3U6Z6INktAgPSrTanmVaDuiW015DuUM3LgMVSJLBaWcBPfi/Wxt/w5MKdZjBqftclG9jSuVUqtnDVWLs4hsM38vCAMj1dEDsqkySjVWmFheuxwKHlxN8QXB6UL24K+gv4TpPouTON6UprFGwv93WveRHi4uq1lBVGA7gig2jLWWCgzcw27q6c7NPv3lQ8EQ1PyJWydVGJ8Nj4Cl6/0W/YZJntSUnVKdDnSZaGoE7bMElqN/MuX+bcLGIrII/ceTyKypRPncHvjUlZhjatYqGtkQYo96WZWwM95DCftse6pgytR1bGvEJOuUa6sb+TTLYxzzvlvmKS3o/lAXnjWzakJoo5cEgIfqfemkP/P42D067I1mEOLnnmB3Hczptay6uAkNrAhStZ8fVoENEjEWVZJihrXKwRIZklabOAxfwV4j2Q+xqRYhTXFlVWX1HPOdx+XSnU8cubXXc6JOiUyCVJl/8Td8F1Dt+FmXpdsIn5nwh0dkrZ9SceAw4yEAui/mAByR4VPCyh09rr0xDm2S3jRyEBIZgbgvnQbH+WzEUG+RALLQu0g7oIAp1Cvm+mbl/1lUpdLCaIaGoVHg8tVN5d8ZJ5rdzARu59eIqVYeqrH8HyLHReqzNS0d0T03pLNwqWSkIwoDlvdnmqGrhgli+v8is4Vhn4+dmY2nJtXF8iaFckw1NjYOvlpuqbIyho22Hzt8qXTM47jSwSPJdSu9vFV06KTkVo9pSuruJITHSFFlyh4oCfrtsqIukBlj2y5pFN8esiHnBaP/z65h8VnczHz27dnEVfUMMVaKto+v8/7NViUAvkTwUL/MXWNBO3+/cdO9k7RAz1psIadhZRa0TH5TFO3zVK+gWkE/PXG3y8Z6QuqufoYmSla5+9alpcma/4+LwwF+YkaZaE8wbADqxkzaLUEtUq/Zt7DuDNduUIIL2unQX4XhyBbqsKttuadAa6HWncHsajVIkcms/g6uD6c4w3qoEBISQ2Hk3l6CIYUhYnRvQ0qVm3dak+d/NhRL24uac0Qn8cSoEJIiMkggxlaauBSqyVW+WGypmG0eeUx3cdnS3Y4/11y6/Pp3yaqYBR825vzOrPH+gSwBx1GV8kzRcrZs3lclurQAPHXAZ59EkPWE/jZ+B4MuyHHJDBBVcla+3CP3IsNEnFjUBvUGfBmysPHgT9Z5slRHs1mGBIyzxKjSPcEJAVZg/9WI1YW0omrUuQ+zIA9xz7kx31g7pGjFpAxzyJdhpPqNctqkGodF4pJrTk3jAypemcTR4U2sbrylfNv5uCuVpP/Clkjw00RhYWCYdW9JfneBfGZaZLnjxXdvB2ou4NPZqwlovpK9dxzuDcz+2npZNhoSkhwxibLV74u+ZZPrNwak+TbsTdXr3O46400wBAH9+C+kDQ/GpWrsYKALWsy3kluVKDu8Oqkw4GCdClZMfR9Omr6vWpIo3WqSGTrUQMKJg5ma7S88BJpiTU/es1ipNMfTEfJKc+vPUs54zjfiRaSUq7Ms2MnMdI4nFXb4I8VNkyBWKrHSKAxNgLSJKM9mhBzCpi6JKw0bi5gmG4cUgtoz3degvuEHx7fJDiW93PbTU+xh3IwaIQuj5n5Pqyrx4yWudlC+tKFDIFvtUi1meAF5mxU5uCxIx5gpyMLVBMTYrBn/qT/59hWhnCoa+0ck/zy3A+MzqyYIW85khjHSM2VfMSUeuELQ4dPrtIHJr3aZhDwf0OOUo07TCnKx01XiQ0+LkWSY9xED6HUbeMlnTI5PNVR05m7SNcnQO5k/H9JNBImsWOup918Tmj3D6n5mGOGSgtSl9cfbIndr6z0MpIngIt/8JYKB+MUlQvzFDZMkrbLCwQebebgqUkLtBMOGwoIpVc8oJuDxwSCJ1zJJXAjFqZEMRY3xcNq7alx7BqdqEbCUYCAvSZf0nROLnwSnoRn9CMuCf7VqJGAFHLXrLXFcYi/Tad9yTVe8lCD/s5bnFG7cakX5ERQJyubZpV2gE+KHA97My8yUQsnTwPnyrx6Cd9TL1G2Aa6nE34k2qf0MXxb6hnjp2OcF77CKz2qFHo30TiQj9QNSGvlV8hAYb7ozDfkZ9Rz7dWJ1OM04XQkj38wn3WXAU/clEBKbMUTagYOj375mN1nxkgLe+VnepOq7PaMFzbbDjBIGASnfqxCplTXkJA0Zqh2ysGNd4Fr5vBLFnWaTlq51NbzkxkYM86hsML/6+8azJBG3ykKFiU64Vy+5XGREnKMmJILnxZtP0KjzpulACdMTlhzqxsSuut3T9gRn3J6zhQkf6Wvbrt8/8Yjnhwvl7OaLLmMZKVaTVwSr41xNaejRNxtPbwLapkwUc0Hd6bnywxgGvJqjEBUx+tz4sHaOlMXrM2J18cZ+ILG1e0hL6mcL3ZSLlGT5T3QBZfRhQ6FQqlWRljq3MeXUIO6JRulljKoUxTOZ7dYZzgvxhmbcrXrPJVaEWhHtPeTPntS5uMswVYtvEg55d2pEfntduYcewwr+x+iW+hTotNNug+rE8WyT7pgaTriid02jarXUel5FnLqj2amOg2DFK1MEu/bPMdcyE0D3lqs7Xst9Le7mW+f5nKymd4bdtzNNNQ6rKGuDlcBBbNNXqgJd37IS6nfVVBvlXuN6fcz3go1YWdWOtqn61IXuYGu2CxpeZMhe7Y6uIGK865zeCtTF8kEY4Xa24UCbNylbU1fz4pohY78xPQ4n2/+XsmcvWebHqStN+cL61YQRoUvilX9ogbwGmd30t/HXefi0XIu9Piz+5mO9HFgA9x9t9fKdcEp5R31wvdksRTKqyz5PX7HYsy3ff9LqcN+P9LxS9Zv0Id5a1+/n9+a4l/+90WY1hcbu9HB9m1WEpzmAgc+y98Z4MDainOKx34MOAE1AW4IntA6x+XWJhr8pGhxNGxW2eoHTTlhk0j8u29qOGzUpNI8VFZQm4qlrCY74nHiknNc9jnhRPXm3r71tpgpULmcfJKo38TdyDE16OytvCFfd/2sIPfyobZBonDHqV66vQCOC5t4LiH855DFqHdezI0s757yjKNVl4Na4cbU3Br7SFtX3xyVWe/X16z9ZZLZV8S/zXMlCeADgiCxQVb4U/18AvfSx5Qj1H9WtZ8A71SVvr2ulGEaIfiCAReb4bLOjiQcI/1TN9jCMjt++jXKfoJ+Reu45q7F6G4Hh9wdTVODFcdnsI74pTARDsgZLxUmBXUVaAEchZoADwQT4TAk+oEM/eB85fEHwbdUEJKOk8zHxbeo6VMpcA2UAwJuHpyqAyJWPuWPdOEQ013sbaT6YZLZ2Jh9CrHJtf1c5xcPuDZIjWiV3sJzYH3nftib+Bl80/oW8cljxzpYQedjww054Hvdewmir+WK2OObDsRS7k3/WPzNezcvM2E19x6cD4eFyE0+QTFAb/7Qa4EDWDgJNXHcIniUdNOzMie0PqlO78npxI9dh+gtlwnjage8rsFkxLC2a9Lq6njtQq9zKBnWremYtMZ6XZNALDlgwNOZGUyok4g1x13gRcWdYaNMsx8xf4+aGI7p0PqVhnaT6IekFdY1iWU4NB5K2Q0+vbFhWFBHnmh6J0Lr91vmR2V9U0van5o9NUrdEFS+BhCOb07W/as5JndnawH73xePB44Ke6sTte7KQcpOePeAyisZi7HCjiae9O8In6/KQGTMcR5nqaHNJO4iKgacINvqQ43M7lXFg0pUa7Q19CBWeYiCJbxElM/8bw253a7hjW4qev1tyOJs7tejk+EOqAVc3fwygX/bJLhNEL28shnMQLCqFufuEhmzfhKi1bvdEFxpTUA6p0pTFo86XaIgqI/hbdVdcdD6NZwQ6j3ErtiCmYi0JG9a+zZriTUO5C4VPD6XbIQvW19KdvFu5KGtNr6VCKd5kq0F3983RO/mH90aBOCrsIND6jQmHuT/8jjJaPXz/xEsYUbhcjgNYPuuX7hOurjwTfjX374aPAFXwlEuZubH731U7uHB4mfgDCQZq5DbrQXWCIAZenz5DxHLtV6H/22Fvf9yWWGQULPN9FnDfALv0uWaNbrHeUsJgqsI0/rRjbbNRbT4iuiXeSHhR7m2Q/5PDRyPn42wDr09+6yrCu5j7lULfjd9V6+AMdtPEs0ySuPfwdlRTD9qnhlsBTMubac7xs/6aS0XulzfEh4dWX5grV/0U2W4h0nVm+CSstMgye8LLYZJXYivN2Jc2wmo1OoWvs3jct+D1o/eRNLSylPQRvpp6jNTcj4vrILTisMwxkz1nsdvghk/bBnq3+T2DqYmtu05kZv3fRAWfEvFbYa9mXlR2+a26VP6f5uwGY5DJQFdDtQhaEO9hdQZ0OnZAd6Mm6clcpynFP5EGr266sU4kcppQ+XzIo0tWg3jEf4NiinSRytTUh6rk9CgTDJx1oRnQgbyCZWVyayZIvzy6icVoMHN6au+huNMsdzHz9jh5RS9CWBca7Exl0UtQbyoA5rpqa/TCpdS5w0LHt29Q+YZndx+r6LBsWYD6GpJVkdDmYRe0hNI5lQIn7mFQPr6oTGXx3MgkkaTXeOAme8vwOASHKR22lDYuP8/UzSCWzX6oqsAZlLfEI0AULAMnzsolUychTkfRMpPIHU0Wv2I8KutAr7BBUytfh0XDWRDBqjXm25WGzXVHPaxqfL2ilKCXmtTcF4kYt7HdyUqjortiSK0nuxCQIIOkT0jjRqSirpAIoPA7I6ygsTYRBgLJosCs7qkUyzLJqqy7mBAzqZXluYn6uLQJiCIc9kPz/voWdE/v06kS+3FvhI7bZ1IrIv2auLplE7KKE+h4IT7rSbq78jBydM4JepYrVoPfLtVmq05KIcUkYz2a2qmwsYV/8SmpyM80a+lNt4CdfW3IONft0uX0p1Wr+6b/qIPwF8CMI6BPAz1y80fiRQ5gYuemK8MtO3jvmkJ8ugT3bp3zIx2JrOdwUxGdrLJPd0Kl3KZZK6JrpN928xk1ZkzNlSO4ZHAq0z3c7bV6zP5L5TEp8+y09W/XBf98AonaiPHDmIvRCN1cBl1Gj7fibqo23clHY3nToKlhI23SWpUj9pm4eQ+CjlpmFP0bsR+CPAEziEXgN8HYNqweV8+4wj5cmzFX7f1So1VX91QOECnu/MQU79OF5ICDAuitXjEHF9RNEHvEXLNi2XKxAe8GQozFrh73ni2BzhLWC3MGpT8Zlu4FtZaY2phxqDg5mzROsU5ngat6nO42C4RV2tjTXY72H6Z+EvCC60GSb368ld4dHJcP3fu+nqthnefdTLGInQ3V00LCR6duKsQGFBgGiqDuq/3ifuYKia2I4DIymq+P+LbivoXO6sIZRvV1UymvUn01dVPySB1sPtsNsHev05T8j8a+CGS3S7Bhb7irEKWLVGBkHNYKPem5CZWK0zC9STORcKFhbbf1cJ3G7r8NQUG1PaURK0SVRQtLwl4B6fTS08xSN9dBtfjpJ8r8SADJjoZrbJMfSmxZ650kfgnVnmBDKgsUZBZ9anM0mdwIpoGR8JJ/hdnwF8EMBqVrqiyiUajayX/7MafAPJMNUP0qMwXapVPwDTeLj/XvNzHwO8HMBEvVh2avprANqW8kHBXQGZW2ee8/IVlf80yL5NqKyZl3mphVVSbD0VIq+WML0vC6J2qlV8YgoQNhJqCYuVeX3Cdczdahd8KYFyHLLPhJQZP0eMgh7PSd87AC1sLvTYC29p21Hm9t1o0Dq6oeRMv3dnzVe9El5qtVDHrMmX/H77BOqN9vVdgz9dPPIblUw5XpHaBKIE2KllMqDmpThGA423tbhbo8aKbMTKBxsquD43VKlTNOTj+WXSF2/2QxO1H52MVrrhl+lGpNV3kqBUvUV8jI3ZqnG6gburbGrHZze6zqayHXvzZfzY776fnsZTjwjprw22ux0O+vSEx+otzhXxTceV6ubzAlwV6qnytw/1rMrjPCN1qNZvt7k/9mwoG8ES8ov44vvDwJY4d2bT6bmD+SRzHq4ffLMSO8tisMSRNCuqlWnWEzX5jim+HXw6uYR8kTniUmEas/FVbEzG6jsrcvnhHHRk9v/nLCukPbvp5tribS108uDT+l8m9cDzB9+K9ILY4UsXeLNnDtimcZz7XUTFFrOx5+cPfyVhcG97huxzzyej7lblQsEVmDAacSgDzdyMIOOw2zjBbJvfWiPWSZZ/qCfmB1vx8JnPrsVssJKSAkjoj2I6G66UI6bOj+AAUd6ILOqVxzsRmhldfH0QHe562DKe94IAn14xMO2BgeXlQdZb/XEse5gVAAy8A/fMy38FNq41UrsdEHroGu9yN7OrvkdkXBj98r/d7iMdeJPXWHhZ4L11YlDcz81RVC7Hp8NTxF14UtFxqWTot741FVZuIWw8LGw4TptSP1As3XSp/Stj8FKHPu9nLHhXuTY+jzmd7jhGIJ3oq9tT+IhF/dmaUSDgxVzN6Y5qTXU5fEyQTX3dLlrlKyxnzA2TC9ZR3FqF8QK74gEL+oOJtvFwXKBF19qOukZNIlokFNy5ZFxopHwGLyYJ8jtAg4YPHPGZS5gCKKvJyrtJQfElQwBYaV1zIAEwjETETTGaSyUjy/CeElqrxBnolYWe+T/A8XfjBs/kPGO1MRgeDmWIwk0Li0VdVXrezhCPxLt0LMxZqzk/mzhx/hVCFw2XkMV+iMutZVD5IF3x6AH+AlbvFvDB/4QX5/SFa7/AkKwsPBMJfVD+b+SKNWX+hcuFFGvMi/OLV6yMMMfPmG31y8umLzwv/TWGSVvCEwarPBTauwnTrzS4t8eln1Q91oqJvrzZDkZSqwPibV4bPPareuNF/T0rNONJsvu9WRrOZ1W7a553/hgRe+MTX9ENH3wuII63/lj7WPX0scOy3grG8wjFfwZNLu8pmHKo+Ulb5zY3vsPVwmmkWpbxDfS0pfziLwvRSLCkvHmMTHxUpzuEN6HrFI/RM+nmOPuifHitbWdQlrcdbQeUMY+cYW6m2OZQqm02ttNtUzXGwZ1xpvVXHGpPnOsjeOaKMKA43d1a/Nnmr11mBqZ8zmfFCHfU5lg/Dcg3f4ezseuqzLD+m4tPYBVu2TC4ZwS2euxfpLfzd1R9xm0ZqfO/il+Du0yNk1z05l+oCnFQ7h/6GkIpUglvLq3glXmGopjFLRih62GfC4KMBuTj8cMpxLpXq4HgrXXR+mEfJwCOchxAhu+7CI/hHs9V/Z06vVWTDvRmR4+Z0KtXa1ba6lcPlNd2kY9IFtQMn81/q9VN7pUgwYyezv6QpzYkOtdXgkpFxXf7OBHCKXQ5bynyVCyX6YMJeoSigKq3Jbo1NsOTfUqq3tLvG8Sa3nGUWtuzW7/5AS+bK/g2bbVjIpnAtor2TErdEnqTXFO7NpnsLj03QFx6bsAhOQINv23pn1K8KBZelYsjK9s5Vhnjr0hrnqrhb0RM3KXXPs2vdKiHvvt4EdaOxpFwq/yNPoqTNibFZVk5K7zfPm+6raV+T8g03pp0Ds9GIrZW1+nJUMW9QqCivJH+ZM1zat76cLWbmXujCpZeGAkuTIe3Ktp7V5mRtBBLCqnnGAO9cTaZBtcAXsM+ajoZ8czTZeuUhBF/vma5Yqj5UbZnU63KLOQsI/XRa9MHTBJFNyc+YDGUS0tsnDX46re3a0Sm/vwtNKRUpndMydbLTZ0gqlSnEdV0RrTI16pBmqxzyecVKU0P1+1no84nNNkqZ4PpVbB84mU4vv8udOJ/iY08nlzUcotC/LiPUEehMBv9Mdhh7kH+j2ldQkv5zSRQrMvFvsLApbKn3rY+wtfLTk0+nsCzWrcm0buxHVacWXCEr3gdPXKE9HNlKGRbIBDGHWsS1wiXA8QZCGfhm4dFKNl+AmUtplJYTt24s7x0qJ7/zY2v9xF+GNt5Yra9TgDy7DZLoArAAcIyNED/9gY79Dqli53t69sPFw8XtsHMSV6N9s9YXGru7E9cVyevTgnCkb+Y+paG7q+aqoqJOU7i9fvDrnwT9c4sej0xM54W6EjRntKvNZJAfvM8rOsSz56bi4GiOkr0w++Im0dmu4wWF5TN4v9/H9XCz3diQndVNKA09GymJRHQoXyuXEhrz9kryAKbao5dLQn7do5IwWOT5tLT0VJEbLA6ZJ3GVcmlpbUmH6Ml+dUCrlcXDOnpxUFjkPlxM+LTIs+mVsteAd7as+8by7avrJ0L/qNftL2P8w3/Fv7dz/TeeY6cWzJSUVh1+hf9bGY0dTgGDeklPMNmi0k1gOKEqr9FKJN59T+CYJxPTeIMQptTd2ZKoJv2qiS0HDNG5Eo4dkTR6m6bzcHNBfFtDZ11xX6e3bpLGYn6vsuzcU8m6qXZbAVq2Ylvn1oXl75PtzRMc7STpm892mbNwCmIdXzp7CbF3Sefk9leXwd+z/4+zDg7uxayGT8LtW18rGrF4bXYteb2svRCM3sTFU3Mm1UpeCg90+Uzx9NxJaenW8IJO3zraUV6KNrlkjsnPjPFoR3jpm//5zDYFqmKyWms9lPphe6Tz5xGkOxuAYADXnGscXBHJCd0P2SKFmLxcRFliL7lXSg/b9Rm+Rh7gy+xSsMobyq4ZnNTwA9qbIH4HufquRBT0GXOAzhrhokyGhogSm8VvMxyhdACxW63mdVXasEwShEVrRPJUSW814ZsyKvZijKXQhgQvgSIYjat8oeJ4FP2Efew/U/aG3fPUZLxnKuvYT40bRT/J9+M8MZhWynhH11xQGByWisNKQ8gbpFJ2mKMeYkMl54yHbVOFRJKA2uXvX4hav8A1tU6p75l48cq8YaApy1zYHhkgoZdDNlnAk3X7HRMnG9cccH4gUDtb4z0B4PPoaIX7S1v/yPyJz/s6/OVTX7KZM7POTL4rX8Z+iEtPCjst6WxYmAe6JFpjqk1j0YZAiV2s8IcCXLtMFof11eletZvEYZ9EVpRwFL962ksatmmfVWt/UgNDkx/N3/GrMqkpyxxojwyUo3eCNrm/LZY911rs/dyw23qCwM1cf7nzFYHa1crFvcxVgEOMIZeSVq/wOcQi3VyDKso6xYZpwqvl5ceJ8cJaAXjl+r09WpgBSdQVisqcxL8urTU3FlIBhpL81ZGE26Ve8zdOtbTA63RGM89/pKAsI9MaimoUxDLm42QTJBuSF87ivRs0KZDnmaQPilUlDiot0lnt5QVJkl4ZLCAbi/xy3FI8ba2NwdNuAECbYeeyxrmthJZh18eF1dAPtmI7f0i3bm6krpUncOo+UtHJHoF9EM9nCX2pUoQienijxHG4vMv4AU3w04ASgu0h0DKAM7scZifaPxTNlGo9lfEc9bGP7ymJLR5pb7DzaR+o9VxGYIai5Emfhe7GV8tSfzmDot2nuPVVU3FGh1wEErdv9tG47p8hzWtC1veTEl9jGmsdSDWRB+4Yz6CtqmBstv2lA1XEYTBvvzfCh2laT2UsBz329d01oufKZUIdZqe7fyha+r8QE8M0A7TzaB9CWGLtQ9M7mI+zDdx9coBzGmGfPjkUrv+ET/lk4rY+FulThLrhh3DlMqSpp2SeI6nC6LJk8n/bN88aHp05fGDYS22a/KJXdrbDfmvX6K5Vuqs/Evum/oOg9J9vC+S2vC34KzaHzuWl1Tin06flF2myjMgrAO9w+g2KMdo6Rf+oviF1O2U5ZFl0uu+N08/MftbxTH7Tp0M935xnna+Y+RbO6d6hbdB3/JUWxN2hMjTVRr6oTeVKeJPn6FwbdO6U2hAe/EdeLeZNWYGgR82Iw6tXdsgQp1evavdjv5wwc1+fVtdkZtMYHsQ21T7QMbuczcV9ZrNCf7jIz88uYkDBvC90Vc+Ao3geDz8KCkbpPB591Mf719PzX5OpVCQqNdzE1bTUePzZhhh/hG4DE72NGV+jS6dOB9r56TlrT7Ok2RQIfwOn+Hm2BmygDuUNT9g3EgJFSh9I/qLDUsZmPvdOuk8I5Br4/M/75hhsPpPTJu+aM/Jmn4QwkioSfbNNK+vdNSENl84pxtreTWvmUmMritzdVeil0c6yZzhzn6xwPwfjWoO1u8waifYCw4DuM14U8gxOXm+aPdpfKP1C2f2iWZ95cQfq0DX5R1NLX2Aktl0aNYQBr8p99nNtVV4paVFmwVOs2Joi921DWtFOgYdh3h6aD+/uEsw7eYL+fUM8MWjbFbMdvjUGJTU2Fm3iMPjooJBrNBiadGlaDEafutAa+xNZRM5J7RsS64UfnwfL8TlvvDF4xK4fqN0sjGMA+zv1s/tLLvnUygUMkx9m5pFFzU2+WovIOZgNvuMvDXF2WtToPD/vMoi99EzfzCYbsEp5GNAu73IV5S+kkzHqUmffZw16/NTgFdFfk18aNZjYbqXnQ9TMZ1aUYkNtOfElIFXkn2Uz+spqU5XuLkH5dux/edOGF7+or07IkP4ZhnYqCs+PRQZ//2jTg1luM+TaefsP9Sfq34nAj5nu51yjH4zrNVu9x0viM2bte1L6nO63yV4LVqOjV8ZSGGHTl09rvfS/teKr5MzXy5f80yz68RVOnCi87h+w3irppB5/qlhCPA0tqkP37lq29onFP35anZ+6HtgusqeKwgWkpPDlnwYv4s0LOLnA9lyL5tF4dSb39ZVrr/rzo9No6YQiipeJ7v8Djqgrl8e+oLBvnwHfj1fu4xBpoAhVEN9altJ9o7DuWm+/jtkdkpD/t985ZHsRB9pncPZZv2oIbDh3h1264va+ZX4TbvXvxyc9b5/328V/R51L2eU6DsrDZ342KP3csc21XzzxZneccpJ69Dz++irGAx04NKNsEKmfNbT6OW2sn9fB+vkdqi7qiKFkIXiEKveWU2YqpBAsjXi5ZVs5DzJHeGV1nAeU4bOhjxFbhadGYgeGjEjK48YlcMpIHL8lVeC2UQnBXK6CMK6Cp0ZF8NXo2Eyc7MEah6hHL1UfqZ/ZhvrZJdTPLWd0GV9o4mShhsfBch5n2kEKQQobsGmv9DmPfiZIRgZc0gFXX+ZSdbGLptCDyKTaBqdJswYveBrM4mnGx0lX6zBlMF2E4BvvAit4FxMO6SDNZLPNHJJpEy0Y7fUzTkys+WbCgKcav26B7zN7yg5fWabhZHs4DragYJrKZpDb9KLdwmqO4uVDxV43tzpXg43hdRSRrA2PgcX12wtoE1U32Qeb85t18fbWmks7seSWoS9weUXYnmx3Mg92JjsdjMDu6m7HYQ/s2bh3/eKgdOOy0s3/lap/V7p1Tun2Idyhuym6x6b7VHpwfunhokf10uOz6Qlj8umyvKNRdmORN/HmmzeIqAdv5E28mbeMtB6AgCOO88SmyUfkzHzRjdrVgyUS2YHwTOtTvD3EV1vacFizQJ4Gew9rEAzhf800tAPMHskAXPLmFQnc4COP6y5ZIK9/YMkyAA5X6/re4akAsN6CedvWzfFUHlcpWvXVJ2yN/MlrnpBHJ3oTCP4L/k793srND6+OPWw2+gvYGEQq//VvqknhFA6O07e4CdzwwI3H/N3Kjq/PItbdhIbPhly0hsarePnBJ1gmqqj8dNBi0HHTbjQ8mfLVxKVwE56JniQ1g1qmJavWvqVqPJjN0WVMoumuFK8jz7W84chWSGMQYWr5er4ENTQGXr3TkDCkOLwrHi+cuP7cgVo3VbqNrpLqknkTbsEs2TZKCJ9QvgRlkXO46Ujp4K/1DRHe12TzVuQBqs2sWyvGk24wrEYPqvikGsOBGywHrkyzni2Hg4LXXXlrSVPW5w6JjwOP3qZQfDvbvG1q0EWzCLX+DR9XMq5dfW/bZqNq+4zGAXPVqdAFzNOrYK+ukVt38TkNDNCZnLeCd9WrDv/PxeIvIirVT/IKrZ4jlPIfGTeDf9bu31iRW4mYtuywbYnEfq7oxu1lVzc/Sa81/rxlPXhW3EeYQJ1QK8GDDcN5ozAZO9DOG+RH2mWw/jUC1TtWzyl04Ek043X0wqt/nMilqqkLD/Tvg7PVqrLIKamwARCFLFBSZ6iydag8A8NBOBS6lfJosAVBEYNSKNJgEJosAc5zFIScygK2MFjY2Nmkoh8O9pxHpaapNGimuVrfI4IW4DzBnW3H1387nqSuA/BwnrZZG3hO4iZAgbSKjwa71xFlg6ir+EoydbtBlR3kZYIZug7gilORcRaH1DZ7mfEIuii+P9iSR4VNjJ5NqIxt3cAAuwSHdggWho9nH42/Q/yI/RDid4+dAYkJf4dHDs8rliKnGxThGgsafqbNZgkpFQ8mimI6Lu2t37rqZ+zSyEVtq6t2dtvAYymqmN74fL+x+pwRAIzAt18yXc3Hg6nhXDxph+Li5nJzSJAGcTRleMW0d61qMRwzp2IrdwZ5kL8jFxCv3AN36VP8zjKPBqJj4nDgYplHyiRyiDXv+BS6C640LACHNhdMGghT2lLR4AUWk6hObQE4hpi6lLqSHw+WKkEINka2ccA+AxWqvYBVX64mExRiLI9b8FwWkUGNfbQTJJeaO9Y8KAtNBGHlEzJdpCwNqEchtI6FCjk55RGgfx8QQvrq1EBq6xgZG2Cwxdoo51L0nW2iF9hJgF9ctlpImi2qikx1aYyOckEogdfmixkCHEDguMQV/WhwyFTX1+SiLrC5vUE1isYwhXmFIPN3E2ZeKOHDhorpAuwApY6ZoyZxopwUJ7evZ4sgOQ5JRauX3bbQeu5/5DHdoLDlnJ5i7DtUccJEBKfanQOw75CIRlakfdpW8gPnNnG5tiG1PHMmprKiMMFNAPxNND22y5fzAsnTfbEqV1FgNozRKUBelDset5riOyDa4BC6LHrMNGgS616JPQ/gKPByP0eqHbSyo52PEUoia+9zevkVxCk3uGuH6qWXBqI05eE8iQPP9nDD8+hx46o3cG6DQTjoq12AtIiYJO7TGOwNbGSHTknnOAplYfNaea6kykXruFSb2qKQkoVSQuMrR87gPSoLtUebgiefgLrdPYUrojqUsmBZQp0G0to5JpTu4CPwqevSmVifxCHVvdC8LACd/gBjyL3Ag4hdOybrhKFdcB9mRnpsAcHQSgQo3jkFVL0NEMsQdYNc5MzqGcgxNVW+qtv9syfPQv3o1yU9116dV624tHecVd0NNyc6HdrDkA+KELnJQzDLOIMU0ij03FZfQ83Mz0MU/eUGx6QQ1A0kSNR6xwR5+UZINyBylUCiGwFaTkVeWs6mQ1dkceS7Zs+BN9CbCUSJiwTDSlGmEU4s+MiJIN4r2qFOlX24yNPAcx2gQGqbKqmucJnP0iQwndmNTcVG6XuZEu7SdQCBq/I3LcDjy25Z5hBC2NO+wAIRZP7C/IvUKFKRoihbcyryDYYUlhYzXh5gHXpGszQmyRkPFoApB8WFDHdFdCjkgoZYVT4Vepm9TmIk4zRukiYM/ql0gf8wTUbCETqY+d3jhiLRgU0JI9HvC/sZLltF49zkBizSDpmf7Ujb+lVwoxF8/MChQghpiGCnkLMcoYrOi5iJ8k/3VRF4ttXrIuEOOrbmF/IQa2qqhEkzWgqTSb3V0hkzX9sqiYq17w+nj98EDTaTeT6hxOuMcMFmUoQdtWuQ6xyT131XCYZCveFMzxXU2XCgl3GCO4kueIsVlrua88zQVFFAbatY7cQ2D33rLYBSz2RovhEMHicSbtJGpM7djtFhntlcDSsFH73I+aimAV0IWnkRCNSjVdhArdYVx1jj3EFwHWLe2/aES9ygi5JEnTAFeDKEWztiZpE2j6co2V1V+GSXK9CmhtSxgmdieQD0RDC6W1tULQgbXrCV2emBR1w9wQKWj/2CFIs3aySfvpyP6/vN/WQ89F2DTXkJPZvMqTvPlYKYWBG/dyYY43tjxccQ4NCZreh7Zct120zwaBC2dnggsYboI9DP9gUAdjzUQE5CgS5/TI25gIxQon9ve4pRoxEHnn7cj0tCxWpsNEUXRLUj8DXtm+tKumfZ8DucbxidAuJeMQ1UImi/u7qKA9/RUhzLw4D0CWdCAjdSEojt4pUsQwEeygiWru1aREQrZimsOYVbcFKTLH1WXcYnQngBn/MqhjuJmeli0jiYdBgEJqsU44HlIu4MLA3wOuxrp22bbhLP+u54jWDPaW+lUuqLglCuHDtHmMFHCuNbBsCjUAuCuVclpjqM2T09CkhOc+3NWHApxV1ZTfcdO9hF/Ik3HZjWgFqAVeu6mnmuS4sAHimiPu5Ncaibhlkz3hGUOA5qvr8Np1Cp2a1LFwBXsku0tfng44+WSRQZ2F0nWSa7JXYg1RUE+35JYBZZ774P3iSlrnWlYhR2x0vqHJ3d2am2IBn/HAxyiaqIeiQFruHk3zjk1Gl3D7j8uhxOgKs7XOsQi1CCglzTlcuSdPpEimTk2mo1o/4EHRW/c3LMm7PcmlOKHatk0pRDrYAFUVvrcwolXEACIVbMnjsGKiIWDXynOIB1EawSj1VpTDBM0EPMV9fofnac47uPwF+swRm2puLaJK2cMKyZ2IPRs5i/twtAIYzFaiHIJxbX7RiMg/W5SRh4miXPFBhPnBwivqY9Ru+K1n63M7EuVUwT4GEobTzprLIOJqK+EGg1n/dEtnM9HjrOD0bFZ6cNEQ85u8zGatxHJgAFi6NsvfNjyY0bH9/Muzx1NVPn5Zq9VGUCMNcqWDJVIn6jjCbqYxMSW81yUvCGSlEZ7ecz322nEyQf3G6fdk+TzXTTVHFo9SLhaXTvrEu8nAwJb3u/0JsaPRTM8+FB78gf+lV1Xw6en3VNnnqOnPEqelkM41fvz4qvDPagYXh2kpq42wHqGuUd2sx7Vd/TR+fNvMiC7KO7dE9P6k9SfG40LJHZcbB3z1u2Y7fV1kmEzSnPov1ITuxRQvL3OFFj3DHiAltaszgzkDpSukpmrWjVdDz1BhBBD/aQdtahP/oOg9viSILs6yP5+mu/Xczj7b5Z4hD4WP6M7V6oG3q2GUVrOp8iujbbKEz+/nGIOKuBW9w6zUrQiwyZaDADjdk+BfCiN0ApazRm0Sq8MGvrwMfWlPEQOhP5eK98Bej9OJnapc/v+eSdRQjdVbR8rT8BGGz7L49UdITgyWHz7q0jBE6Olow6tpEiKxBb60Jbz6EbnJQYAzLlXIHtyOghtQv6ktR7oO+JuiZ17fH4nIHUj8CvPBWcRAeeGAdMYifU9ETB0m3s2Ppu35VajkRw8hzHACRmAGwVgmcACmUlw3QWgDDuZ+kDAWQeXxhS/aO4jfXtvt2ZAGGXAwR6l3/BKQkTSOFQLu9Mh4fJr3nEVwgYavvSmvGCMLVXoDXXBvfZXPb4XbQVXx8bwN9v8v16WYoSwv97XKWYeGhnvi2EaV6bhsDoDbCZAKGgLuopUTFMS0QEqsI2fIPElYPAAYSSm5a/hdm5M06XRtQbYfJwEECbXenY4k4UYKWpg5051Rkuq3Ffzeu5Qwaf9e/jwYDXuAlD3e6RYXMaWZ+l+2twlNs3NVnf6QIPZXWisdVg2XcLt3ARbUwdNq7VPzWNUhkZADAUvLUuyBSey1n+p5pLL5SfPAyobAeiRRnf5jzRZJ+GqwPKWI12FIJD96bN+cFb1WBgkHJGLmWY6A8/gHBZuIRzNnJKzCTfz6dStNAS6QMB0VSp9Jtq9VGUHshcPuyiwnUYHEA5X+a+S7XNRoQIWLIUrrhD0YOhW6OhYA3BLAzpY/efq/C1VDT9LQL9T5m1//QJ+l4ibXoiAH8C2ATMybtNgUvWLqXfI38QZoECLpKP2AwRMFTjLCReIiFtrdsKJQQXQG4qAlw1BACoBQ4DbX9fb1Jhp0Wk4KV6HHD8gNmss/XCQwATJutaj6jPUxobePq8dfX503Iox4Xox+Nvz7RyLYYL8CJs+A8druqEErSlx6SKYR6FdyTGvR2ohbwMq6Fr6yjw3VLy0fhzg4sUF9A9npclFbOSDQpRqQPgAy6zHlfj3put+PbvxegqkFtVAFsYzzmdHag2fa03lCgfO5ewt4hLNNnn21wt3/3Amah5e9XNQSmjLGIFJGPqA0NZWNmTKyLjp0TItZHanM0thEdhpRzyMzKQ5+SMayrO/WJpHNfokZ0Oq8XW6qrIAo9g1fA++tzc3qP20wIVZ7NWSK4TPYQvzab05JpmOqyfHbBrdk0vxHVDCZKPnm4v++1qOZs0T+1TEpGa1qn+mO4Rt2RdYvYcuXjtJZdC0xXfXi/JkPDf1S7YF8wGzIXlngLhRSw+rGrsAL3IZFW8yor1x0NR2BjJO6fD3fGu2Bf7zXq17JvQx7mdKwUb3Bi23v77m+KR5kGR8InrKvGN6lkhTXv0qIdixQgooUalfAGSptuDnVAIJRY/b5TaThaFKfWMsl7jMkVeNQsIVmF2RBsixfnX5yzCGGBzwH1T52kYeA5YGO7s5bV8OJhRGXxo18ZCiiQEtWdyCrwj6e8UIpzR41bIgt5CUs5pRkr5wURO+dvGZoD72hWrIrdY2nVInhiHZ3vo6zKNXWr1qsyBQ7TvfX+w+6itYo8EYYIec7fZDGeOATc/O0qsmTjJTdks9RzzcHVoGQMOioFZxGaBg1mFdSmoiEWH2XlaJmbQ7pOsrmRiQ6tqOs+L6C4hXDdVlqQK8haKZQDjLE0ghjhaHG+xP9P2xoxvEqT2JDVLEz1gtrNED+pKcoE8gv6XEkVRdpTl1bRYJN96PjVtErThB82o8PVZpx5n8ulNw8d8798bj3eXXjPY/cm0wMtIo/Dm72+0+hnbgZCRDStSZBQ307QQYf/WWPiMa+RsJLMuU6cokssVV92e+YRb+IXw21zsNHivW/xlMIfnsz5nyauXpyPAF/9fvXN8OD3AAQ5V0pIqbY21x2fmhY7jsTh0KBHVSRUNayrsM7VbAhd479KEebADZe6BJ1oooewmxJfWIKNnihbotp4QSLHaRScSsZjlsu2lcrkl5+mwbNieTb1mLx/HM7qUYCHYI0yQ7dpQomqkD7AgSuuKbo2ynI5g38egKQvbpoFEWFQvB7WpTDanx1GAS7u0MexgZjIm0m38xSXK/eK7i/JACmbmY0DxoKvHWfhxj6h+SGFfws3DVri6JGUlQuM97sm/f+9XJ1/ITdWWTd02st8dbGogpETrOhmdBeRu72KzqTeqK5QoQ8TmvXUb7FCbWblKmvutAjifTO4vW8fhFOpnW1PCw+g8M+aP1Rzfw4kZGA0DF4uM0x6m7KHtFFBJwFbZlPWvjOnb2SNZbDJHjPs87kuFZsZzk64x26YWy7S8rwQ4BRD8MI6nt+Wmb3vBj+ZceGHRn0Bdpw4n51TvjhfenprVDBFeowdIZEU6Ns81bJd7Ec2agktgG/+LocSpoObaL0ZO+6IuV9Vg265oJx1BdVinptAtIB4zkaTZhL8jwSN5r070Ea/htctsbKp0gwXkFtOuL+qyqrZJsh2Bdq4/acvs0F5Eq754ni3/7lNA/hSpE16zjoJNnDarLyhpdrhLNJTGa5Laz3PMhm20wWceVQIsLGTO9SJ1J7IpGO05WyTUInqu96VCb/HTfV3ueID2vK1A+ErTIcCuAb70Ibh31TetYEfjzxBfkayOt36Ll+vLg7cHqRBULDGbRd3BFIbmNUIc0Nle60wPFCi+Laasf77BWPSTRAmyHJ9YGazIZ+rvAhp73GdJQqT4PmOryhgbOeYFSqviPmU9ALGGoNDBihZCgYyudVISMk4n/RnxlX73j4CHmMpiTbPF0yBhJhSCKohKOKGRF+i/lgsZ1YuyZw9petgqZ1jMDLDFqOgIXUOr6zGY5xg6zQKjepE9Z2OGFzkMI7RbPgzHep/1y/dO/mELrOQRyC0AzsrTE2cADoeVY68czAWe7Bpmog7Zmja7rjUbJ8dSVnytZCGnaHeKmU6zts7G+Xhejahl70JDiYeejoyeo0gMKL0SDGo3CvD+9t+n3gdxuWlqWhOxnozVOfJ7tzJycWzHgey7vWF6sYk4/+zDaVvnvktEVUUaqKuLriS32tFrK6vrOsjdhfYYrNPhCQEnCg3tISVB3o50ubDMyjM/fZVTi2eRWG6mnxDWvLx5BOvXyFyfvmG+7Rslg6LIHSy/dIWpjC41iXjtauHN6DGbg+zB5YYX0GX5nM7hBHsYD0D6s/O3WOHgMJ8N9+P7/fZqU36VNOfTvu9qWYpCbFnpcKDEsP3uoVTMsRXWFFiXN74tIhNbX7GpmnMQK2772MgYSLXK0vMQHVcCpGkUxZsKG2sgARj4vhhoXsLmnsPVn3/q9xH8vNcCPej/MTwbn9/Ua5kUPL+/265n0zIPgycpqon87DhVmWFLD/CrL6W9/UYUfSfDGAkjZ26qSd3RmgpwE0dsxTrP+o4B160sQqG3GFpXwJcIgQdJk0V8eTziazTq7GwD8XazFHgJxjMEG/vyC5Gqqo0TDA3uQAFFryAgSfjSVXsIZpPeJtxfuoKA9S3yla9dgaNjN6RSOZX3uXleAhJLzZ5mV9/irGfndtQ6Dyr4dHncUbz3Lu/OnCt+f31JtSEHTxhoc19WEwc8YsWfg9lrH9YrXr10tdjF1K/Ui1do9aBDH7zGPeHNcQ7kBGDXx9QQvoRX+ec6hyOA9wtTf32+vy2XWFyN5WfRq5HiT3acXLy64SRu2yYvMKF3rUJ42gCFWYuUlOA4a4PHzGgGTrqsbF8ZPuGdq/A1rl3LQVXuCytyX07BxgCpVtquOxmX+Np8A3ODxwOC948Pz47PVgu57/Q9XRXndWKvH756yes9Z6Tmm8OToA9+PCOdj9UFsU2RHYlNBaXEbe1wWaT1MkHIaEuTCPF65Rq20xR+4jvjIK1x7V4P6nLfxaDuy6nYHEToBLx2FVxCFPaUn//qS0KuHzwYj8bVRa2alixDr+lkPGQJm3a75P+bCdoiybRNcGLapRiB83miRhPgydblMkNT9AJAtY5RcwC+6bfHydAGBjSsXMAcdm435+PmbnsXdXbUekrQWjF888hpcfqj44ugVk+0VdPL5YozMooq1rxm6VXZa1GSaYsimt/G0/x4FSrhEHovOpZKF0r2ffbp8+ONcqtc1OcukmiGjmxvNZ2MLbOKzPcQj28mIjzfiop6IUiLnnOtMRcyRnVFCY2IF80TqEXqalLKq2aekuDFSZgPWjy2Wg6bzH5xdFpeV9dhMSyOgvFS6MdD63uUQ7mWjpm/+bWla7dsj7PTwuntWZQqv7MhfCutWMtaq1+6WlPWCLZSJl6FTMxfTh9U3SbSKibl1998uF4mJFx2dQaMJZXBXV+hc7j88UdcAdyfvzxdhlch9yv9+jqTTOzvV8vFvC6T2LaUjEBsheR2WaT7/xVFN4ZCf3235kVok/ajXS7tQ7NxPkFa41EdI+u94o1k9DtFdB1iJaZUQp9U+jFLvIBvSh0mBMH2YchYzoe+a5c05CcSUKXnI3quqjIbCbntTzxdzq+zGYm1iz0/QkVKqxeaEnsjBgpX3auJnNtcEAndhpi1shabsBjguilpiUsDcU2rz2GrH9VLxSQ8vpxPi1nfJdGABDOVdm3FS663capDQEUdlkRtqbViln5TkJEO5ywML3mnEithB9/0P2kYAF2YtM7poOATIkF4+Ue9MLY0ZowieGNnLUXiunpSZEXDu8SNLsfCt97MrGfZi1r67ifkXCi94Ws0c5XWPKL6zSCpmla91gR/IGVtkK8j0KOWVeCFrdb5ZDaFMFx24MM/x0UA0jjNLIKr+fXVZWjv1NFddlpcTBHPK3fFGK356P85bSYGOIE7SL1i6wH8zyfR9kV0SAJeddX8jQgImBI/8G/Nipoy87lMPvER8OerHzQB8O97NK9paVj0CNsZYAwYIID4z1LMg0cUvJddJG1O3uXl4N229wKd/iLgbOCNdCPz6/V2Slf9rOA/HyIvvDBHvZF5N9Lb8LQmrMNzNVedeLe1adO8GjdyB0ayEFa+wMMF7kwUsQE8d05wbSe55vJ6PlXSpp1Aq9i7dzuWr6+AoECxEqAilNHatN3kbyEPBCaPRe8vYtaa6NrHMgqeHWIpYU3pxvo5Wqo8mTKtff2jSs68mZjHk7kmluG23quOtSHMDcMujWXcWLuMP2vwe7zqu7aetwOlVdzBVdKfqkOIeq4m5EO2QwjYKIa+5PxkmQGrwuWBwMCbIPtrsyAhlq4NaP0vym2abs2QpzlL/0M5WIvAGZ4Kz0BPrmcwDvJsxxNNZ8LutRo4UPdNeEOk2nUVbtUweGfrnOXz0Ezq23rePK7DWn/4lOdtrSjKN9ezmLPualDWYUk0jOuIcZoQN+1AumadK1F4rnGxuD881yi3j+xNm2ZnrXAQG671KMjDc6hau7qBwkZAVF07bNMJ3Tw45rX9Z5HoNnBdDY5h0yMHwzEHFZiKXpiFLBQgQgkaMR7lH3juwwX1yFEjYOw628hxJkKXkbO3k3U0GCPEG7K1btggHi4oaxQ6YtLhgrlA/YuJyS8xJ3uB0oux5uRTGl2dWMsRXpLkEuyIxKw/DUTe9dm7vnvXS+/6XL1agCtWiByDLvvzvcL84j2/OWaMeX5OWpMdKG4KcmhCL/RDnxZZyvZDEq1G02wE6LaYNWU3A+/MCW4FM27DYn4wYj++C95+hVOwG27AJfDMmYUK3t9EfgOBbusUgQIMWJ7N5oCudHkOkBBwpBcC2rEAfK4cOgAxFnIAxsn7AEKsjweQNzobTh/AcEk7gGUNwttszThgwb5kIHIE5lO0RucxxL1ltwNRozw6+ZolQ6YLpiSOEy7X6lbVcLfOk+cZHZocTBbg1+Lh0JFs+gQVOYV3a5lwLKQbZDFsdRb0/Y9NgMy0SU5PTkNOR0arza4Wi/7QJ8ZM3OTrpkfVVUht+CYlrz5UCxxInJ0Ln0ISkzVZFRWF1k06kTLdIaWjavsaiWSCfeaQNfMpeuy62JJOiPXCY4o1rXyudUOpqiY2aJHSp2b/de32IscA/6fkSil795eDu613vzAQEYgEM3ceLKw82Xjx5sNXm0lcbifQn5sKEfrFst1lF+3QXQ9lCsLCVT1dcsVN11x3Izr0cke1W3bqbb5d7rvrnj6++OSrWHHiJVOWC4p00nWQFHn3M2TKki1HV7n+009f/Q00QKHVigz6ODTkw/4/M9yIChATsRAFI5UYZbSxxlhjtxnGG2eCiWoc8dk3MeZ46JG5HnvmeWzEQVzEQ3wkSJgocZKkyZKnSJkqdZq06XLDp6MltI0AaR2jtQ44aJ/9zjmPQkufwQknbbGVSKT/fbRHtL2mO4uNI4JDN3m4pillMstMs1WoRM+IYYqplhCTkJJpnXwk1DTvr27arh/Gk+lsvliu1ptQzD6qtnf7w/F0vtzc3t0/MHYOTi4od+d5wjb73OLxfG9zP/pNX3P22AFt73hLeVscKx+/gKBQrwqLiIqJ95oaCUkpabeRW1KsC9hCntGesE1FSKj7iHUHs5K6XsZs3q2Psd6kjfvYokRRyC+j7Z8ptrF9hm9sygpeiWb1uH3GbSvo5ScJh4qtIlXItvn3Ffgkj5sz3euC02+EkaOJFYWnbNGQ7swjlq3ONaqfaXL/SxYWIW+4CGFal+RBcetLid2bLN+3JYVwg25BWBPCvNlct1NDjiM3UZ+hIaM6WY5B/z0dYuJyeJu8VSgbGkpCP4gMwqzWFgsvKYvk3UWsPlLEWigKaUnvqFVsCN0RWixWufVejAQLS7gRb+Qx3xzhyus7yDMT9lM/Ar8jrqv4nr7I4veceINGuA+KG4nFKfTWHRKhDyGohJ0wm4TdlIfOQsIld0ZxEPGVWEIiqImCJFC0guJQpICgXBaUeyMFfFaRZ+ASQkBCUEC0AgII0UoISggIiDZulXdacuTIYsSjtlPGi8IcXmeUR8FiAhQQRY0V1mB2gIJDEcaLwZwchv57HAglCigFnkku9tDGxm6AwNfA/87/EP3RP/FTLZVf8gO4VygA8PTIxO58wNKmLXc0GIWu82n2qFcyFq5pWwWfMsh7tkhDeptZkm1se00IQwY62pr2cP8IzR171wVwQij7KID0+Zmvfe8bvm83gSYsdPzyigwgPXX45xbVLH/5t6wQDr9UK6PxcwU7HEojL9ksfVJrTMC1LV1rTXt3lrLMLzInLJAeCgAAAA==',\n 'Spectral-normal-400': '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',\n 'Spectral-normal-500': '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',\n 'Spectral-normal-600': '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',\n};\n","/**\n * Chart specs for the `chart` layout. Authors describe data, never styling;\n * this module turns a spec into an ECharts option themed from the brand, and\n * renders it to static SVG (server-side rendering, no runtime JS) so charts\n * work offline, in print, in Workers and in the browser alike.\n *\n * ECharts is imported lazily (echarts-render.ts) so decks without charts\n * never load it.\n */\nimport { z } from 'zod';\nimport type { BrandPalette } from './brand.js';\nimport { PALETTE } from './theme.js';\n\nexport const CHART_TYPES = [\n 'column',\n 'bar',\n 'stacked-column',\n 'stacked-bar',\n 'line',\n 'area',\n 'pie',\n 'donut',\n 'funnel',\n 'gauge',\n 'scatter',\n 'radar',\n 'percent-column',\n 'percent-bar',\n 'combo',\n 'waterfall',\n 'heatmap',\n 'dumbbell',\n 'bullet',\n 'treemap',\n 'ring',\n 'sankey',\n 'pictogram',\n] as const;\nexport type ChartType = (typeof CHART_TYPES)[number];\n\n/** Types that only read the first series. */\nexport const SINGLE_SERIES_CHARTS: readonly ChartType[] = [\n 'pie',\n 'donut',\n 'funnel',\n 'gauge',\n 'waterfall',\n 'treemap',\n 'ring',\n 'pictogram',\n];\n\nexport const ChartSeries = z.object({\n name: z.string().min(1).max(40),\n values: z.array(z.number()).min(1).max(40),\n as: z\n .enum(['bar', 'line'])\n .optional()\n .describe(\n 'combo only: draw this series as bars or a line. Default: first series bars, the rest lines.'\n ),\n axis: z\n .enum(['primary', 'secondary'])\n .optional()\n .describe('combo only: secondary puts this series on a right-hand axis with its own scale.'),\n});\n\nexport const ChartSpec = z\n .object({\n type: z\n .enum(CHART_TYPES)\n .describe(\n 'column/bar compare categories; stacked-* show parts of a whole per category; percent-column/percent-bar show each category as 100%; line/area show change over time; combo mixes bars and lines (optionally on two axes); pie/donut show shares (one series); treemap shows shares of many categories; funnel shows drop-off; waterfall walks from a start to an end through gains and losses; gauge shows one value against a max; ring shows each label as a progress ring against max; bullet compares actual (series 1) with target (series 2); dumbbell compares two or more points per category (before/after); heatmap colours a rows × columns grid (labels are rows, series are columns); sankey shows flows (labels are sources, series names are destinations); pictogram counts in house icons; scatter pairs two series; radar compares profiles.'\n ),\n labels: z\n .array(z.string().max(40))\n .min(1)\n .max(40)\n .describe('Category labels (x-axis, slices, stages). One per value.'),\n series: z\n .array(ChartSeries)\n .min(1)\n .max(6)\n .describe(\n 'Data series; each has one value per label. Pie, donut, funnel and gauge use the first series.'\n ),\n format: z\n .enum(['number', 'percent', 'currency', 'compact'])\n .default('number')\n .describe('How values are shown. percent expects 0–100.'),\n decimals: z.number().int().min(0).max(3).default(0),\n unit: z.string().max(16).optional().describe('Suffix after values, e.g. \"homes\", \"days\".'),\n legend: z.enum(['auto', 'show', 'hide']).default('auto'),\n labelsOnData: z.boolean().default(true).describe('Print values on bars, slices and points.'),\n highlight: z.string().optional().describe('A label to emphasise; other categories are muted.'),\n max: z.number().optional().describe('Axis, gauge, ring or bullet maximum.'),\n secondaryFormat: z\n .enum(['number', 'percent', 'currency', 'compact'])\n .optional()\n .describe('combo only: how the secondary axis values are shown (default: format).'),\n totals: z\n .array(z.string().max(40))\n .max(40)\n .optional()\n .describe(\n 'waterfall only: labels drawn as running-total bars (e.g. \"Subtotal\", \"End\"); their values are ignored.'\n ),\n perIcon: z\n .number()\n .positive()\n .optional()\n .describe(\n 'pictogram only: what one house icon stands for (default: a round step, ≤ 20 icons).'\n ),\n })\n .strict();\nexport type ChartSpecInput = z.input<typeof ChartSpec>;\nexport type ChartSpecValue = z.output<typeof ChartSpec>;\n\n/** Checks that fit the data shape rather than a single field. */\nexport function chartIssues(spec: ChartSpecValue): string[] {\n const out: string[] = [];\n spec.series.forEach((s) => {\n if (s.values.length !== spec.labels.length) {\n out.push(\n `Series \"${s.name}\" has ${s.values.length} values but there are ${spec.labels.length} labels.`\n );\n }\n });\n if (spec.type === 'scatter' && spec.series.length < 2)\n out.push('Scatter needs two series (x and y).');\n if (spec.type === 'gauge' && spec.max === undefined) out.push('Gauge needs a max.');\n if (spec.type === 'ring' && ringMax(spec) === undefined) {\n out.push('Ring needs a max (or format percent, which defaults to 100).');\n }\n if (spec.type === 'dumbbell' && spec.series.length < 2) {\n out.push('Dumbbell needs at least two series (e.g. before and after).');\n }\n if (['treemap', 'ring', 'pictogram', 'sankey'].includes(spec.type)) {\n const used = spec.type === 'sankey' ? spec.series : spec.series.slice(0, 1);\n if (used.some((s) => s.values.some((v) => v < 0))) {\n out.push(`${spec.type} values can't be negative.`);\n }\n }\n if (spec.type === 'waterfall') {\n for (const t of spec.totals ?? []) {\n if (!spec.labels.includes(t)) out.push(`Total \"${t}\" isn't one of the labels.`);\n }\n }\n if (spec.type === 'sankey') out.push(...sankeyIssues(spec));\n if (spec.type === 'pictogram' && spec.perIcon !== undefined) {\n const most = Math.round(Math.max(...spec.series[0].values) / spec.perIcon);\n if (most > 60)\n out.push(`perIcon ${spec.perIcon} draws ${most} icons in a row; use a larger perIcon.`);\n }\n return out;\n}\n\nfunction ringMax(spec: ChartSpecValue): number | undefined {\n return spec.max ?? (spec.format === 'percent' ? 100 : undefined);\n}\n\nfunction sankeyIssues(spec: ChartSpecValue): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const l of spec.labels) {\n if (seen.has(l)) out.push(`Source \"${l}\" appears twice; combine the rows.`);\n seen.add(l);\n }\n const edges = sankeyLinks(spec);\n if (!edges.length) out.push('Sankey needs at least one flow above zero.');\n for (const e of edges) {\n if (e.source === e.target) out.push(`\"${e.source}\" can't flow to itself.`);\n }\n // ECharts can't lay out a cyclic graph.\n const next = new Map<string, string[]>();\n for (const e of edges) {\n if (e.source !== e.target) next.set(e.source, [...(next.get(e.source) ?? []), e.target]);\n }\n const state = new Map<string, 'open' | 'done'>();\n const cyclic = (n: string): boolean => {\n if (state.get(n) === 'open') return true;\n if (state.get(n) === 'done') return false;\n state.set(n, 'open');\n const hit = (next.get(n) ?? []).some(cyclic);\n state.set(n, 'done');\n return hit;\n };\n if (edges.some((e) => cyclic(e.source))) {\n out.push('Flows loop back on themselves; a sankey must only flow one way.');\n }\n return out;\n}\n\n/** Sankey edges: row label → series name, one per positive cell. */\nfunction sankeyLinks(spec: ChartSpecValue): { source: string; target: string; value: number }[] {\n return spec.labels.flatMap((source, i) =>\n spec.series\n .filter((s) => (s.values[i] ?? 0) > 0)\n .map((s) => ({ source, target: s.name, value: s.values[i] }))\n );\n}\n\nexport function chartWarnings(spec: ChartSpecValue): string[] {\n const out: string[] = [];\n if (['pie', 'donut'].includes(spec.type) && spec.labels.length > 7) {\n out.push(\n `${spec.labels.length} slices is hard to read; group small ones into \"Other\" or use a bar chart.`\n );\n }\n if (SINGLE_SERIES_CHARTS.includes(spec.type) && spec.series.length > 1) {\n out.push(`${spec.type} charts only show the first series.`);\n }\n if (spec.type === 'bullet' && spec.series.length > 2) {\n out.push('Bullet charts show series 1 as actual and series 2 as target; the rest are ignored.');\n }\n if (spec.type === 'ring' && spec.labels.length > 4) {\n out.push('More than 4 rings gets small; show the rest in a table or bar chart.');\n }\n if (spec.type === 'treemap' && spec.labels.length > 20) {\n out.push('More than 20 boxes is hard to label; group small ones into \"Other\".');\n }\n if (spec.type === 'heatmap' && spec.series.length > 12) {\n out.push('More than 12 columns crowds the heatmap.');\n }\n if (\n spec.type === 'sankey' &&\n new Set([...spec.labels, ...spec.series.map((s) => s.name)]).size > 12\n ) {\n out.push('More than 12 nodes makes a sankey hard to follow.');\n }\n if (spec.type === 'pictogram' && spec.labels.length > 8) {\n out.push('More than 8 rows of icons gets cramped; use a bar chart.');\n }\n if (spec.type !== 'combo' && spec.series.some((s) => s.as || s.axis)) {\n out.push('Series \"as\" and \"axis\" only apply to combo charts.');\n }\n if (spec.type !== 'combo' && spec.secondaryFormat) {\n out.push('secondaryFormat only applies to combo charts.');\n }\n if (spec.type !== 'waterfall' && spec.totals?.length) {\n out.push('totals only apply to waterfall charts.');\n }\n if (spec.type !== 'pictogram' && spec.perIcon !== undefined) {\n out.push('perIcon only applies to pictogram charts.');\n }\n if (\n spec.labels.length > 16 &&\n [\n 'column',\n 'bar',\n 'stacked-column',\n 'stacked-bar',\n 'percent-column',\n 'percent-bar',\n 'combo',\n 'waterfall',\n ].includes(spec.type)\n ) {\n out.push('More than 16 categories crowds the axis; consider a line chart or fewer categories.');\n }\n return out;\n}\n\nexport function formatValue(\n v: number,\n spec: Pick<ChartSpecValue, 'format' | 'decimals' | 'unit'>\n): string {\n const opts = { minimumFractionDigits: spec.decimals, maximumFractionDigits: spec.decimals };\n let s: string;\n switch (spec.format) {\n case 'percent':\n s = `${v.toLocaleString('en-US', opts)}%`;\n break;\n case 'currency':\n s = v.toLocaleString('en-US', { style: 'currency', currency: 'USD', ...opts });\n break;\n case 'compact':\n s = v.toLocaleString('en-US', {\n notation: 'compact',\n maximumFractionDigits: Math.max(1, spec.decimals),\n });\n break;\n default:\n s = v.toLocaleString('en-US', opts);\n }\n return spec.unit ? `${s} ${spec.unit}` : s;\n}\n\n/** Series colours: brand accents first, then the muted Classic secondary palette. */\nexport function chartColors(palette?: BrandPalette): string[] {\n const p = palette ?? { primary: PALETTE.red, accent: PALETTE.teal, dark: PALETTE.navy };\n return [p.primary, p.accent, p.dark, PALETTE.sage, PALETTE.plum, PALETTE.stone];\n}\n\nconst MUTED = '#c9ccc6';\nconst TEXT = '#4f4f4f';\nconst AXIS = '#d1d5db';\nconst TRACK = '#e5e7eb';\nconst SPLIT = '#eef0ec';\n/** 24×24 house silhouette for pictogram charts. */\nconst HOUSE = 'path://M12 2L1.5 11H5v11h5.5v-7h3v7H19V11h3.5z';\n\n/** Mixes two #rrggbb colours; t = 0 gives a, 1 gives b. */\nfunction mix(a: string, b: string, t: number): string {\n const ch = (hex: string, i: number) => parseInt(hex.slice(1 + i * 2, 3 + i * 2), 16);\n const out = [0, 1, 2].map((i) => Math.round(ch(a, i) + (ch(b, i) - ch(a, i)) * t));\n return `#${out.map((n) => n.toString(16).padStart(2, '0')).join('')}`;\n}\n\n/** Smallest step × 10ⁿ at or above v. */\nfunction niceCeil(v: number, steps = [1, 2, 2.5, 5, 10]): number {\n if (v <= 0) return 1;\n const pow = 10 ** Math.floor(Math.log10(v));\n return (steps.find((m) => m * pow >= v) ?? 10) * pow;\n}\n\n/** Each category's series as shares of that category's total (0–100). */\nfunction toPercent(spec: ChartSpecValue): ChartSpecValue {\n const totals = spec.labels.map((_, i) =>\n spec.series.reduce((sum, s) => sum + Math.abs(s.values[i] ?? 0), 0)\n );\n return {\n ...spec,\n type: spec.type === 'percent-bar' ? 'stacked-bar' : 'stacked-column',\n format: 'percent',\n unit: undefined,\n max: 100,\n series: spec.series.map((s) => ({\n ...s,\n values: s.values.map((v, i) => (totals[i] ? (Math.abs(v) / totals[i]) * 100 : 0)),\n })),\n };\n}\n\n/** Builds the ECharts option for a spec. Pure; exported for tests and custom renderers. */\nexport function chartOption(spec: ChartSpecValue, palette?: BrandPalette): Record<string, unknown> {\n const colors = chartColors(palette);\n const fmt = (v: number) => formatValue(v, spec);\n const muted = (label: string, color: string) =>\n spec.highlight && spec.highlight !== label ? MUTED : color;\n const showLegend = spec.legend === 'show' || (spec.legend === 'auto' && spec.series.length > 1);\n const textStyle = { fontFamily: 'Figtree, system-ui, sans-serif', color: TEXT, fontSize: 15 };\n const base = {\n animation: false,\n color: colors,\n textStyle,\n legend: showLegend\n ? { top: 0, textStyle: { ...textStyle, fontSize: 14 }, itemGap: 18 }\n : { show: false },\n };\n const first = spec.series[0];\n const labelStyle = {\n show: spec.labelsOnData,\n color: TEXT,\n fontSize: 13,\n formatter: (p: { value: number }) => fmt(p.value),\n };\n const categoryAxis = (gap: boolean) => ({\n type: 'category',\n data: spec.labels,\n axisLine: { lineStyle: { color: AXIS } },\n axisTick: { show: false },\n axisLabel: { color: TEXT, fontSize: 14, interval: 0, hideOverlap: true },\n boundaryGap: gap,\n });\n const valueAxis = (s: Pick<ChartSpecValue, 'format' | 'decimals'> = spec) => ({\n type: 'value',\n max: spec.max,\n axisLine: { show: false },\n splitLine: { lineStyle: { color: SPLIT } },\n axisLabel: {\n color: '#7a7a7a',\n fontSize: 13,\n formatter: (v: number) => formatValue(v, { ...s, unit: undefined }),\n },\n });\n // Rows read top-down on horizontal charts.\n const rowAxis = () => ({ ...categoryAxis(true), inverse: true });\n\n if (spec.type === 'percent-column' || spec.type === 'percent-bar') {\n return chartOption(toPercent(spec), palette);\n }\n\n if (spec.type === 'waterfall') {\n const totals = new Set(spec.totals ?? []);\n let running = 0;\n const steps = spec.labels.map((name, i) => {\n if (totals.has(name)) return { name, base: 0, delta: running, total: true };\n const delta = first.values[i] ?? 0;\n const step = { name, base: running, delta, total: false };\n running += delta;\n return step;\n });\n const stack = { type: 'bar', stack: 'waterfall', stackStrategy: 'all', barMaxWidth: 56 };\n return {\n ...base,\n legend: { show: false },\n grid: { left: 16, right: 24, top: 28, bottom: 12, containLabel: true },\n xAxis: categoryAxis(true),\n yAxis: valueAxis(),\n series: [\n // Invisible spacer lifts each step to the running total.\n {\n ...stack,\n silent: true,\n itemStyle: { color: 'transparent' },\n data: steps.map((s) => s.base),\n },\n {\n ...stack,\n data: steps.map((s) => ({\n value: s.delta,\n itemStyle: {\n color: muted(s.name, s.total ? colors[2] : s.delta >= 0 ? colors[1] : colors[0]),\n borderRadius: 3,\n },\n label: { position: s.delta < 0 ? 'bottom' : 'top' },\n })),\n label: {\n ...labelStyle,\n formatter: (p: { dataIndex: number }) => {\n const s = steps[p.dataIndex];\n // The opening bar and totals are levels, not changes.\n if (s.total || p.dataIndex === 0) return fmt(s.delta);\n return `${s.delta < 0 ? '−' : '+'}${fmt(Math.abs(s.delta))}`;\n },\n },\n },\n ],\n };\n }\n\n if (spec.type === 'heatmap') {\n const all = spec.series.flatMap((s) => s.values);\n const lo = Math.min(...all);\n const span = (spec.max ?? Math.max(...all)) - lo || 1;\n const light = mix(colors[1], '#ffffff', 0.88);\n return {\n ...base,\n legend: { show: false },\n // ECharts heatmaps need a visualMap; ours is hidden (cells carry their values).\n visualMap: {\n show: false,\n min: lo,\n max: lo + span,\n dimension: 2,\n inRange: { color: [light, colors[1], colors[2]] },\n },\n grid: { left: 16, right: 16, top: 36, bottom: 8, containLabel: true },\n xAxis: {\n type: 'category',\n data: spec.series.map((s) => s.name),\n position: 'top',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: { color: TEXT, fontSize: 14, interval: 0 },\n },\n yAxis: { ...rowAxis(), axisLine: { show: false } },\n series: [\n {\n type: 'heatmap',\n itemStyle: { borderColor: '#fff', borderWidth: 3 },\n data: spec.labels.flatMap((_, y) =>\n spec.series.map((s, x) => {\n const v = s.values[y] ?? 0;\n const t = Math.min(1, Math.max(0, (v - lo) / span));\n return {\n value: [x, y, v],\n label: { color: t > 0.3 ? '#fff' : TEXT },\n };\n })\n ),\n label: {\n show: spec.labelsOnData,\n fontSize: 14,\n formatter: (p: { value: number[] }) => fmt(p.value[2]),\n },\n },\n ],\n };\n }\n\n if (spec.type === 'dumbbell') {\n const lows = spec.labels.map((_, i) => Math.min(...spec.series.map((s) => s.values[i] ?? 0)));\n const highs = spec.labels.map((_, i) => Math.max(...spec.series.map((s) => s.values[i] ?? 0)));\n const bar = { type: 'bar', stack: 'span', stackStrategy: 'all', silent: true, barWidth: 4 };\n return {\n ...base,\n legend:\n spec.legend === 'hide'\n ? { show: false }\n : { ...base.legend, show: true, data: spec.series.map((s) => s.name) },\n grid: { left: 16, right: 90, top: 48, bottom: 12, containLabel: true },\n xAxis: { ...valueAxis(), scale: true },\n yAxis: rowAxis(),\n series: [\n // The connector: an invisible spacer to the low dot, then a thin bar to the high one.\n { ...bar, itemStyle: { color: 'transparent' }, data: lows },\n { ...bar, itemStyle: { color: AXIS }, data: highs.map((h, i) => h - lows[i]) },\n ...spec.series.map((s, si) => ({\n type: 'scatter',\n name: s.name,\n symbolSize: 18,\n z: 3,\n itemStyle: { color: colors[si % colors.length], opacity: 1 },\n data: s.values.map((v, i) => ({\n value: [v, i],\n itemStyle: { color: muted(spec.labels[i], colors[si % colors.length]), opacity: 1 },\n label: {\n position:\n lows[i] === highs[i]\n ? 'top'\n : v === lows[i]\n ? 'left'\n : v === highs[i]\n ? 'right'\n : 'top',\n },\n })),\n label: {\n ...labelStyle,\n distance: 10,\n formatter: (p: { value: number[] }) => fmt(p.value[0]),\n },\n })),\n ],\n };\n }\n\n if (spec.type === 'bullet') {\n const [actual, target] = spec.series;\n const top = spec.max ?? niceCeil(Math.max(...actual.values, ...(target?.values ?? [])) * 1.05);\n const showTarget = Boolean(target) && spec.legend !== 'hide';\n return {\n ...base,\n legend:\n showTarget || spec.legend === 'show'\n ? { ...base.legend, show: true, data: spec.series.slice(0, 2).map((s) => s.name) }\n : { show: false },\n grid: { left: 16, right: 40, top: showTarget ? 48 : 20, bottom: 12, containLabel: true },\n xAxis: { ...valueAxis(), max: top },\n yAxis: rowAxis(),\n series: [\n {\n type: 'bar',\n name: actual.name,\n barWidth: 16,\n showBackground: true,\n backgroundStyle: { color: TRACK, borderRadius: 3 },\n data: actual.values.map((v, i) => ({\n value: v,\n itemStyle: { color: muted(spec.labels[i], colors[0]), borderRadius: 3 },\n })),\n label: { ...labelStyle, position: 'right', distance: 10 },\n },\n ...(target\n ? [\n {\n type: 'scatter',\n name: target.name,\n symbol: 'rect',\n symbolSize: [5, 34],\n z: 3,\n itemStyle: { color: colors[2] },\n data: target.values.map((v, i) => [v, i]),\n },\n ]\n : []),\n ],\n };\n }\n\n if (spec.type === 'treemap') {\n return {\n ...base,\n legend: { show: false },\n series: [\n {\n type: 'treemap',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n roam: false,\n nodeClick: false,\n breadcrumb: { show: false },\n itemStyle: { borderColor: '#fff', borderWidth: 3, gapWidth: 3 },\n data: spec.labels.map((name, i) => ({\n name,\n value: first.values[i],\n itemStyle: { color: muted(name, colors[i % colors.length]) },\n })),\n label: {\n show: true,\n color: '#fff',\n fontSize: 15,\n overflow: 'truncate',\n formatter: (p: { name: string; value: number }) =>\n spec.labelsOnData ? `${p.name}\\n${fmt(p.value)}` : p.name,\n },\n },\n ],\n };\n }\n\n if (spec.type === 'ring') {\n const top = ringMax(spec) ?? 100;\n const n = Math.min(spec.labels.length, 4);\n const outer = [72, 64, 46, 34][n - 1];\n const size = [44, 40, 30, 24][n - 1];\n // Rich-text markup characters would break the centre label.\n const plain = (s: string) => s.replace(/[{}|]/g, '');\n return {\n ...base,\n legend: { show: false },\n series: spec.labels.slice(0, n).map((name, i) => {\n const v = first.values[i] ?? 0;\n return {\n type: 'pie',\n silent: true,\n startAngle: 90,\n radius: [`${outer - 12}%`, `${outer}%`],\n center: [`${((i + 0.5) / n) * 100}%`, '50%'],\n labelLine: { show: false },\n data: [\n {\n value: Math.min(Math.max(v, 0), top),\n name,\n itemStyle: { color: muted(name, colors[i % colors.length]) },\n label: {\n show: true,\n position: 'center',\n formatter: `{v|${plain(fmt(v))}}\\n{l|${plain(name)}}`,\n rich: {\n v: { fontSize: size, fontWeight: 600, color: colors[2], lineHeight: size * 1.2 },\n l: { fontSize: 15, color: TEXT, lineHeight: 22 },\n },\n },\n },\n {\n value: Math.max(0, top - v),\n name: '',\n itemStyle: { color: TRACK },\n label: { show: false },\n },\n ],\n };\n }),\n };\n }\n\n if (spec.type === 'sankey') {\n const nodes = [...new Set([...spec.labels, ...spec.series.map((s) => s.name)])];\n return {\n ...base,\n legend: { show: false },\n series: [\n {\n type: 'sankey',\n left: 16,\n right: 150,\n top: 16,\n bottom: 16,\n nodeWidth: 18,\n nodeGap: 14,\n draggable: false,\n emphasis: { disabled: true },\n data: nodes.map((name, i) => ({\n name,\n itemStyle: { color: muted(name, colors[i % colors.length]), borderWidth: 0 },\n })),\n links: sankeyLinks(spec),\n lineStyle: { color: 'source', opacity: 0.3, curveness: 0.5 },\n label: {\n color: TEXT,\n fontSize: 14,\n formatter: (p: { name: string; value: number }) =>\n spec.labelsOnData ? `${p.name} ${fmt(p.value)}` : p.name,\n },\n },\n ],\n };\n }\n\n if (spec.type === 'pictogram') {\n // Default: a 1/2/5 step that keeps the longest row at 20 icons or fewer.\n const per =\n spec.perIcon ?? Math.max(1, niceCeil(Math.max(...first.values) / 20, [1, 2, 5, 10]));\n // Whole icons only: a sliver of a house reads as noise; the label carries the exact value.\n const icons = first.values.map((v) => Math.round(v / per));\n const slots = Math.max(1, ...icons);\n const glyph = {\n type: 'pictorialBar',\n symbol: HOUSE,\n symbolRepeat: slots,\n symbolBoundingData: slots,\n // Fixed size keeps houses square; ECharts spaces them across each slot.\n symbolSize: Math.round(Math.min(40, 260 / spec.labels.length)),\n symbolClip: true,\n barCategoryGap: '25%',\n };\n return {\n ...base,\n legend: { show: false },\n grid: { left: 16, right: 16, top: 36, bottom: 8, containLabel: true },\n xAxis: { type: 'value', max: slots, show: false },\n yAxis: [\n {\n ...rowAxis(),\n axisLine: { show: false },\n name: `⌂ = ${formatValue(per, { ...spec, decimals: Math.min(3, (String(per).split('.')[1] ?? '').length) })}`,\n nameLocation: 'start',\n nameTextStyle: { color: '#7a7a7a', fontSize: 13, align: 'left' },\n },\n {\n ...rowAxis(),\n position: 'right',\n axisLine: { show: false },\n data: first.values.map(fmt),\n axisLabel: {\n show: spec.labelsOnData,\n color: colors[2],\n fontSize: 15,\n fontWeight: 600,\n },\n },\n ],\n series: [\n // Faded full row behind the filled icons.\n { ...glyph, silent: true, itemStyle: { color: TRACK }, data: icons.map(() => slots) },\n {\n ...glyph,\n barGap: '-100%',\n z: 3,\n data: icons.map((v, i) => ({\n value: v,\n // Clipping a full row trims the last icon's edge; partial rows clip between icons.\n symbolClip: v < slots,\n itemStyle: { color: muted(spec.labels[i], colors[0]) },\n })),\n },\n ],\n };\n }\n\n if (spec.type === 'pie' || spec.type === 'donut') {\n return {\n ...base,\n legend: spec.legend === 'show' ? base.legend : { show: false },\n series: [\n {\n type: 'pie',\n radius: spec.type === 'donut' ? ['46%', '72%'] : [0, '72%'],\n center: ['50%', '54%'],\n data: spec.labels.map((name, i) => ({\n name,\n value: first.values[i],\n itemStyle: { color: muted(name, colors[i % colors.length]) },\n })),\n label: {\n show: true,\n color: TEXT,\n fontSize: 14,\n formatter: (p: { name: string; value: number; percent: number }) =>\n spec.labelsOnData ? `${p.name}\\n${fmt(p.value)}` : p.name,\n },\n itemStyle: { borderColor: '#fff', borderWidth: 2 },\n },\n ],\n };\n }\n\n if (spec.type === 'funnel') {\n return {\n ...base,\n legend: { show: false },\n series: [\n {\n type: 'funnel',\n left: '12%',\n width: '76%',\n top: 16,\n bottom: 16,\n sort: 'descending',\n gap: 3,\n data: spec.labels.map((name, i) => ({\n name,\n value: first.values[i],\n itemStyle: { color: muted(name, colors[i % colors.length]) },\n })),\n label: {\n show: true,\n position: 'inside',\n color: '#fff',\n fontSize: 14,\n formatter: (p: { name: string; value: number }) =>\n spec.labelsOnData ? `${p.name} ${fmt(p.value)}` : p.name,\n },\n },\n ],\n };\n }\n\n if (spec.type === 'gauge') {\n return {\n ...base,\n series: [\n {\n type: 'gauge',\n min: 0,\n max: spec.max ?? 100,\n progress: { show: true, width: 22, itemStyle: { color: colors[0] } },\n axisLine: { lineStyle: { width: 22, color: [[1, '#e5e7eb']] } },\n axisTick: { show: false },\n splitLine: { show: false },\n axisLabel: { show: false },\n pointer: { show: false },\n anchor: { show: false },\n title: { offsetCenter: [0, '30%'], fontSize: 16, color: TEXT },\n detail: {\n valueAnimation: false,\n offsetCenter: [0, '-5%'],\n fontSize: 44,\n fontWeight: 600,\n color: colors[2],\n formatter: (v: number) => fmt(v),\n },\n data: [{ value: first.values[0], name: spec.labels[0] }],\n },\n ],\n };\n }\n\n if (spec.type === 'radar') {\n const max = spec.max ?? Math.max(...spec.series.flatMap((s) => s.values)) * 1.1;\n return {\n ...base,\n radar: {\n indicator: spec.labels.map((name) => ({ name, max })),\n axisName: { color: TEXT, fontSize: 14 },\n splitLine: { lineStyle: { color: AXIS } },\n splitArea: { show: false },\n axisLine: { lineStyle: { color: AXIS } },\n },\n series: [\n {\n type: 'radar',\n data: spec.series.map((s, i) => ({\n name: s.name,\n value: s.values,\n areaStyle: { opacity: 0.12 },\n lineStyle: { width: 2.5, color: colors[i % colors.length] },\n itemStyle: { color: colors[i % colors.length] },\n })),\n },\n ],\n };\n }\n\n if (spec.type === 'scatter') {\n const [xs, ys] = spec.series;\n return {\n ...base,\n legend: { show: false },\n grid: { left: 70, right: 30, top: 30, bottom: 60, containLabel: true },\n xAxis: {\n type: 'value',\n name: xs.name,\n nameLocation: 'middle',\n nameGap: 34,\n axisLine: { lineStyle: { color: AXIS } },\n splitLine: { lineStyle: { color: '#eef0ec' } },\n },\n yAxis: {\n type: 'value',\n name: ys.name,\n nameLocation: 'middle',\n nameGap: 50,\n axisLine: { lineStyle: { color: AXIS } },\n splitLine: { lineStyle: { color: '#eef0ec' } },\n },\n series: [\n {\n type: 'scatter',\n symbolSize: 16,\n data: spec.labels.map((name, i) => ({\n name,\n value: [xs.values[i], ys.values[i]],\n itemStyle: { color: muted(name, colors[0]) },\n })),\n label: {\n show: spec.labelsOnData,\n formatter: (p: { name: string }) => p.name,\n position: 'top',\n color: TEXT,\n fontSize: 12,\n },\n },\n ],\n };\n }\n\n // Cartesian: column, bar, stacked-*, line, area, combo.\n const horizontal = spec.type === 'bar' || spec.type === 'stacked-bar';\n const stacked = spec.type.startsWith('stacked');\n const combo = spec.type === 'combo';\n const lineAt = (si: number) =>\n combo\n ? (spec.series[si].as ?? (si === 0 ? 'bar' : 'line')) === 'line'\n : spec.type === 'line' || spec.type === 'area';\n const secondaryAt = (si: number) => combo && spec.series[si].axis === 'secondary';\n const hasSecondary = spec.series.some((_, si) => secondaryAt(si));\n const secondary = { ...spec, format: spec.secondaryFormat ?? spec.format };\n const category = categoryAxis(!spec.series.every((_, si) => lineAt(si)));\n const value = valueAxis();\n const yAxis = horizontal\n ? { ...category, inverse: true }\n : hasSecondary\n ? [\n value,\n { ...valueAxis(secondary), max: undefined, scale: true, splitLine: { show: false } },\n ]\n : value;\n return {\n ...base,\n grid: { left: 16, right: 24, top: showLegend ? 48 : 20, bottom: 12, containLabel: true },\n xAxis: horizontal ? value : category,\n yAxis,\n series: spec.series.map((s, si) => {\n const color = colors[si % colors.length];\n const isLine = lineAt(si);\n const own = secondaryAt(si) ? secondary : spec;\n return {\n type: isLine ? 'line' : 'bar',\n name: s.name,\n stack: stacked ? 'total' : undefined,\n yAxisIndex: secondaryAt(si) ? 1 : 0,\n z: isLine ? 3 : 2,\n smooth: false,\n symbolSize: 8,\n lineStyle: isLine ? { width: 3 } : undefined,\n areaStyle: spec.type === 'area' ? { opacity: 0.18 } : undefined,\n barMaxWidth: 56,\n itemStyle: stacked || isLine ? { color } : undefined,\n data: s.values.map((v, i) => ({\n value: v,\n itemStyle:\n stacked || isLine\n ? undefined\n : {\n color: muted(spec.labels[i], color),\n borderRadius: horizontal ? [0, 4, 4, 0] : [4, 4, 0, 0],\n },\n })),\n label: {\n ...labelStyle,\n // Combo line labels sit over bars; a backing keeps them legible.\n ...(combo && isLine ? { backgroundColor: '#fff', padding: [2, 5], borderRadius: 3 } : {}),\n formatter: (p: { value: number }) => formatValue(p.value, own),\n show: spec.labelsOnData && (!stacked || spec.series.length <= 3),\n position: stacked ? 'inside' : horizontal ? 'right' : 'top',\n color: stacked ? '#fff' : combo && isLine ? color : TEXT,\n },\n };\n }),\n };\n}\n\nexport interface ChartRenderer {\n render(option: Record<string, unknown>, width: number, height: number): string;\n}\n\nlet renderer: Promise<ChartRenderer> | undefined;\n\n/** Loads ECharts on first use. */\nexport function loadChartRenderer(): Promise<ChartRenderer> {\n renderer ??= import('./echarts-render.js').then((m) => m.createRenderer());\n return renderer;\n}\n\n/** Renders one chart spec to an accessible, responsive SVG string. */\nexport async function renderChartSvg(\n spec: ChartSpecValue,\n opts: { width?: number; height?: number; palette?: BrandPalette; title?: string } = {}\n): Promise<string> {\n const width = opts.width ?? 960;\n const height = opts.height ?? 520;\n const r = await loadChartRenderer();\n const svg = r.render(chartOption(spec, opts.palette), width, height);\n const label = `${opts.title ? `${opts.title}: ` : ''}${describeChart(spec)}`.replace(\n /[&<>\"]/g,\n (c) => `&#${c.charCodeAt(0)};`\n );\n // Responsive + accessible: drop fixed size, keep viewBox, label it.\n return svg\n .replace(/^<svg([^>]*?) width=\"\\d+\" height=\"\\d+\"/, '<svg$1')\n .replace(/^<svg/, `<svg role=\"img\" aria-label=\"${label}\" preserveAspectRatio=\"xMidYMid meet\"`);\n}\n\n/** Plain-language summary for screen readers. */\nexport function describeChart(spec: ChartSpecValue): string {\n const kind = `${spec.type.replace('-', ' ')} chart.`;\n const fmt = (v: number) => formatValue(v, spec);\n if (spec.type === 'sankey') {\n const flows = sankeyLinks(spec).map((l) => `${l.source} to ${l.target} ${fmt(l.value)}`);\n return `${kind} ${flows.join(', ')}.`;\n }\n if (spec.type === 'bullet') {\n const [actual, target] = spec.series;\n const rows = spec.labels.map(\n (l, i) =>\n `${l} ${fmt(actual.values[i] ?? 0)}${target ? ` against a target of ${fmt(target.values[i] ?? 0)}` : ''}`\n );\n return `${kind} ${rows.join(', ')}.`;\n }\n const parts = spec.series\n .slice(0, SINGLE_SERIES_CHARTS.includes(spec.type) ? 1 : 6)\n .map(\n (s) => `${s.name}: ${spec.labels.map((l, i) => `${l} ${fmt(s.values[i] ?? 0)}`).join(', ')}`\n );\n return `${kind} ${parts.join('. ')}.`;\n}\n","/**\n * Inline text formatting for slide copy and speaker notes.\n *\n * Deck text is never raw HTML: authors and agents write a tiny markdown subset\n * and everything else is escaped. That keeps decks on-brand (no inline styles)\n * and makes rendered output safe to publish.\n *\n * **bold** → <b> (strong ink colour)\n * *highlight* → <em class=\"hl\"> (track accent colour)\n * `code` → <code>\n * [label](url) → <a> (http/https/mailto/tel only)\n * single newline → <br>\n */\n\nconst ESCAPES: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\n\nexport function escapeHtml(value: string): string {\n return value.replace(/[&<>\"']/g, (c) => ESCAPES[c]);\n}\n\nexport function escapeAttr(value: string): string {\n return escapeHtml(value);\n}\n\n/**\n * Escapes a value for use inside a double-quoted CSS string, e.g. url(\"…\").\n * HTML-escaping alone is not enough: the attribute parser decodes " back\n * to a quote before CSS sees it, which would end the string.\n */\nexport function escapeCssString(value: string): string {\n return value.replace(/[\"'\\\\\\n\\r\\f]/g, (c) => `\\\\${c.charCodeAt(0).toString(16)} `);\n}\n\nconst SAFE_URL = /^(https?:|mailto:|tel:|#|\\/)/i;\n\n/** Navigation protocols permitted in authored links. */\nexport function isSafeLinkUrl(url: string): boolean {\n return SAFE_URL.test(url);\n}\n\n/** Formats one run of inline text. Newlines become line breaks. */\nexport function inline(text: string | undefined | null): string {\n if (!text) return '';\n // The private-use markers below are placeholders; drop any the author supplied.\n text = text.replace(/[\\uE000\\uE001]/g, '');\n if (!text) return '';\n // Pull code spans out first so their contents are not formatted.\n const codes: string[] = [];\n let s = text.replace(/`([^`]+)`/g, (_, code: string) => {\n codes.push(code);\n return `\\uE000${codes.length - 1}\\uE000`;\n });\n\n // Links are extracted before escaping so the URL survives intact. Neither the label nor\n // the URL may contain \"[\", so a failed match stops at the next bracket instead of\n // rescanning to the end of the text from every \"[\" (quadratic on bracket-heavy input).\n const links: string[] = [];\n s = s.replace(/\\[([^[\\]]+)\\]\\(([^)\\s[]+)\\)/g, (match, label: string, url: string) => {\n if (!isSafeLinkUrl(url)) return label;\n links.push(`<a href=\"${escapeAttr(url)}\">${formatEmphasis(escapeHtml(label))}</a>`);\n return `\\uE001${links.length - 1}\\uE001`;\n });\n\n s = formatEmphasis(escapeHtml(s));\n s = s.replace(/\\r?\\n/g, '<br>');\n s = s.replace(/\\uE001(\\d+)\\uE001/g, (_, i: string) => links[Number(i)]);\n s = s.replace(\n /\\uE000(\\d+)\\uE000/g,\n (_, i: string) => `<code>${escapeHtml(codes[Number(i)])}</code>`\n );\n return s;\n}\n\nfunction formatEmphasis(escaped: string): string {\n // A highlight cannot span another \"*\": each opener then scans only to the next star,\n // which keeps unclosed openers (\"x *a x *a …\") linear.\n return escaped\n .replace(/\\*\\*(.+?)\\*\\*/g, '<b>$1</b>')\n .replace(/(^|[^*])\\*(?!\\s)([^*\\n]+?)(?<!\\s)\\*(?!\\*)/g, '$1<em class=\"hl\">$2</em>');\n}\n\n/**\n * Formats a block of prose (speaker notes, long captions): blank lines split\n * paragraphs, lines starting with \"- \" become a bullet list.\n */\nexport function prose(text: string | undefined | null): string {\n if (!text) return '';\n return text\n .trim()\n .split(/\\n\\s*\\n/)\n .map((para) => {\n const lines = para.split(/\\n/);\n if (lines.every((l) => /^\\s*[-*]\\s+/.test(l))) {\n return `<ul>${lines.map((l) => `<li>${inline(l.replace(/^\\s*[-*]\\s+/, ''))}</li>`).join('')}</ul>`;\n }\n return `<p>${inline(para)}</p>`;\n })\n .join('');\n}\n\n/** Plain text (no markup) for alt text, titles and search. */\nexport function plain(text: string | undefined | null): string {\n if (!text) return '';\n return text\n .replace(/`([^`]+)`/g, '$1')\n .replace(/\\[([^[\\]]+)\\]\\([^)[]+\\)/g, '$1')\n .replace(/\\*\\*(.+?)\\*\\*/g, '$1')\n .replace(/\\*(.+?)\\*/g, '$1');\n}\n","/** YouTube / Vimeo URL parsing for the video layout. */\n\nexport interface VideoRef {\n provider: 'youtube' | 'vimeo';\n id: string;\n /** Canonical watch URL (used for QR codes and \"open\" links). */\n watchUrl: string;\n /** Poster image URL, when the provider exposes a predictable one. */\n poster?: string;\n}\n\nconst YT =\n /^(?:https:\\/\\/)?(?:www\\.|m\\.)?(?:youtube\\.com\\/(?:watch\\?(?:.*&)?v=|embed\\/|shorts\\/|live\\/)|youtu\\.be\\/)([\\w-]{11})/;\nconst VIMEO = /^(?:https:\\/\\/)?(?:www\\.|player\\.)?vimeo\\.com\\/(?:video\\/)?(\\d{6,12})/;\n\nexport function parseVideoUrl(url: string): VideoRef | undefined {\n const yt = YT.exec(url);\n if (yt) {\n return {\n provider: 'youtube',\n id: yt[1],\n watchUrl: `https://www.youtube.com/watch?v=${yt[1]}`,\n poster: `https://i.ytimg.com/vi/${yt[1]}/hqdefault.jpg`,\n };\n }\n const vm = VIMEO.exec(url);\n if (vm) return { provider: 'vimeo', id: vm[1], watchUrl: `https://vimeo.com/${vm[1]}` };\n return undefined;\n}\n\nexport interface EmbedOptions {\n start?: number;\n end?: number;\n muted?: boolean;\n captions?: boolean;\n autoplay?: boolean;\n}\n\n/** Privacy-friendly player URL (youtube-nocookie, Vimeo with dnt). */\nexport function videoEmbedUrl(ref: VideoRef, o: EmbedOptions): string {\n if (ref.provider === 'youtube') {\n const q = new URLSearchParams({\n rel: '0',\n modestbranding: '1',\n playsinline: '1',\n enablejsapi: '1',\n });\n if (o.start) q.set('start', String(o.start));\n if (o.end) q.set('end', String(o.end));\n if (o.muted) q.set('mute', '1');\n if (o.captions) q.set('cc_load_policy', '1');\n if (o.autoplay) q.set('autoplay', '1');\n return `https://www.youtube-nocookie.com/embed/${ref.id}?${q}`;\n }\n const q = new URLSearchParams({ dnt: '1', title: '0', byline: '0', portrait: '0' });\n if (o.muted) q.set('muted', '1');\n if (o.autoplay) q.set('autoplay', '1');\n if (o.captions) q.set('texttrack', 'en');\n const hash = o.start ? `#t=${o.start}s` : '';\n return `https://player.vimeo.com/video/${ref.id}?${q}${hash}`;\n}\n","/** Text-led layouts: title, section, statement, bullets, cards, stats, comparison, quote. */\nimport { z } from 'zod';\nimport { inline } from '../inline.js';\nimport { Image, Item, Marker, Text, Track } from '../schema/common.js';\nimport {\n eyebrow,\n footnote,\n heading,\n img,\n items,\n lead,\n maxCount,\n maxLen,\n missingAlt,\n} from './parts.js';\nimport { defineLayout } from './types.js';\n\nexport const title = defineLayout({\n name: 'title',\n description:\n 'Opening slide: kicker, large italic headline, subtitle, optional hero image and meta line.',\n whenToUse: 'First slide of every deck.',\n shape: {\n kicker: Text.optional().describe(\n 'Small uppercase line above the title (audience or occasion).'\n ),\n title: Text,\n lead: Text.optional(),\n image: Image.optional().describe('Hero photo under the title.'),\n meta: z\n .array(Text)\n .max(4)\n .optional()\n .describe('Short facts on one line, e.g. URL, date, presenter.'),\n logo: z.boolean().default(true).describe('Show the Classic Homes logo.'),\n align: z.enum(['left', 'center']).default('left'),\n },\n defaults: { track: 'neutral' },\n example: {\n layout: 'title',\n kicker: 'New Homeowner Orientation',\n title: 'Welcome to the Classic Homes family',\n lead: 'What to expect from contract to keys, and who to call along the way.',\n meta: ['guide.classichomes.com', 'May 2026'],\n },\n lint: (s) => [\n ...maxLen(s.title, 70, ['title'], 'Title'),\n ...maxLen(s.lead, 180, ['lead'], 'Lead'),\n ],\n render: (s, ctx) => ({\n classes: ['title-wrap', `align-${s.align}`],\n html: `${s.logo ? `<div class=\"brand-logo\">${ctx.logo()}</div>` : ''}${\n s.kicker ? `<p class=\"kicker\">${inline(s.kicker)}</p>` : ''\n }${heading(s.title, 1)}${lead(s.lead)}${s.image ? `<div class=\"hero\">${img(s.image, ctx)}</div>` : ''}${\n s.meta?.length\n ? `<div class=\"title-meta\">${s.meta.map((m) => `<span>${inline(m)}</span>`).join('')}</div>`\n : ''\n }`,\n }),\n});\n\nexport const section = defineLayout({\n name: 'section',\n description:\n 'Chapter divider on a solid brand colour: big centred italic title, optional line and photo row.',\n whenToUse: 'Start of each major part of the talk (e.g. each journey step).',\n shape: {\n kicker: Text.optional(),\n title: Text,\n lead: Text.optional(),\n images: z\n .array(Image)\n .max(12)\n .optional()\n .describe(\n 'Optional photos under the title (e.g. the team for this step). Rows wrap after 6.'\n ),\n imageAspect: z\n .enum(['portrait', 'landscape', 'native'])\n .default('portrait')\n .describe(\n 'portrait suits headshots; landscape/native suit a single scene photo (shown wide).'\n ),\n },\n defaults: { background: 'navy', track: 'neutral' },\n example: {\n layout: 'section',\n background: 'teal',\n step: 2,\n showJourney: true,\n title: 'Designing your new home',\n },\n lint: (s) => [\n ...maxLen(s.title, 50, ['title'], 'Section title'),\n ...missingAlt(s.images, ['images']),\n ],\n render: (s, ctx) => ({\n classes: ['align-center'],\n html: `${s.kicker ? `<p class=\"kicker\">${inline(s.kicker)}</p>` : ''}${heading(s.title, 1, 'divider-title')}${lead(\n s.lead\n )}${\n s.images?.length\n ? `<div class=\"photo-row aspect-${s.imageAspect}\" style=\"--n:${Math.min(6, s.images.length)}\">${s.images\n .map((i) => img(i, ctx))\n .join('')}</div>`\n : ''\n }`,\n }),\n});\n\nexport const statement = defineLayout({\n name: 'statement',\n description: 'One big idea: eyebrow, headline, supporting line. Lots of air.',\n whenToUse: 'A key message, a transition, or a closing line. Use when the words are the point.',\n shape: {\n eyebrow: Text.optional(),\n eyebrowSub: Text.optional(),\n title: Text,\n lead: Text.optional(),\n style: z\n .enum(['headline', 'display'])\n .default('headline')\n .describe('display = large italic serif.'),\n logo: z.boolean().default(false),\n },\n example: {\n layout: 'statement',\n eyebrow: 'Thank you',\n title: 'Building your home is one of the *greatest honours* we receive.',\n lead: 'Think of it as a journey — we will walk every step with you.',\n },\n lint: (s) => [\n ...maxLen(s.title, 110, ['title'], 'Headline'),\n ...maxLen(s.lead, 240, ['lead'], 'Lead'),\n ],\n render: (s, ctx) => ({\n html: `${eyebrow(s.eyebrow, s.eyebrowSub)}${heading(s.title, s.style === 'display' ? 1 : 2)}${lead(s.lead)}${\n s.logo ? `<div class=\"brand-logo end\">${ctx.logo()}</div>` : ''\n }`,\n }),\n});\n\nexport const bullets = defineLayout({\n name: 'bullets',\n description: 'Headline plus a tidy list, optionally split into two columns.',\n whenToUse: 'A short checklist or set of reminders. Keep items to a few words each.',\n shape: {\n eyebrow: Text.optional(),\n eyebrowSub: Text.optional(),\n title: Text,\n lead: Text.optional(),\n items: z.array(Item).min(1),\n marker: Marker,\n columns: z.union([z.literal(1), z.literal(2)]).default(1),\n footnote: Text.optional().describe('Closing line under the list.'),\n build: z.boolean().default(false).describe('Reveal one bullet per click while presenting.'),\n },\n example: {\n layout: 'bullets',\n eyebrow: 'Loan process',\n title: 'Reminders before closing',\n columns: 2,\n items: [\n 'Your right to understand the details of your loan',\n {\n text: '**Call your loan advisor** before',\n sub: 'moving funds · changing jobs · taking on debt',\n },\n \"Homeowner's insurance two weeks before closing\",\n 'Certified funds to close',\n ],\n },\n lint: (s) => [\n ...maxLen(s.title, 80, ['title'], 'Title'),\n ...maxCount(s.items, s.columns === 2 ? 10 : 6, ['items'], 'items'),\n ...s.items.flatMap((i, n) => maxLen(i.text, 110, ['items', n, 'text'], 'Item')),\n ],\n render: (s) => {\n const half = Math.ceil(s.items.length / 2);\n const list =\n s.columns === 2\n ? `<div class=\"cols even\">${items(s.items.slice(0, half), s.marker)}${items(s.items.slice(half), s.marker)}</div>`\n : items(s.items, s.marker);\n return {\n html: `${eyebrow(s.eyebrow, s.eyebrowSub)}${heading(s.title)}${lead(s.lead)}${\n s.build ? `<div data-build>${list}</div>` : list\n }${footnote(s.footnote)}`,\n };\n },\n});\n\nexport const cards = defineLayout({\n name: 'cards',\n description: 'Headline plus a grid of 2–4 columns of cards (tag, title, body, optional photo).',\n whenToUse: 'Three to eight peers of the same kind: services, options, people, phases.',\n shape: {\n eyebrow: Text.optional(),\n eyebrowSub: Text.optional(),\n title: Text,\n lead: Text.optional(),\n columns: z.number().int().min(2).max(4).default(3),\n style: z\n .enum(['card', 'banner'])\n .default('card')\n .describe('banner = coloured header band per card.'),\n cards: z\n .array(\n z.object({\n tag: Text.optional(),\n title: Text,\n body: Text.optional(),\n image: Image.optional(),\n })\n )\n .min(1),\n footnote: Text.optional().describe('Closing line under the cards.'),\n build: z.boolean().default(false).describe('Reveal one card per click while presenting.'),\n },\n example: {\n layout: 'cards',\n eyebrow: 'Your team',\n title: 'Who you will work with',\n cards: [\n {\n tag: 'Sales',\n title: 'New Home Specialist',\n body: 'Your first call for contract questions.',\n },\n { tag: 'Design', title: 'Design Consultant', body: 'Guides your selections at the studio.' },\n { tag: 'Build', title: 'Superintendent', body: 'Runs your site from foundation to finish.' },\n ],\n },\n lint: (s) => [\n ...maxLen(s.title, 80, ['title'], 'Title'),\n ...maxCount(s.cards, 8, ['cards'], 'cards'),\n ...s.cards.flatMap((c, n) => [\n ...maxLen(c.body, 160, ['cards', n, 'body'], 'Card body'),\n ...missingAlt(c.image ? [c.image] : [], ['cards', n, 'image']),\n ]),\n ],\n render: (s, ctx) => ({\n html: `${eyebrow(s.eyebrow, s.eyebrowSub)}${heading(s.title)}${lead(s.lead)}<div class=\"cardgrid cards--${s.style}\"${s.build ? ' data-build' : ''} style=\"--cols:${s.columns}\">${s.cards\n .map((c) => {\n const hasCopy = Boolean(c.tag?.trim() || c.title.trim() || c.body?.trim());\n const copy =\n c.image && !hasCopy\n ? ''\n : s.style === 'banner'\n ? `<div class=\"card-band\">${inline(c.tag ?? c.title)}</div><div class=\"card-b\">${\n c.tag ? `<h3>${inline(c.title)}</h3>` : ''\n }${c.body ? `<p>${inline(c.body)}</p>` : ''}</div>`\n : `<div class=\"card-b\">${c.tag ? `<span class=\"tag\">${inline(c.tag)}</span>` : ''}<h3>${inline(\n c.title\n )}</h3>${c.body ? `<p>${inline(c.body)}</p>` : ''}</div>`;\n return `<div class=\"card b-item\">${c.image ? img(c.image, ctx, 'card-img') : ''}${copy}</div>`;\n })\n .join('')}</div>${footnote(s.footnote)}`,\n }),\n});\n\nexport const stats = defineLayout({\n name: 'stats',\n description: 'Headline plus a row of big numbers with short labels.',\n whenToUse: 'Two to six figures worth remembering: timelines, counts, percentages.',\n shape: {\n eyebrow: Text.optional(),\n eyebrowSub: Text.optional(),\n title: Text,\n lead: Text.optional(),\n stats: z\n .array(\n z.object({\n value: z.string().max(12).describe('Short: \"60\", \"2 wks\", \"3×\".'),\n label: Text,\n trend: z.enum(['up', 'down', 'flat']).optional().describe('Arrow next to the value.'),\n delta: z\n .string()\n .max(16)\n .optional()\n .describe('Change text beside the arrow, e.g. \"+12%\".'),\n good: z\n .enum(['up', 'down'])\n .default('up')\n .describe('Which direction is good news (colours the arrow).'),\n spark: z\n .array(z.number())\n .min(2)\n .max(40)\n .optional()\n .describe('Recent values drawn as a tiny line under the number.'),\n })\n )\n .min(1),\n },\n example: {\n layout: 'stats',\n eyebrow: 'By the numbers',\n title: 'What the timeline looks like',\n stats: [\n { value: '60', label: 'days from contract to final selections' },\n { value: '14', label: 'construction stages' },\n { value: '2', label: 'site walkthroughs with your superintendent' },\n {\n value: '4.8',\n label: 'average homeowner rating',\n trend: 'up',\n delta: '+0.3',\n spark: [4.2, 4.4, 4.5, 4.8],\n },\n ],\n },\n lint: (s) => [\n ...maxLen(s.title, 80, ['title'], 'Title'),\n ...maxCount(s.stats, 6, ['stats'], 'stats'),\n ],\n render: (s) => ({\n html: `${eyebrow(s.eyebrow, s.eyebrowSub)}${heading(s.title)}${lead(s.lead)}<div class=\"stat-row\">${s.stats\n .map(\n (st) =>\n `<div class=\"stat\"><b>${inline(st.value)}</b>${\n st.trend\n ? `<em class=\"trend trend--${st.trend === 'flat' ? 'flat' : st.trend === st.good ? 'good' : 'bad'}\">${\n st.trend === 'up' ? '▲' : st.trend === 'down' ? '▼' : '▶'\n }${st.delta ? ` ${inline(st.delta)}` : ''}</em>`\n : ''\n }${st.spark ? sparkline(st.spark) : ''}<span>${inline(st.label)}</span></div>`\n )\n .join('')}</div>`,\n }),\n});\n\nexport const comparison = defineLayout({\n name: 'comparison',\n description: 'Two or three side-by-side columns, each with a coloured heading and a list.',\n whenToUse:\n 'Contrasting audiences, before/after, responsibilities split between parties, takeaways.',\n shape: {\n eyebrow: Text.optional(),\n eyebrowSub: Text.optional(),\n title: Text,\n lead: Text.optional(),\n columns: z\n .array(\n z.object({\n heading: Text,\n tone: Track.default('value'),\n text: Text.optional(),\n items: z.array(Item).optional(),\n marker: Marker,\n })\n )\n .min(2)\n .max(3),\n },\n example: {\n layout: 'comparison',\n eyebrow: 'Who does what',\n title: 'Warranty, split simply',\n columns: [\n {\n heading: 'Classic Homes covers',\n tone: 'value',\n items: ['Workmanship, year one', 'Structural, ten years'],\n },\n {\n heading: 'You look after',\n tone: 'build',\n items: ['Seasonal maintenance', 'Filters, caulk, grading'],\n },\n ],\n },\n lint: (s) => [\n ...maxLen(s.title, 80, ['title'], 'Title'),\n ...s.columns.flatMap((c, n) =>\n maxCount(c.items, 6, ['columns', n, 'items'], 'items in one column')\n ),\n ],\n render: (s) => ({\n html: `${eyebrow(s.eyebrow, s.eyebrowSub)}${heading(s.title)}${lead(s.lead)}<div class=\"split2\" style=\"--cols:${\n s.columns.length\n }\">${s.columns\n .map(\n (c) =>\n `<div class=\"col tone-${c.tone}\"><h3>${inline(c.heading)}</h3>${c.text ? `<p>${inline(c.text)}</p>` : ''}${items(\n c.items,\n c.marker\n )}</div>`\n )\n .join('')}</div>`,\n }),\n});\n\nexport const quote = defineLayout({\n name: 'quote',\n description: 'A pull quote with attribution, optional portrait.',\n whenToUse: 'A homeowner testimonial, a value statement, a line from leadership.',\n shape: {\n eyebrow: Text.optional(),\n quote: Text,\n cite: Text.optional(),\n image: Image.optional().describe('Portrait of the person quoted.'),\n },\n example: {\n layout: 'quote',\n quote: 'They walked us through every step. We always knew what came next.',\n cite: 'The Martinez family · Wolf Ranch',\n },\n lint: (s) => [\n ...maxLen(s.quote, 240, ['quote'], 'Quote'),\n ...missingAlt(s.image ? [s.image] : [], ['image']),\n ],\n render: (s, ctx) => ({\n html: `${eyebrow(s.eyebrow)}<div class=\"${s.image ? 'cols quote-cols' : ''}\"><blockquote class=\"quote\">${inline(\n s.quote\n )}${s.cite ? `<cite>${inline(s.cite)}</cite>` : ''}</blockquote>${\n s.image ? `<div class=\"portrait\">${img(s.image, ctx)}</div>` : ''\n }</div>`,\n }),\n});\n\n/** Tiny inline SVG line for stat trends. Colour follows the slide accent via CSS. */\nexport function sparkline(values: number[]): string {\n const w = 120;\n const h = 32;\n const min = Math.min(...values);\n const span = Math.max(...values) - min || 1;\n const pts = values\n .map(\n (v, i) =>\n `${((i / (values.length - 1)) * w).toFixed(1)},${(h - 3 - ((v - min) / span) * (h - 6)).toFixed(1)}`\n )\n .join(' ');\n const last = pts.split(' ').pop()!.split(',');\n return `<svg class=\"spark\" viewBox=\"0 0 ${w} ${h}\" aria-hidden=\"true\"><polyline points=\"${pts}\"/><circle cx=\"${last[0]}\" cy=\"${last[1]}\" r=\"3\"/></svg>`;\n}\n","/** Small HTML builders shared by the layouts. */\nimport { escapeAttr, inline } from '../inline.js';\nimport type { ImageValue, ItemValue } from '../schema/common.js';\nimport type { LayoutIssue, RenderContext } from './types.js';\n\nexport function eyebrow(text?: string, sub?: string): string {\n if (!text) return '';\n const clean = sub?.replace(/^\\s*\\/\\s*/, '');\n return `<p class=\"eyebrow\">${inline(text)}${clean ? ` <span class=\"act\">/ ${inline(clean)}</span>` : ''}</p>`;\n}\n\nexport function heading(text: string, level: 1 | 2 = 2, cls = ''): string {\n return `<h${level}${cls ? ` class=\"${cls}\"` : ''}>${inline(text)}</h${level}>`;\n}\n\nexport function footnote(text?: string): string {\n return text ? `<p class=\"footnote\">${inline(text)}</p>` : '';\n}\n\nexport function lead(text?: string, cls = 'lead'): string {\n return text ? `<p class=\"${cls}\">${inline(text)}</p>` : '';\n}\n\nexport function items(\n list: ItemValue[] | undefined,\n marker: 'square' | 'check' = 'square'\n): string {\n if (!list?.length) return '';\n const cls = marker === 'check' ? 'clean check' : 'clean';\n return `<ul class=\"${cls}\">${list\n .map(\n (i) =>\n `<li class=\"b-item\">${inline(i.text)}${i.sub ? `<span class=\"sub\">${inline(i.sub)}</span>` : ''}</li>`\n )\n .join('')}</ul>`;\n}\n\nconst SAFE_FOCUS = /^[a-z0-9.%\\s-]+$/i;\n\nexport function img(image: ImageValue, ctx: RenderContext, cls = ''): string {\n const style: string[] = [];\n if (image.fit === 'contain') style.push('object-fit:contain');\n // Keywords, lengths and percentages only: anything else could smuggle in extra declarations.\n if (image.focus && SAFE_FOCUS.test(image.focus)) style.push(`object-position:${image.focus}`);\n const classes = [cls, image.size === 'natural' ? 'natural' : ''].filter(Boolean).join(' ');\n const src = ctx.image(image.src);\n // Inlined images are already in memory; lazy-loading them only causes layout shift.\n const loading = src.startsWith('data:') ? '' : ' loading=\"lazy\"';\n return `<img${classes ? ` class=\"${classes}\"` : ''} src=\"${escapeAttr(src)}\" alt=\"${escapeAttr(image.alt)}\"${\n style.length ? ` style=\"${escapeAttr(style.join(';'))}\"` : ''\n }${loading} decoding=\"async\">`;\n}\n\nexport function maxLen(\n value: string | undefined,\n limit: number,\n path: (string | number)[],\n what: string\n): LayoutIssue[] {\n if (!value || value.length <= limit) return [];\n return [\n {\n level: 'warning',\n path,\n message: `${what} is ${value.length} characters; keep it under ${limit} so the slide stays readable. Move detail to the speaker notes.`,\n },\n ];\n}\n\nexport function maxCount(\n list: unknown[] | undefined,\n limit: number,\n path: (string | number)[],\n what: string\n): LayoutIssue[] {\n if (!list || list.length <= limit) return [];\n return [\n {\n level: 'warning',\n path,\n message: `${list.length} ${what}; more than ${limit} crowds the slide. Split it into two slides.`,\n },\n ];\n}\n\nexport function missingAlt(\n images: ImageValue[] | undefined,\n path: (string | number)[]\n): LayoutIssue[] {\n return (images ?? []).flatMap((im, i) =>\n im.alt\n ? []\n : [\n {\n level: 'warning' as const,\n path: [...path, i, 'alt'],\n message: 'Image has no alt text. Describe it for people using screen readers.',\n },\n ]\n );\n}\n","import type { z } from 'zod';\n/** The deck-level fields a layout may read while rendering. */\nexport interface DeckContext {\n title: string;\n journey?: { steps: string[]; label: string };\n}\n\n/** A chart to pre-render before slides are rendered (see charts.ts). */\nexport interface ChartRequest {\n key: string;\n spec: unknown;\n width: number;\n height: number;\n}\n\nexport interface RenderContext {\n deck: DeckContext;\n /** Resolved image sources (original src → data URI or URL). */\n image(src: string): string;\n /** Pre-rendered QR code SVG for a URL (declare URLs in `prepare`). */\n qr(url: string): string;\n /** Pre-rendered chart SVG (declare charts in `prepare`). */\n chart(key: string): string;\n /** The deck's logo lockup for this brand ('' when settings.logo is 'none'). */\n logo(): string;\n /** Resolved brand name. */\n brandName: string;\n}\n\n/** Async work a layout needs done before render: QR codes and charts. */\nexport interface Prepared {\n qr?: string[];\n charts?: ChartRequest[];\n /** Extra image URLs to resolve (inline) that are not `src` fields, e.g. video posters. */\n images?: string[];\n}\n\n/** One rendered <section>. Layouts return several when one entry expands into a sequence. */\nexport interface RenderedSlide {\n html: string;\n /** Extra classes on the section (layout class is added automatically). */\n classes?: string[];\n /** Overrides the slide's own notes (e.g. per-stage notes in a walkthrough). */\n notes?: string;\n time?: string;\n}\n\nexport interface LayoutIssue {\n level: 'error' | 'warning';\n path: (string | number)[];\n message: string;\n}\n\nexport interface LayoutDef<Shape extends z.ZodRawShape = z.ZodRawShape> {\n /** Value of `layout` in the deck file. */\n name: string;\n /** One line: what the slide looks like. */\n description: string;\n /** When an author or agent should pick this layout. */\n whenToUse: string;\n /** Layout-specific fields (base slide fields are added by the deck schema). */\n shape: Shape;\n /** Defaults applied when the slide leaves them unset. */\n defaults?: { background?: string; track?: 'value' | 'build' | 'neutral' };\n /** A complete, valid example slide. */\n example: Record<string, unknown>;\n /** Declares QR codes / charts to pre-render for this slide. */\n prepare?(slide: z.infer<z.ZodObject<Shape>>): Prepared;\n /** Soft checks beyond the schema: length and density limits that keep slides clean. */\n lint?(slide: z.infer<z.ZodObject<Shape>>): LayoutIssue[];\n render(slide: z.infer<z.ZodObject<Shape>>, ctx: RenderContext): RenderedSlide | RenderedSlide[];\n}\n\nexport function defineLayout<Shape extends z.ZodRawShape>(def: LayoutDef<Shape>): LayoutDef<Shape> {\n return def;\n}\n","/** Data layouts: chart, table. */\nimport { z } from 'zod';\nimport { chartIssues, ChartSpec, chartWarnings, formatValue } from '../charts.js';\nimport { escapeHtml, inline } from '../inline.js';\nimport { Item, Text } from '../schema/common.js';\nimport { eyebrow, footnote, heading, items, lead, maxLen } from './parts.js';\nimport { defineLayout, type LayoutIssue } from './types.js';\n\nexport const CHART_SIZE = { wide: { width: 1040, height: 500 }, side: { width: 720, height: 500 } };\n\nexport const chart = defineLayout({\n name: 'chart',\n description:\n 'A branded chart (column, bar, stacked, 100% stacked, line, area, combo, pie, donut, treemap, funnel, waterfall, gauge, ring, bullet, dumbbell, heatmap, sankey, pictogram, scatter, radar) with an optional takeaway column.',\n whenToUse:\n 'Numbers that tell a story: sales by quarter, timelines, shares, survey scores. State the takeaway in the title.',\n shape: {\n eyebrow: Text.optional(),\n eyebrowSub: Text.optional(),\n title: Text.describe('Say what the chart shows, e.g. \"Closings doubled since spring\".'),\n lead: Text.optional(),\n chart: ChartSpec,\n insights: z.array(Item).max(4).optional().describe('Up to 4 takeaways shown beside the chart.'),\n source: Text.optional().describe('Where the numbers come from.'),\n },\n example: {\n layout: 'chart',\n eyebrow: 'Sales',\n title: 'Closings *doubled* since spring',\n chart: {\n type: 'column',\n labels: ['Q1', 'Q2', 'Q3', 'Q4'],\n series: [{ name: 'Closings', values: [42, 61, 88, 94] }],\n unit: 'homes',\n highlight: 'Q4',\n },\n insights: ['Q4 best quarter on record', '**+124%** vs Q1'],\n source: 'Sales ops, closed contracts',\n },\n prepare: (s) => ({\n charts: [\n {\n key: JSON.stringify(s.chart),\n spec: s.chart,\n ...(s.insights?.length ? CHART_SIZE.side : CHART_SIZE.wide),\n },\n ],\n }),\n lint: (s) => [\n ...maxLen(s.title, 80, ['title'], 'Title'),\n ...chartIssues(s.chart).map(\n (message): LayoutIssue => ({ level: 'error', path: ['chart'], message })\n ),\n ...chartWarnings(s.chart).map(\n (message): LayoutIssue => ({ level: 'warning', path: ['chart'], message })\n ),\n ],\n render: (s, ctx) => {\n const svg = `<figure class=\"chart-fig\">${ctx.chart(JSON.stringify(s.chart))}${\n s.source ? `<figcaption class=\"source\">Source: ${inline(s.source)}</figcaption>` : ''\n }</figure>`;\n return {\n html: `${eyebrow(s.eyebrow, s.eyebrowSub)}${heading(s.title)}${lead(s.lead)}${\n s.insights?.length\n ? `<div class=\"chart-split\">${svg}<div class=\"insights\">${items(s.insights)}</div></div>`\n : svg\n }`,\n };\n },\n});\n\nconst Cell = z.union([z.string().max(80), z.number()]);\n\nexport const table = defineLayout({\n name: 'table',\n description:\n 'A clean data table: header row, aligned numbers, optional highlighted row/column and totals row.',\n whenToUse: 'Exact figures people will compare: pricing, schedules, specs, option matrices.',\n shape: {\n eyebrow: Text.optional(),\n eyebrowSub: Text.optional(),\n title: Text,\n lead: Text.optional(),\n columns: z\n .array(\n z.object({\n label: Text,\n align: z\n .enum(['left', 'center', 'right'])\n .optional()\n .describe('Defaults to right for numbers.'),\n format: z.enum(['text', 'number', 'percent', 'currency']).default('text'),\n })\n )\n .min(1)\n .max(8),\n rows: z\n .array(z.array(Cell))\n .min(1)\n .max(14)\n .describe('One array per row, one cell per column. Text cells support inline formatting.'),\n totals: z.array(Cell).optional().describe('Optional bold totals row.'),\n highlightRow: z.number().int().positive().optional().describe('1-based row to emphasise.'),\n highlightColumn: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('1-based column to emphasise.'),\n footnote: Text.optional(),\n },\n example: {\n layout: 'table',\n eyebrow: 'Options',\n title: 'Smart home packages',\n columns: [\n { label: 'Package' },\n { label: 'Devices', format: 'number' },\n { label: 'Price', format: 'currency' },\n ],\n rows: [\n ['Essentials', 6, 1450],\n ['Connected', 11, 2900],\n ['Premier', 18, 4800],\n ],\n highlightRow: 2,\n footnote: 'Prices per home; installed before closing.',\n },\n lint: (s) => {\n const out: LayoutIssue[] = [...maxLen(s.title, 80, ['title'], 'Title')];\n s.rows.forEach((r, i) => {\n if (r.length !== s.columns.length) {\n out.push({\n level: 'error',\n path: ['rows', i],\n message: `Row has ${r.length} cells but there are ${s.columns.length} columns.`,\n });\n }\n });\n if (s.totals && s.totals.length !== s.columns.length) {\n out.push({\n level: 'error',\n path: ['totals'],\n message: `Totals has ${s.totals.length} cells but there are ${s.columns.length} columns.`,\n });\n }\n if (s.rows.length > 10) {\n out.push({\n level: 'warning',\n path: ['rows'],\n message: `${s.rows.length} rows is dense for a slide; split or summarise.`,\n });\n }\n return out;\n },\n render: (s) => {\n const cell = (v: string | number, ci: number) => {\n const col = s.columns[ci];\n if (typeof v === 'number' && col.format !== 'text') {\n return formatValue(v, {\n format:\n col.format === 'currency'\n ? 'currency'\n : col.format === 'percent'\n ? 'percent'\n : 'number',\n decimals: 0,\n });\n }\n return typeof v === 'number' ? escapeHtml(String(v)) : inline(v);\n };\n const align = (ci: number) =>\n s.columns[ci].align ?? (s.columns[ci].format === 'text' ? 'left' : 'right');\n const td = (tag: 'td' | 'th', v: string | number, ci: number) =>\n `<${tag} class=\"al-${align(ci)}${s.highlightColumn === ci + 1 ? ' hl-col' : ''}\">${cell(v, ci)}</${tag}>`;\n return {\n html: `${eyebrow(s.eyebrow, s.eyebrowSub)}${heading(s.title)}${lead(s.lead)}<div class=\"table-wrap\"><table class=\"data-table\"><thead><tr>${s.columns\n .map(\n (c, ci) =>\n `<th scope=\"col\" class=\"al-${align(ci)}${s.highlightColumn === ci + 1 ? ' hl-col' : ''}\">${inline(c.label)}</th>`\n )\n .join('')}</tr></thead><tbody>${s.rows\n .map(\n (r, ri) =>\n `<tr${s.highlightRow === ri + 1 ? ' class=\"hl-row\"' : ''}>${r.map((v, ci) => td(ci === 0 ? 'th' : 'td', v, ci)).join('')}</tr>`\n )\n .join('')}</tbody>${\n s.totals\n ? `<tfoot><tr>${s.totals.map((v, ci) => td(ci === 0 ? 'th' : 'td', v, ci)).join('')}</tr></tfoot>`\n : ''\n }</table></div>${footnote(s.footnote)}`,\n };\n },\n});\n","/**\n * Diagram layouts drawn with HTML/CSS and small inline SVG (no Mermaid: it\n * cannot render server-side in Workers). Every diagram is plain markup, so it\n * prints, scales and stays sharp.\n */\nimport { z } from 'zod';\nimport { escapeHtml, inline } from '../inline.js';\nimport { Image, Text } from '../schema/common.js';\nimport { eyebrow, footnote, heading, img, lead, maxCount, maxLen, missingAlt } from './parts.js';\nimport { defineLayout, type LayoutIssue } from './types.js';\n\nconst Build = z.boolean().default(false).describe('Reveal one item per click while presenting.');\n\nconst Step = z.object({\n title: Text,\n text: Text.optional(),\n});\n\nconst buildAttr = (on: boolean) => (on ? ' data-build' : '');\n\nexport const flow = defineLayout({\n name: 'flow',\n description:\n 'A process: 2–7 steps joined by arrows, left-to-right or top-to-bottom, with an optional end pill.',\n whenToUse: 'How something happens in order: approval paths, what comes next, hand-offs.',\n shape: {\n eyebrow: Text.optional(),\n eyebrowSub: Text.optional(),\n title: Text,\n lead: Text.optional(),\n steps: z.array(Step).min(2).max(7),\n direction: z.enum(['horizontal', 'vertical']).default('horizontal'),\n numbered: z.boolean().default(true),\n end: Text.optional().describe('Pill after the last step, e.g. \"Step 3\" or \"Keys!\".'),\n build: Build,\n footnote: Text.optional(),\n },\n example: {\n layout: 'flow',\n eyebrow: 'Step 2',\n title: 'What comes next',\n steps: [\n { title: 'Personalized Color Chart', text: 'Design timeline — 60 days from contract' },\n { title: 'New Home Specialists', text: 'Home Start Review' },\n ],\n end: 'Step 3',\n direction: 'vertical',\n },\n lint: (s) => [\n ...maxLen(s.title, 80, ['title'], 'Title'),\n ...s.steps.flatMap((st, i) => maxLen(st.text, 110, ['steps', i, 'text'], 'Step text')),\n ...(s.direction === 'horizontal' && s.steps.length > 5\n ? [\n {\n level: 'warning' as const,\n path: ['steps'],\n message: 'More than 5 steps side by side gets cramped; try direction: vertical.',\n },\n ]\n : []),\n ],\n render: (s) => ({\n html: `${eyebrow(s.eyebrow, s.eyebrowSub)}${heading(s.title)}${lead(s.lead)}<ol class=\"flow flow--${s.direction}\"${buildAttr(\n s.build\n )} style=\"--n:${s.steps.length + (s.end ? 1 : 0)}\">${s.steps\n .map(\n (st, i) =>\n `<li class=\"flow-step b-item\">${s.numbered ? `<span class=\"flow-n\">${i + 1}</span>` : ''}<div><h3>${inline(\n st.title\n )}</h3>${st.text ? `<p>${inline(st.text)}</p>` : ''}</div></li>`\n )\n .join(\n ''\n )}${s.end ? `<li class=\"flow-end b-item\"><span>${inline(s.end)}</span></li>` : ''}</ol>${footnote(s.footnote)}`,\n }),\n});\n\nexport const timeline = defineLayout({\n name: 'timeline',\n description:\n 'Dated milestones along a line, optionally grouped into tinted phases, with the current point marked.',\n whenToUse: 'Schedules and histories: build timeline, closing countdown, company milestones.',\n shape: {\n eyebrow: Text.optional(),\n eyebrowSub: Text.optional(),\n title: Text,\n lead: Text.optional(),\n items: z\n .array(\n z.object({\n date: z.string().max(24).describe('Short: \"Week 1\", \"Mar 2026\", \"Day 60\".'),\n title: Text,\n text: Text.optional(),\n })\n )\n .min(2)\n .max(10),\n phases: z\n .array(\n z.object({\n label: Text,\n from: z.number().int().positive().describe('First item in the phase (1-based).'),\n to: z.number().int().positive().describe('Last item in the phase (1-based).'),\n })\n )\n .max(4)\n .optional(),\n current: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Item to mark as \"you are here\" (1-based).'),\n build: Build,\n },\n example: {\n layout: 'timeline',\n eyebrow: 'Your guide',\n title: 'The whole path — from contract to year eight',\n items: [\n { date: '01', title: 'Introduction' },\n { date: '02', title: 'Purchasing' },\n { date: '03', title: 'Design' },\n { date: '04', title: 'Construction' },\n { date: '05', title: 'Closing' },\n { date: '06', title: 'Warranty' },\n { date: '07', title: 'Use & Care' },\n { date: '08', title: 'HOA & Metro' },\n ],\n phases: [\n { label: 'Getting to your home', from: 1, to: 5 },\n { label: 'Living in your home', from: 6, to: 8 },\n ],\n current: 5,\n },\n lint: (s) => {\n const out: LayoutIssue[] = [...maxLen(s.title, 80, ['title'], 'Title')];\n (s.phases ?? []).forEach((p, i) => {\n if (p.from > p.to || p.to > s.items.length) {\n out.push({\n level: 'error',\n path: ['phases', i],\n message: `Phase covers items ${p.from}–${p.to} but there are ${s.items.length} items.`,\n });\n }\n });\n if (s.current && s.current > s.items.length) {\n out.push({\n level: 'error',\n path: ['current'],\n message: `current is ${s.current} but there are ${s.items.length} items.`,\n });\n }\n return out;\n },\n render: (s) => {\n const phaseOf = (i: number) =>\n (s.phases ?? []).findIndex((p) => i + 1 >= p.from && i + 1 <= p.to);\n const bands = (s.phases ?? [])\n .map(\n (p, pi) =>\n `<div class=\"tl-phase tl-phase--${pi % 2}\" style=\"grid-column:${p.from} / ${p.to + 1}\"><span>${inline(p.label)}</span></div>`\n )\n .join('');\n return {\n html: `${eyebrow(s.eyebrow, s.eyebrowSub)}${heading(s.title)}${lead(s.lead)}<div class=\"timeline\"${buildAttr(\n s.build\n )} style=\"--n:${s.items.length}\">${bands ? `<div class=\"tl-phases\">${bands}</div>` : ''}<ol class=\"tl-items\">${s.items\n .map((it, i) => {\n const cls = [\n 'tl-item',\n 'b-item',\n phaseOf(i) >= 0 ? `tl-in-${phaseOf(i) % 2}` : '',\n s.current === i + 1 ? 'tl-current' : '',\n s.current && i + 1 < s.current ? 'tl-done' : '',\n ]\n .filter(Boolean)\n .join(' ');\n return `<li class=\"${cls}\"><span class=\"tl-dot\"></span><span class=\"tl-date\">${escapeHtml(it.date)}</span><h3>${inline(\n it.title\n )}</h3>${it.text ? `<p>${inline(it.text)}</p>` : ''}</li>`;\n })\n .join('')}</ol></div>`,\n };\n },\n});\n\nexport const cycle = defineLayout({\n name: 'cycle',\n description:\n 'A repeating process: 3–6 steps arranged around a circle with arrows, optional centre label.',\n whenToUse: 'Loops that repeat: seasonal maintenance, feedback cycles, plan-do-review.',\n shape: {\n eyebrow: Text.optional(),\n title: Text,\n lead: Text.optional(),\n steps: z.array(Step).min(3).max(6),\n center: Text.optional().describe('Word in the middle of the circle.'),\n },\n example: {\n layout: 'cycle',\n eyebrow: 'Use & care',\n title: 'Seasonal maintenance, every year',\n center: 'Your home',\n steps: [\n { title: 'Spring', text: 'Check grading and gutters' },\n { title: 'Summer', text: 'Service AC, reseal decks' },\n { title: 'Fall', text: 'Blow out sprinklers' },\n { title: 'Winter', text: 'Replace furnace filter' },\n ],\n },\n lint: (s) => s.steps.flatMap((st, i) => maxLen(st.text, 70, ['steps', i, 'text'], 'Step text')),\n render: (s) => {\n const n = s.steps.length;\n // Node centres on a circle, as % of the square stage; first node at top.\n const pos = s.steps.map((_, i) => {\n const a = (i / n) * Math.PI * 2 - Math.PI / 2;\n return { x: 50 + 38 * Math.cos(a), y: 50 + 38 * Math.sin(a) };\n });\n const arcs = pos\n .map((_, i) => {\n const a0 = (i / n) * Math.PI * 2 - Math.PI / 2 + 0.34;\n const a1 = ((i + 1) / n) * Math.PI * 2 - Math.PI / 2 - 0.34;\n const p = (a: number) =>\n `${(50 + 38 * Math.cos(a)).toFixed(2)} ${(50 + 38 * Math.sin(a)).toFixed(2)}`;\n return `<path d=\"M ${p(a0)} A 38 38 0 0 1 ${p(a1)}\" marker-end=\"url(#cy-arrow)\"/>`;\n })\n .join('');\n return {\n html: `${eyebrow(s.eyebrow)}${heading(s.title)}${lead(s.lead)}<div class=\"cycle\"><svg class=\"cycle-ring\" viewBox=\"0 0 100 100\" aria-hidden=\"true\"><defs><marker id=\"cy-arrow\" viewBox=\"0 0 10 10\" refX=\"7\" refY=\"5\" markerWidth=\"4\" markerHeight=\"4\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\"/></marker></defs>${arcs}</svg>${\n s.center ? `<div class=\"cycle-center\">${inline(s.center)}</div>` : ''\n }${s.steps\n .map(\n (st, i) =>\n `<div class=\"cycle-node\" style=\"left:${pos[i].x.toFixed(2)}%;top:${pos[i].y.toFixed(2)}%\"><h3>${inline(st.title)}</h3>${\n st.text ? `<p>${inline(st.text)}</p>` : ''\n }</div>`\n )\n .join('')}</div>`,\n };\n },\n});\n\nexport const hierarchy = defineLayout({\n name: 'hierarchy',\n description: 'An org chart or tree, up to 3 levels, with optional photos.',\n whenToUse: 'Who reports to whom, how a team is organised, how a topic breaks down.',\n shape: {\n eyebrow: Text.optional(),\n title: Text,\n lead: Text.optional(),\n nodes: z\n .array(\n z.object({\n id: z\n .string()\n .regex(/^[a-z0-9-]+$/)\n .describe('Short slug, referenced by children.'),\n parent: z.string().optional().describe('id of the parent; omit for the top node.'),\n name: Text,\n role: Text.optional(),\n photo: Image.optional(),\n })\n )\n .min(1)\n .max(16),\n },\n example: {\n layout: 'hierarchy',\n eyebrow: 'Your team',\n title: 'Who builds your home',\n nodes: [\n { id: 'pm', name: 'Project Manager', role: 'Oversees your community' },\n { id: 'super', parent: 'pm', name: 'Superintendent', role: 'Runs your site day to day' },\n { id: 'cs', parent: 'pm', name: 'Customer Service', role: 'After you move in' },\n {\n id: 'trades',\n parent: 'super',\n name: 'Trade partners',\n role: 'Framing, plumbing, electrical…',\n },\n ],\n },\n lint: (s) => {\n const out: LayoutIssue[] = [\n ...missingAlt(\n s.nodes.flatMap((n) => (n.photo ? [n.photo] : [])),\n ['nodes']\n ),\n ];\n const ids = new Set(s.nodes.map((n) => n.id));\n const roots = s.nodes.filter((n) => !n.parent);\n if (roots.length !== 1)\n out.push({\n level: 'error',\n path: ['nodes'],\n message: `Needs exactly one top node (no parent); found ${roots.length}.`,\n });\n s.nodes.forEach((n, i) => {\n if (n.parent && !ids.has(n.parent))\n out.push({\n level: 'error',\n path: ['nodes', i, 'parent'],\n message: `No node with id \"${n.parent}\".`,\n });\n });\n const depth = (id: string, seen = new Set<string>()): number => {\n const node = s.nodes.find((n) => n.id === id);\n if (!node?.parent || seen.has(id)) return 1;\n seen.add(id);\n return 1 + depth(node.parent, seen);\n };\n if (s.nodes.some((n) => depth(n.id) > 3))\n out.push({ level: 'error', path: ['nodes'], message: 'Keep the tree to 3 levels.' });\n return out;\n },\n render: (s, ctx) => {\n const kids = (id?: string) => s.nodes.filter((n) => n.parent === id);\n const node = (n: (typeof s.nodes)[number]): string => {\n const children = kids(n.id);\n return `<li><div class=\"h-node\">${n.photo ? img(n.photo, ctx, 'avatar') : ''}<div><h3>${inline(n.name)}</h3>${\n n.role ? `<p>${inline(n.role)}</p>` : ''\n }</div></div>${children.length ? `<ul>${children.map(node).join('')}</ul>` : ''}</li>`;\n };\n const root = s.nodes.find((n) => !n.parent);\n return {\n html: `${eyebrow(s.eyebrow)}${heading(s.title)}${lead(s.lead)}<div class=\"hierarchy\"><ul>${root ? node(root) : ''}</ul></div>`,\n };\n },\n});\n\nexport const matrix = defineLayout({\n name: 'matrix',\n description: 'A 2×2 grid with labelled axes and a few items in each quadrant.',\n whenToUse:\n 'Sorting options by two factors: effort vs impact, cost vs value, who handles what when.',\n shape: {\n eyebrow: Text.optional(),\n title: Text,\n lead: Text.optional(),\n xAxis: z.object({ low: Text, high: Text, label: Text.optional() }),\n yAxis: z.object({ low: Text, high: Text, label: Text.optional() }),\n quadrants: z\n .array(z.object({ title: Text, items: z.array(Text).max(4).optional() }))\n .length(4)\n .describe('In reading order: top-left, top-right, bottom-left, bottom-right.'),\n highlight: z.number().int().min(1).max(4).optional().describe('Quadrant to emphasise (1–4).'),\n },\n example: {\n layout: 'matrix',\n title: 'Where to spend your upgrade budget',\n xAxis: { low: 'Easy to add later', high: 'Hard to add later', label: 'After move-in' },\n yAxis: { low: 'Nice to have', high: 'High value', label: 'Value' },\n quadrants: [\n { title: 'Add later', items: ['Paint colours', 'Light fixtures'] },\n { title: 'Choose now', items: ['Structural options', 'Electrical & low volt'] },\n { title: 'Skip', items: ['Trend finishes'] },\n { title: 'Consider', items: ['Flooring upgrades'] },\n ],\n highlight: 2,\n },\n render: (s) => ({\n html: `${eyebrow(s.eyebrow)}${heading(s.title)}${lead(s.lead)}<div class=\"matrix\"><div class=\"mx-y\"><span>${inline(s.yAxis.high)}</span>${\n s.yAxis.label ? `<b>${inline(s.yAxis.label)}</b>` : ''\n }<span>${inline(s.yAxis.low)}</span></div><div class=\"mx-grid\">${s.quadrants\n .map(\n (q, i) =>\n `<div class=\"mx-q${s.highlight === i + 1 ? ' mx-hl' : ''}\"><h3>${inline(q.title)}</h3>${\n q.items?.length\n ? `<ul>${q.items.map((t) => `<li>${inline(t)}</li>`).join('')}</ul>`\n : ''\n }</div>`\n )\n .join(\n ''\n )}</div><div class=\"mx-x\"><span>${inline(s.xAxis.low)}</span>${s.xAxis.label ? `<b>${inline(s.xAxis.label)}</b>` : ''}<span>${inline(\n s.xAxis.high\n )}</span></div></div>`,\n }),\n});\n\nexport const tiers = defineLayout({\n name: 'tiers',\n description:\n 'A funnel (wide to narrow) or pyramid (narrow to wide) of 3–6 labelled tiers with optional values.',\n whenToUse:\n 'Stages that narrow (leads → contracts → closings) or build on each other (foundation → finish).',\n shape: {\n eyebrow: Text.optional(),\n title: Text,\n lead: Text.optional(),\n style: z.enum(['funnel', 'pyramid']).default('funnel'),\n tiers: z\n .array(z.object({ label: Text, value: z.string().max(16).optional(), note: Text.optional() }))\n .min(3)\n .max(6),\n },\n example: {\n layout: 'tiers',\n eyebrow: 'Warranty',\n title: 'Coverage that lasts',\n style: 'pyramid',\n tiers: [\n { label: 'Structural', value: '10 yrs', note: 'Load-bearing elements' },\n { label: 'Systems', value: '2 yrs', note: 'Plumbing, electrical, HVAC' },\n { label: 'Workmanship', value: '1 yr', note: 'Fit and finish' },\n ],\n },\n lint: (s) => maxCount(s.tiers, 6, ['tiers'], 'tiers'),\n render: (s) => {\n const n = s.tiers.length;\n return {\n html: `${eyebrow(s.eyebrow)}${heading(s.title)}${lead(s.lead)}<ol class=\"tiers tiers--${s.style}\">${s.tiers\n .map((t, i) => {\n const rank = s.style === 'funnel' ? i : n - 1 - i;\n const width = 100 - (rank * 60) / Math.max(1, n - 1);\n return `<li style=\"--w:${width.toFixed(1)}%;--i:${i}\"><div class=\"tier-bar\"><span class=\"tier-label\">${inline(t.label)}</span>${\n t.value ? `<b>${escapeHtml(t.value)}</b>` : ''\n }</div>${t.note ? `<p class=\"tier-note\">${inline(t.note)}</p>` : ''}</li>`;\n })\n .join('')}</ol>`,\n };\n },\n});\n","/** Media-led layouts: split, photos, image, walkthrough, qr, contacts, journey. */\nimport { z } from 'zod';\nimport { escapeAttr, escapeHtml, isSafeLinkUrl, inline } from '../inline.js';\nimport { Image, Item, Marker, Text } from '../schema/common.js';\nimport { parseVideoUrl, videoEmbedUrl } from '../video.js';\nimport {\n eyebrow,\n footnote,\n heading,\n img,\n items,\n lead,\n maxCount,\n maxLen,\n missingAlt,\n} from './parts.js';\nimport { defineLayout, type RenderedSlide } from './types.js';\n\nconst Group = z.object({\n heading: Text.optional().describe('Small bold heading above this group.'),\n text: Text.optional(),\n items: z.array(Item).optional(),\n marker: Marker,\n});\n\nexport const split = defineLayout({\n name: 'split',\n description: 'Text on one side (title + groups of text/bullets), photos on the other.',\n whenToUse: 'Explaining something that has a picture: a place, a product, a meeting, a stage.',\n shape: {\n eyebrow: Text.optional(),\n eyebrowSub: Text.optional(),\n title: Text,\n lead: Text.optional(),\n groups: z\n .array(Group)\n .optional()\n .describe('Text blocks under the title, each with an optional heading.'),\n images: z\n .array(Image)\n .max(4)\n .default([])\n .describe('Photos. May be empty when a badge carries the media side.'),\n arrange: z\n .enum(['single', 'stack', 'grid', 'overlap'])\n .default('single')\n .describe('single: one photo · stack: vertical · grid: 2×2 · overlap: two photos layered.'),\n mediaSide: z.enum(['right', 'left']).default('right'),\n badge: z\n .object({ title: Text, text: Text.optional() })\n .optional()\n .describe(\n 'Red circle callout over the photos, e.g. \"Pre-drywall meeting / about 60 days in\".'\n ),\n footnote: Text.optional().describe('Closing line under the text column.'),\n },\n example: {\n layout: 'split',\n eyebrow: 'Step 2',\n title: 'Design Studio',\n groups: [\n { items: ['Open by appointment Monday–Friday', 'Evening appointments on Wednesdays'] },\n { heading: 'Location', items: ['2754 North Gate Blvd.'] },\n ],\n images: [\n {\n src: 'images/design-studio.jpg',\n alt: 'Design Studio showroom with cabinet and tile samples',\n },\n ],\n },\n lint: (s) => [\n ...maxLen(s.title, 70, ['title'], 'Title'),\n ...maxCount(\n (s.groups ?? []).flatMap((g) => g.items ?? []),\n 8,\n ['groups'],\n 'bullets across groups'\n ),\n ...missingAlt(s.images, ['images']),\n ...(s.images.length || s.badge\n ? []\n : [\n {\n level: 'error' as const,\n path: ['images'],\n message: 'Add at least one image or a badge.',\n },\n ]),\n ],\n render: (s, ctx) => {\n const text = `<div class=\"split-text\">${eyebrow(s.eyebrow, s.eyebrowSub)}${heading(s.title)}${lead(s.lead)}${(\n s.groups ?? []\n )\n .map(\n (g) =>\n `<div class=\"group\">${g.heading ? `<p class=\"group-h\">${inline(g.heading)}</p>` : ''}${\n g.text ? `<p>${inline(g.text)}</p>` : ''\n }${items(g.items, g.marker)}</div>`\n )\n .join('')}${footnote(s.footnote)}</div>`;\n const arrange = s.images.length === 0 ? 'badge' : s.images.length === 1 ? 'single' : s.arrange;\n const media = `<div class=\"media media--${arrange}\">${s.images\n .map((im, i) => img(im, ctx, arrange === 'overlap' ? (i === 0 ? 'ov-back' : 'ov-front') : ''))\n .join('')}${\n s.badge\n ? `<div class=\"callout-circle\"><b>${inline(s.badge.title)}</b>${s.badge.text ? `<span>${inline(s.badge.text)}</span>` : ''}</div>`\n : ''\n }</div>`;\n return {\n html: `<div class=\"split-photo${s.mediaSide === 'left' ? ' media-left' : ''}\">${\n s.mediaSide === 'left' ? media + text : text + media\n }</div>`,\n };\n },\n});\n\nexport const photos = defineLayout({\n name: 'photos',\n description: 'Optional headline over a grid of photos (people, products, finishes).',\n whenToUse: 'Showing a team, a set of products, or finished homes. Let the pictures talk.',\n shape: {\n eyebrow: Text.optional(),\n title: Text.optional(),\n lead: Text.optional(),\n images: z.array(Image).min(1).max(24),\n columns: z\n .number()\n .int()\n .min(1)\n .max(8)\n .optional()\n .describe('Defaults to a balanced count for the number of photos.'),\n aspect: z\n .enum(['portrait', 'landscape', 'square', 'native'])\n .default('landscape')\n .describe('portrait suits headshots; native keeps each photo uncropped.'),\n captions: z.boolean().default(false).describe('Show each image alt text as a caption.'),\n },\n example: {\n layout: 'photos',\n title: 'Personalizing your home',\n aspect: 'landscape',\n images: [\n { src: 'images/cabinets.jpg', alt: 'Kitchen cabinets in white oak' },\n { src: 'images/tile.jpg', alt: 'Bathroom tile options' },\n { src: 'images/lighting.jpg', alt: 'Pendant lighting' },\n ],\n },\n lint: (s) => [\n ...missingAlt(s.images, ['images']),\n ...maxCount(s.images, 18, ['images'], 'photos'),\n ],\n render: (s, ctx) => {\n const n = s.images.length;\n const cols = s.columns ?? (n <= 4 ? n : n <= 6 ? 3 : n <= 12 ? 4 : 6);\n return {\n html: `${eyebrow(s.eyebrow)}${s.title ? heading(s.title) : ''}${lead(s.lead)}<div class=\"photo-grid aspect-${\n s.aspect\n }\" style=\"--cols:${cols}\">${s.images\n .map((im) =>\n s.captions && im.alt\n ? `<figure>${img(im, ctx)}<figcaption>${escapeHtml(im.alt)}</figcaption></figure>`\n : img(im, ctx)\n )\n .join('')}</div>`,\n };\n },\n});\n\nexport const image = defineLayout({\n name: 'image',\n description: 'One large image or diagram, framed, with an optional caption.',\n whenToUse:\n 'A floor plan, a site map, a flowchart, a screenshot — anything that needs the whole slide.',\n shape: {\n eyebrow: Text.optional(),\n title: Text.optional(),\n image: Image,\n caption: Text.optional(),\n frame: z.boolean().default(true).describe('White card frame; turn off for full-bleed photos.'),\n hotspots: z\n .array(\n z.object({\n x: z.number().min(0).max(100).describe('Horizontal position, % from the left.'),\n y: z.number().min(0).max(100).describe('Vertical position, % from the top.'),\n label: Text,\n text: Text.optional(),\n })\n )\n .max(12)\n .optional()\n .describe('Numbered markers on the image with a legend, e.g. rooms on a floor plan.'),\n },\n example: {\n layout: 'image',\n title: 'Where to find your community',\n image: { src: 'images/site-map.png', alt: 'Community site map', fit: 'contain' },\n caption: 'Model homes are open daily 10–5.',\n },\n lint: (s) => missingAlt([s.image], ['image']).map((i) => ({ ...i, path: ['image', 'alt'] })),\n render: (s, ctx) => {\n if (s.hotspots?.length) {\n // Markers are placed in % of the image box, so the image is never cropped here.\n const marks = s.hotspots\n .map(\n (h, i) =>\n `<span class=\"hs-mark\" style=\"left:${h.x}%;top:${h.y}%\" aria-hidden=\"true\">${i + 1}</span>`\n )\n .join('');\n const legend = s.hotspots\n .map(\n (h) =>\n `<li><b>${inline(h.label)}</b>${h.text ? `<span>${inline(h.text)}</span>` : ''}</li>`\n )\n .join('');\n return {\n classes: ['has-hotspots'],\n html: `${eyebrow(s.eyebrow)}${s.title ? heading(s.title) : ''}<div class=\"hs-layout\"><figure class=\"diagram-shot\"><div class=\"hs-wrap\">${img(\n { ...s.image, fit: 'contain' },\n ctx\n )}${marks}</div>${s.caption ? `<figcaption class=\"shot-cap\">${inline(s.caption)}</figcaption>` : ''}</figure><ol class=\"hs-legend\">${legend}</ol></div>`,\n };\n }\n return {\n classes: s.frame ? [] : ['bleed'],\n html: `${eyebrow(s.eyebrow)}${s.title ? heading(s.title) : ''}<figure class=\"${s.frame ? 'diagram-shot' : 'bleed-img'}\">${img(\n { ...s.image, fit: s.frame ? 'contain' : s.image.fit },\n ctx\n )}${s.caption ? `<figcaption class=\"shot-cap\">${inline(s.caption)}</figcaption>` : ''}</figure>`,\n };\n },\n});\n\nexport const video = defineLayout({\n name: 'video',\n description:\n 'A YouTube or Vimeo video that loads when the slide is shown, with a poster + QR fallback offline and in print.',\n whenToUse:\n 'Walkthrough tours, testimonials, how-to clips. Keep them short; needs internet to play.',\n shape: {\n eyebrow: Text.optional(),\n title: Text.optional(),\n url: z\n .string()\n .url()\n .refine((u) => !!parseVideoUrl(u), 'Use a YouTube or Vimeo link.')\n .describe('YouTube or Vimeo link (watch, share or embed URL).'),\n poster: Image.optional().describe(\n 'Still shown before play and offline. YouTube posters are fetched automatically.'\n ),\n start: z.number().int().min(0).optional().describe('Start at this many seconds.'),\n end: z.number().int().min(1).optional().describe('Stop at this many seconds (YouTube).'),\n autoplay: z\n .boolean()\n .default(false)\n .describe('Start playing when the slide is shown (muted by browsers).'),\n muted: z.boolean().default(false),\n captions: z.boolean().default(true).describe('Show captions when the video has them.'),\n caption: Text.optional(),\n },\n example: {\n layout: 'video',\n eyebrow: 'Take the tour',\n title: 'Inside the Aspen floor plan',\n url: 'https://www.youtube.com/watch?v=aqz-KE-bpKQ',\n caption: 'Virtual tour · 2 min',\n },\n prepare: (s) => {\n const ref = parseVideoUrl(s.url)!;\n return { qr: [ref.watchUrl], images: !s.poster && ref.poster ? [ref.poster] : [] };\n },\n render: (s, ctx) => {\n const ref = parseVideoUrl(s.url)!;\n const src = videoEmbedUrl(ref, s);\n const posterSrc = s.poster?.src ?? ref.poster;\n const poster = posterSrc\n ? `<img class=\"media-poster\" src=\"${escapeAttr(ctx.image(posterSrc))}\" alt=\"${escapeAttr(\n s.poster?.alt || (s.title ? `Video: ${s.title}` : 'Video poster')\n )}\" decoding=\"async\">`\n : '';\n return {\n classes: ['has-media'],\n html: `${eyebrow(s.eyebrow)}${s.title ? heading(s.title) : ''}<figure class=\"media-frame\" data-media-src=\"${escapeAttr(\n src\n )}\" data-media-title=\"${escapeAttr(s.title ?? 'Video')}\" data-media-kind=\"video\">${poster}<div class=\"media-fallback\"><span class=\"play-badge\" aria-hidden=\"true\">▶</span><div class=\"media-qr\">${ctx.qr(\n ref.watchUrl\n )}<a href=\"${escapeAttr(ref.watchUrl)}\" target=\"_blank\" rel=\"noopener\">Watch on ${\n ref.provider === 'youtube' ? 'YouTube' : 'Vimeo'\n } ↗</a></div></div></figure>${s.caption ? `<p class=\"shot-cap\">${inline(s.caption)}</p>` : ''}`,\n };\n },\n});\n\nexport const embed = defineLayout({\n name: 'embed',\n description:\n 'A live web page (dashboard, map, form, 3D tour) in a sandboxed frame that loads when the slide is shown, with an open link and QR fallback.',\n whenToUse:\n 'Showing something interactive: a Matterport tour, a Google Map, a Looker dashboard, a sign-up form. Needs internet; some sites refuse to be framed.',\n shape: {\n eyebrow: Text.optional(),\n title: Text.optional(),\n url: z\n .string()\n .url()\n .refine((u) => u.startsWith('https://'), 'Embeds must use https.')\n .describe('https address of the page to show.'),\n aspect: z\n .enum(['16:9', '4:3', '1:1', 'tall'])\n .default('16:9')\n .describe('Frame shape; tall suits forms and phones.'),\n fallback: Image.optional().describe(\n 'Screenshot shown offline, in print, or if the site refuses framing.'\n ),\n caption: Text.optional(),\n },\n example: {\n layout: 'embed',\n eyebrow: 'Explore',\n title: 'Find your community',\n url: 'https://www.openstreetmap.org/export/embed.html?bbox=-104.95,38.78,-104.65,39.03&layer=mapnik',\n caption: 'Pan and zoom to see every Classic Homes community.',\n },\n prepare: (s) => ({ qr: [s.url] }),\n render: (s, ctx) => ({\n classes: ['has-media'],\n html: `${eyebrow(s.eyebrow)}${s.title ? heading(s.title) : ''}<figure class=\"media-frame aspect-${s.aspect.replace(\n ':',\n 'x'\n )}\" data-media-src=\"${escapeAttr(s.url)}\" data-media-title=\"${escapeAttr(s.title ?? 'Embedded page')}\" data-media-kind=\"embed\">${\n s.fallback ? img(s.fallback, ctx, 'media-poster') : ''\n }<div class=\"media-fallback\"><div class=\"media-qr\">${ctx.qr(s.url)}<a href=\"${escapeAttr(\n s.url\n )}\" target=\"_blank\" rel=\"noopener\">${escapeHtml(s.url.replace(/^https:\\/\\//, '').split('/')[0])} ↗</a></div></div><a class=\"media-open\" href=\"${escapeAttr(\n s.url\n )}\" target=\"_blank\" rel=\"noopener\">Open ↗</a></figure>${s.caption ? `<p class=\"shot-cap\">${inline(s.caption)}</p>` : ''}`,\n }),\n});\n\nexport const compare = defineLayout({\n name: 'compare',\n description:\n 'Before/after: two photos in one frame with a draggable divider (side by side in print).',\n whenToUse:\n 'Showing change: framing vs finished, model vs your home, standard vs upgraded finish.',\n shape: {\n eyebrow: Text.optional(),\n title: Text.optional(),\n before: Image,\n after: Image,\n beforeLabel: z.string().max(24).default('Before'),\n afterLabel: z.string().max(24).default('After'),\n caption: Text.optional(),\n },\n example: {\n layout: 'compare',\n title: 'Framing to finished',\n before: { src: 'images/framing.jpg', alt: 'Kitchen during framing' },\n after: { src: 'images/finished.jpg', alt: 'Finished kitchen' },\n beforeLabel: 'Week 6',\n afterLabel: 'Move-in',\n },\n lint: (s) => missingAlt([s.before, s.after], ['images']),\n render: (s, ctx) => ({\n html: `${eyebrow(s.eyebrow)}${s.title ? heading(s.title) : ''}<figure class=\"compare\" style=\"--pos:50%\">${img(\n s.after,\n ctx,\n 'cmp-after'\n )}<div class=\"cmp-before-clip\">${img(s.before, ctx, 'cmp-before')}</div><span class=\"cmp-label cmp-label--before\">${escapeHtml(\n s.beforeLabel\n )}</span><span class=\"cmp-label cmp-label--after\">${escapeHtml(\n s.afterLabel\n )}</span><input class=\"cmp-range\" type=\"range\" min=\"0\" max=\"100\" value=\"50\" aria-label=\"Reveal before or after\"><span class=\"cmp-handle\" aria-hidden=\"true\"></span></figure>${\n s.caption ? `<p class=\"shot-cap\">${inline(s.caption)}</p>` : ''\n }`,\n }),\n});\n\nexport const walkthrough = defineLayout({\n name: 'walkthrough',\n description:\n 'A numbered sequence: one slide per stage with a big photo, stage badge, text, and a progress rail. One entry expands into N slides.',\n whenToUse:\n 'Walking through ordered stages — construction phases, a closing-day timeline, a process.',\n shape: {\n eyebrow: Text.optional(),\n title: Text,\n label: z.string().default('STAGE').describe('Word on the badge, e.g. STAGE, PHASE, DAY.'),\n start: z\n .number()\n .int()\n .positive()\n .default(1)\n .describe(\n 'Position of the first stage in the whole sequence (1-based). Use to continue a sequence split by other slides.'\n ),\n numberFrom: z\n .number()\n .int()\n .default(1)\n .describe('Number shown on the badge of the first stage in the sequence, e.g. 0.'),\n total: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n 'Stages in the whole sequence when it spans several walkthroughs (for \"n of N\" and the rail).'\n ),\n stages: z\n .array(\n z.object({\n image: Image,\n badge: z\n .string()\n .max(10)\n .optional()\n .describe('Replaces the badge for this stage, e.g. \"PERMIT\" (label is hidden).'),\n number: z\n .union([z.string().max(4), z.number().int()])\n .optional()\n .describe('Number shown under the label for this stage; defaults to its position.'),\n eyebrow: Text.optional().describe('Overrides the walkthrough eyebrow for this stage.'),\n heading: Text.optional(),\n text: Text,\n notes: z\n .string()\n .optional()\n .describe('Speaker notes for this stage (falls back to the slide notes).'),\n })\n )\n .min(2)\n .max(20),\n },\n defaults: { track: 'value' },\n example: {\n layout: 'walkthrough',\n eyebrow: 'Step 3',\n title: 'Stages of construction',\n stages: [\n {\n image: { src: 'images/stage-01.jpg', alt: 'Excavated homesite' },\n text: 'Excavation and foundation forms.',\n },\n {\n image: { src: 'images/stage-02.jpg', alt: 'Poured foundation' },\n text: 'Foundation poured and inspected.',\n },\n ],\n },\n lint: (s) => [\n ...s.stages.flatMap((st, n) => [\n ...maxLen(st.text, 160, ['stages', n, 'text'], 'Stage text'),\n ...missingAlt([st.image], ['stages', n, 'image']).map((i) => ({\n ...i,\n path: ['stages', n, 'image', 'alt'],\n })),\n ]),\n ],\n render: (s, ctx): RenderedSlide[] => {\n // Position in the whole sequence (0-based), so a split sequence keeps one rail.\n const offset = s.start - 1;\n const total = Math.max(s.total ?? 0, offset + s.stages.length);\n return s.stages.map((st, i) => {\n const pos = offset + i;\n const num = st.number ?? s.numberFrom + pos;\n const badge = st.badge\n ? `<span class=\"stage-num\">${escapeHtml(st.badge)}</span>`\n : `<span class=\"stage-kicker\">${escapeHtml(s.label)}</span><span class=\"stage-num\">${escapeHtml(\n typeof num === 'number' ? String(num).padStart(2, '0') : num\n )}</span>`;\n return {\n classes: ['stage-slide'],\n notes: st.notes,\n html: `${eyebrow(st.eyebrow ?? s.eyebrow)}${heading(s.title)}<div class=\"stage-spot\"><div class=\"stage-figure\">${img(\n st.image,\n ctx,\n 'stage-img'\n )}<div class=\"stage-badge\">${badge}</div></div><div class=\"stage-copy\"><div class=\"stage-count\"><b>${\n pos + 1\n }</b> of ${total}</div>${st.heading ? `<h3>${inline(st.heading)}</h3>` : ''}<p class=\"stage-txt\">${inline(\n st.text\n )}</p></div></div><div class=\"stage-rail\" aria-hidden=\"true\">${Array.from(\n { length: total },\n (_, j) =>\n `<span class=\"snode${j < pos ? ' done' : j === pos ? ' active' : ''}\"><i class=\"sn-dot\"></i></span>`\n ).join('')}</div>`,\n };\n });\n },\n});\n\nexport const qr = defineLayout({\n name: 'qr',\n description: 'Headline and text beside a large scannable QR code with its URL.',\n whenToUse: 'Sending the audience somewhere: the homeowner guide, a form, a portal.',\n shape: {\n eyebrow: Text.optional(),\n eyebrowSub: Text.optional(),\n title: Text,\n lead: Text.optional(),\n items: z.array(Item).optional(),\n url: z\n .string()\n .url()\n .refine(isSafeLinkUrl, 'Use an http, https, mailto or tel URL.')\n .optional()\n .describe('Where the code points. Required unless image is set.'),\n image: Image.optional().describe('Use a pre-made QR/image instead of generating one from url.'),\n logo: z.boolean().default(false).describe('Show the Classic Homes logo under the text.'),\n label: z\n .string()\n .optional()\n .describe('URL text shown under the code; defaults to the URL without https://.'),\n },\n example: {\n layout: 'qr',\n eyebrow: 'Your guide',\n title: 'Everything in one place',\n lead: 'Scan to open the Homeowner Guide on your phone.',\n url: 'https://guide.classichomes.com',\n },\n prepare: (s) => ({ qr: !s.image && s.url ? [s.url] : [] }),\n lint: (s) => [\n ...maxLen(s.title, 70, ['title'], 'Title'),\n ...(s.url || s.image\n ? []\n : [\n {\n level: 'error' as const,\n path: ['url'],\n message: 'Set url, or image for a pre-made code.',\n },\n ]),\n ],\n render: (s, ctx) => {\n const code = s.image ? img(s.image, ctx, 'qr-img') : ctx.qr(s.url!);\n const label = s.label ?? s.url?.replace(/^https?:\\/\\//, '').replace(/\\/$/, '');\n const inner = `${code}${label ? `<div class=\"u\">${escapeHtml(label)}</div>` : ''}`;\n return {\n html: `<div class=\"cols\"><div>${eyebrow(s.eyebrow, s.eyebrowSub)}${heading(s.title)}${lead(s.lead)}${items(s.items)}${\n s.logo ? `<div class=\"brand-logo end\">${ctx.logo()}</div>` : ''\n }</div><div class=\"qr-wrap\">${\n s.url\n ? `<a class=\"qr-hero\" href=\"${escapeAttr(s.url)}\">${inner}</a>`\n : `<div class=\"qr-hero\">${inner}</div>`\n }</div></div>`,\n };\n },\n});\n\nexport const contacts = defineLayout({\n name: 'contacts',\n description: 'Grid of people or departments with role, phone and email, optional photo.',\n whenToUse: 'Who to call: the closing slide, a team intro with contact details.',\n shape: {\n eyebrow: Text.optional(),\n title: Text,\n lead: Text.optional(),\n contacts: z\n .array(\n z.object({\n name: Text,\n role: Text.optional(),\n phone: z.string().optional(),\n email: z.string().email().optional(),\n url: z\n .string()\n .url()\n .refine(isSafeLinkUrl, 'Use an http, https, mailto or tel URL.')\n .optional(),\n photo: Image.optional(),\n })\n )\n .min(1)\n .max(9),\n },\n example: {\n layout: 'contacts',\n eyebrow: 'Stay in touch',\n title: 'Who to call',\n contacts: [\n {\n name: 'Customer Service',\n role: 'Warranty requests',\n phone: '719.555.0100',\n email: 'service@classichomes.com',\n },\n { name: 'Design Studio', role: 'Selections', phone: '719.555.0101' },\n ],\n },\n lint: (s) =>\n s.contacts.flatMap((c, n) => missingAlt(c.photo ? [c.photo] : [], ['contacts', n, 'photo'])),\n render: (s, ctx) => ({\n html: `${eyebrow(s.eyebrow)}${heading(s.title)}${lead(s.lead)}<div class=\"contact-grid\" style=\"--cols:${Math.min(\n 3,\n s.contacts.length\n )}\">${s.contacts\n .map(\n (c) =>\n `<div class=\"contact\">${c.photo ? img(c.photo, ctx, 'avatar') : ''}<div><h3>${inline(c.name)}</h3>${\n c.role ? `<p class=\"role\">${inline(c.role)}</p>` : ''\n }${c.phone ? `<a href=\"tel:${escapeAttr(c.phone.replace(/[^\\d+]/g, ''))}\">${escapeHtml(c.phone)}</a>` : ''}${\n c.email ? `<a href=\"mailto:${escapeAttr(c.email)}\">${escapeHtml(c.email)}</a>` : ''\n }${c.url ? `<a href=\"${escapeAttr(c.url)}\">${escapeHtml(c.url.replace(/^https?:\\/\\//, ''))}</a>` : ''}</div></div>`\n )\n .join('')}</div>`,\n }),\n});\n\nexport const journey = defineLayout({\n name: 'journey',\n description:\n 'The full journey map (deck.journey steps as numbered nodes) with the current step highlighted.',\n whenToUse: 'Agenda / overview slide near the start, and optionally a recap at the end.',\n shape: {\n eyebrow: Text.optional(),\n eyebrowSub: Text.optional(),\n title: Text,\n lead: Text.optional(),\n active: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Step to highlight; defaults to the slide step.'),\n },\n example: {\n layout: 'journey',\n eyebrow: 'The journey',\n title: 'Eight steps from contract to keys — and beyond.',\n lead: 'You will see this map at the start of each step.',\n },\n render: (s, ctx) => {\n const steps = ctx.deck.journey?.steps ?? [];\n return {\n html: `${eyebrow(s.eyebrow, s.eyebrowSub)}${heading(s.title)}${lead(s.lead)}${roadmap(steps, s.active)}`,\n };\n },\n});\n\nexport function roadmap(steps: string[], active?: number, mini = false): string {\n if (!steps.length) return '';\n return `<div class=\"roadmap${mini ? ' mini' : ''}\"${mini ? ' aria-hidden=\"true\"' : ''}>${steps\n .map(\n (t, i) =>\n `<div class=\"rstep${active === i + 1 ? ' active' : ''}\"><div class=\"rn\">${i + 1}</div>${\n mini ? '' : `<div class=\"rt\">${inline(t)}</div>`\n }</div>`\n )\n .join('')}</div>`;\n}\n","import { bullets, cards, comparison, quote, section, stats, statement, title } from './text.js';\nimport { chart, table } from './data.js';\nimport { cycle, flow, hierarchy, matrix, tiers, timeline } from './diagrams.js';\nimport {\n compare,\n contacts,\n embed,\n image,\n journey,\n photos,\n qr,\n split,\n video,\n walkthrough,\n} from './media.js';\nimport type { LayoutDef } from './types.js';\n\n/** Every layout, in the order they are offered to authors. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const LAYOUTS: readonly LayoutDef<any>[] = [\n title,\n section,\n statement,\n bullets,\n split,\n cards,\n stats,\n comparison,\n journey,\n photos,\n image,\n walkthrough,\n quote,\n qr,\n contacts,\n chart,\n table,\n flow,\n timeline,\n cycle,\n hierarchy,\n matrix,\n tiers,\n video,\n embed,\n compare,\n];\n\nexport type LayoutName =\n | 'title'\n | 'section'\n | 'statement'\n | 'bullets'\n | 'split'\n | 'cards'\n | 'stats'\n | 'comparison'\n | 'journey'\n | 'photos'\n | 'image'\n | 'walkthrough'\n | 'quote'\n | 'qr'\n | 'contacts'\n | 'chart'\n | 'table'\n | 'flow'\n | 'timeline'\n | 'cycle'\n | 'hierarchy'\n | 'matrix'\n | 'tiers'\n | 'video'\n | 'embed'\n | 'compare';\n\nconst byName = new Map<string, LayoutDef>(LAYOUTS.map((l) => [l.name, l as LayoutDef]));\n\nexport function getLayout(name: string): LayoutDef | undefined {\n return byName.get(name);\n}\n\nexport type {\n ChartRequest,\n DeckContext,\n LayoutDef,\n LayoutIssue,\n Prepared,\n RenderContext,\n RenderedSlide,\n} from './types.js';\n\nexport type LayoutCategory =\n | 'Openers & dividers'\n | 'Text'\n | 'Data'\n | 'Diagrams'\n | 'Media'\n | 'People & places';\n\n/** Category display order for layout pickers. */\nexport const LAYOUT_CATEGORY_ORDER: LayoutCategory[] = [\n 'Openers & dividers',\n 'Text',\n 'Data',\n 'Diagrams',\n 'Media',\n 'People & places',\n];\n\n/** Category of each layout. */\nexport const LAYOUT_CATEGORIES: Record<LayoutName, LayoutCategory> = {\n title: 'Openers & dividers',\n section: 'Openers & dividers',\n statement: 'Openers & dividers',\n journey: 'Openers & dividers',\n bullets: 'Text',\n cards: 'Text',\n comparison: 'Text',\n quote: 'Text',\n stats: 'Data',\n chart: 'Data',\n table: 'Data',\n flow: 'Diagrams',\n timeline: 'Diagrams',\n cycle: 'Diagrams',\n hierarchy: 'Diagrams',\n matrix: 'Diagrams',\n tiers: 'Diagrams',\n split: 'Media',\n photos: 'Media',\n image: 'Media',\n compare: 'Media',\n walkthrough: 'Media',\n video: 'Media',\n embed: 'Media',\n qr: 'People & places',\n contacts: 'People & places',\n};\n","/**\n * Slide-level edits on a deck object. Pure functions shared by the MCP\n * server and (later) the hosted editor, so agents change one slide at a\n * time instead of rewriting whole files.\n */\nexport interface EditableDeck {\n slides: Record<string, unknown>[];\n [key: string]: unknown;\n}\n\n/** A slide reference: its `id`, or its 1-based position. */\nexport type SlideRef = string | number;\n\nexport function findSlide(deck: EditableDeck, ref: SlideRef): number {\n // A string is an id first, so all-digit ids (\"2024\") stay addressable; a number, or a\n // digit string no slide uses as its id, is a position. Fractions never name a slide.\n let index = typeof ref === 'string' ? deck.slides.findIndex((s) => s.id === ref) : -1;\n if (index < 0 && (typeof ref === 'number' ? Number.isInteger(ref) : /^\\d+$/.test(ref)))\n index = Number(ref) - 1;\n if (index < 0 || index >= deck.slides.length) {\n throw new Error(\n `No slide \"${ref}\". The deck has ${deck.slides.length} slides; use a 1-based number or a slide id.`\n );\n }\n return index;\n}\n\n/** A short random slide id such as \"s-k3f9x2\" (valid for the slide `id` field). */\nexport function newSlideId(taken: ReadonlySet<string> = new Set()): string {\n const alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789';\n for (;;) {\n const bytes = new Uint8Array(6);\n globalThis.crypto.getRandomValues(bytes);\n const id = `s-${Array.from(bytes, (b) => alphabet[b % alphabet.length]).join('')}`;\n if (!taken.has(id)) return id;\n }\n}\n\n/**\n * Gives every slide without an `id` a stable random one, so comments and\n * analytics can anchor to slides across edits and reorders. Idempotent;\n * returns how many ids were added.\n */\nexport function ensureSlideIds(deck: EditableDeck): number {\n const taken = new Set(\n deck.slides.map((s) => s.id).filter((id): id is string => typeof id === 'string')\n );\n let added = 0;\n for (const slide of deck.slides) {\n if (typeof slide.id === 'string' && slide.id) continue;\n slide.id = newSlideId(taken);\n taken.add(slide.id as string);\n added++;\n }\n return added;\n}\n\n/** Stable key for a slide: its id, or \"#<position>\" for decks saved before ids existed. */\nexport function slideKey(slide: { id?: unknown }, index: number): string {\n return typeof slide.id === 'string' && slide.id ? slide.id : `#${index + 1}`;\n}\n\n/** Inserts a slide. `position` is 1-based; omitted appends. Returns the new slide's position. */\nexport function addSlide(\n deck: EditableDeck,\n slide: Record<string, unknown>,\n position?: number\n): number {\n if (typeof slide.id !== 'string' || !slide.id) {\n slide = { ...slide, id: newSlideId(new Set(deck.slides.map((s) => s.id as string))) };\n }\n const at =\n position === undefined\n ? deck.slides.length\n : Math.max(0, Math.min(deck.slides.length, position - 1));\n deck.slides.splice(at, 0, slide);\n return at + 1;\n}\n\n/** Shallow-merges fields into a slide. A field set to null is removed. Changing `layout` replaces the slide. */\nexport function updateSlide(\n deck: EditableDeck,\n ref: SlideRef,\n patch: Record<string, unknown>\n): number {\n const i = findSlide(deck, ref);\n const next =\n patch.layout && patch.layout !== deck.slides[i].layout\n ? { id: deck.slides[i].id }\n : { ...deck.slides[i] };\n for (const [k, v] of Object.entries(patch)) {\n if (v === null) delete (next as Record<string, unknown>)[k];\n else (next as Record<string, unknown>)[k] = v;\n }\n deck.slides[i] = next;\n return i + 1;\n}\n\nexport function moveSlide(deck: EditableDeck, ref: SlideRef, to: number): number {\n const from = findSlide(deck, ref);\n const [slide] = deck.slides.splice(from, 1);\n const at = Math.max(0, Math.min(deck.slides.length, to - 1));\n deck.slides.splice(at, 0, slide);\n return at + 1;\n}\n\nexport function removeSlide(deck: EditableDeck, ref: SlideRef): Record<string, unknown> {\n const i = findSlide(deck, ref);\n return deck.slides.splice(i, 1)[0];\n}\n\n/** One-line outline of each slide, for agents and CLIs. */\nexport function outline(deck: EditableDeck): string[] {\n return deck.slides.map((s, i) => {\n const label = (s.title ?? s.quote ?? s.kicker ?? '') as string;\n return `${i + 1}. [${s.layout}]${s.id ? ` #${s.id}` : ''} ${label}`.trim();\n });\n}\n","import { z } from 'zod';\nimport { LAYOUTS, type LayoutName } from '../layouts/index.js';\nimport { DeckBrandSchema, type DeckBrand } from '../brand.js';\nimport { baseSlide, Text, type ImageValue } from './common.js';\n\ntype SlideOption = z.ZodDiscriminatedUnionOption<'layout'>;\n\nconst slideSchemas = LAYOUTS.map((layout) =>\n z\n .object({ layout: z.literal(layout.name), ...baseSlide, ...layout.shape })\n .strict()\n .describe(`${layout.description} Use for: ${layout.whenToUse}`)\n) as unknown as [SlideOption, ...SlideOption[]];\n\n/** Fields every slide has after parsing; layout-specific fields ride along. */\nexport interface SlideData {\n layout: LayoutName;\n id?: string;\n track?: 'value' | 'build' | 'neutral';\n background?: 'paper' | 'navy' | 'slate' | 'red' | 'teal' | 'plum' | 'grey' | 'stone';\n notes?: string;\n time?: string;\n step?: number;\n stepDone?: boolean;\n showJourney?: boolean;\n hidden?: boolean;\n backgroundImage?: ImageValue;\n overlay?: 'dark' | 'light' | 'brand';\n [field: string]: unknown;\n}\n\nexport interface Deck {\n title: string;\n description?: string;\n author?: string;\n date?: string;\n lang: string;\n journey?: { steps: string[]; label: string };\n brand?: DeckBrand;\n settings: DeckSettings;\n slides: SlideData[];\n}\n\nexport interface DeckSettings {\n slideNumbers: boolean;\n logo: 'title' | 'all' | 'none';\n confidential?: string;\n autoAdvance?: number;\n loop: boolean;\n}\n\n/** A deck as authored (before defaults are applied). */\nexport type DeckInput = Omit<Partial<Deck>, 'slides' | 'journey' | 'settings'> & {\n settings?: Partial<DeckSettings>;\n title: string;\n journey?: { steps: string[]; label?: string };\n slides: ({ layout: LayoutName } & Record<string, unknown>)[];\n};\nexport type SlideInput = DeckInput['slides'][number];\n\nexport const SlideSchema = z.discriminatedUnion('layout', slideSchemas) as unknown as z.ZodType<\n SlideData,\n z.ZodTypeDef,\n unknown\n>;\n\nexport const DeckSettingsSchema = z\n .object({\n slideNumbers: z.boolean().default(false).describe('Show the slide number in the footer.'),\n logo: z\n .enum(['title', 'all', 'none'])\n .default('title')\n .describe(\n 'Where the logo appears: title/closing slides only, a corner mark on every slide, or nowhere.'\n ),\n confidential: z\n .string()\n .max(40)\n .optional()\n .describe('Footer label such as \"Internal — do not distribute\".'),\n autoAdvance: z\n .number()\n .int()\n .min(3)\n .max(600)\n .optional()\n .describe(\n 'Kiosk mode: seconds per slide (loops unattended). For a file or hosted URL, ?kiosk=15 also works.'\n ),\n loop: z.boolean().default(false).describe('Return to the first slide after the last (kiosk).'),\n })\n .strict();\n\nexport const DeckSchema = z\n .object({\n title: z.string().min(1).describe('Deck title (browser tab, file name, gallery).'),\n description: z\n .string()\n .optional()\n .describe('One sentence: who the deck is for and what it covers.'),\n author: z.string().optional(),\n date: z.string().optional(),\n lang: z.string().default('en'),\n journey: z\n .object({\n steps: z.array(Text).min(2).max(10).describe('Short names of each step, in order.'),\n label: z.string().default('STEP').describe('Word on the vertical step rail.'),\n })\n .optional()\n .describe(\n 'Optional numbered journey (agenda). Enables the journey layout, step rails and \"you are here\" strips.'\n ),\n brand: DeckBrandSchema.optional().describe(\n 'Which brand the deck speaks for (profile key) plus optional name/logo/favicon/footer overrides.'\n ),\n settings: DeckSettingsSchema.default({}),\n slides: z.array(SlideSchema).min(1),\n })\n .strict() as unknown as z.ZodType<Deck, z.ZodTypeDef, unknown>;\n","/**\n * Form metadata for editors. Walks each layout's zod shape and describes its\n * fields as simple widget descriptors, so a UI can build a form for any\n * layout without understanding zod or JSON Schema.\n */\nimport { z } from 'zod';\nimport {\n getLayout,\n LAYOUT_CATEGORIES,\n LAYOUTS,\n type LayoutCategory,\n type LayoutName,\n} from './layouts/index.js';\nimport { DeckBrandSchema } from './brand.js';\nimport { newSlideId } from './edit.js';\nimport { ChartSpec } from './charts.js';\nimport { baseSlide, Image, Item, Text } from './schema/common.js';\nimport { DeckSettingsSchema } from './schema/deck.js';\n\nexport type EditorField =\n | FieldBase<'inline'> // formatted text (**bold**, *highlight*, links)\n | FieldBase<'string'>\n | (FieldBase<'enum'> & { options: (string | number)[] })\n | FieldBase<'boolean'>\n | (FieldBase<'number'> & { min?: number; max?: number; integer: boolean })\n | FieldBase<'image'>\n | FieldBase<'item'> // { text, sub? } bullet\n | (FieldBase<'list'> & { of: EditorField; min?: number; max?: number })\n | (FieldBase<'group'> & { fields: EditorField[] });\n\ninterface FieldBase<K extends string> {\n kind: K;\n /** Property name ('' for list elements). */\n key: string;\n label: string;\n description?: string;\n required: boolean;\n default?: unknown;\n /** Suggest a textarea rather than a one-line input. */\n multiline?: boolean;\n /**\n * Suggests a richer widget; editors that don't know a hint can fall back to `kind`.\n * - url: https link · video-url: YouTube/Vimeo link\n * - chart: ChartSpec group (edit labels × series as a grid)\n * - grid: list of rows of cells (table layout)\n * - point: {x, y} in % of an image (hotspot picker)\n */\n hint?: 'url' | 'video-url' | 'chart' | 'grid' | 'point';\n /** Rarely changed; editors should tuck it behind an \"Advanced\" section. */\n advanced?: boolean;\n}\n\nconst MULTILINE = new Set(['lead', 'body', 'text', 'quote', 'footnote', 'sub', 'notes', 'caption']);\nconst LABELS: Record<string, string> = {\n eyebrowSub: 'Eyebrow subtitle',\n showJourney: 'Show journey strip',\n stepDone: 'Step completed',\n mediaSide: 'Photo side',\n imageAspect: 'Photo shape',\n numberFrom: 'First badge number',\n url: 'URL',\n id: 'Slide id',\n time: 'Speaking time',\n track: 'Accent colour',\n};\n\n// Plumbing and presenter details most authors never touch\nconst ADVANCED = new Set(['id', 'time', 'track']);\n\nfunction labelFor(key: string): string {\n if (LABELS[key]) return LABELS[key];\n const words = key.replace(/([A-Z])/g, ' $1').toLowerCase();\n return words.charAt(0).toUpperCase() + words.slice(1);\n}\n\ntype AnyZod = z.ZodTypeAny;\n\nfunction unwrap(schema: AnyZod): {\n inner: AnyZod;\n required: boolean;\n default?: unknown;\n description?: string;\n} {\n let s = schema;\n let required = true;\n let dflt: unknown;\n let description = schema.description;\n for (;;) {\n description ??= s.description;\n if (s instanceof z.ZodOptional || s instanceof z.ZodNullable) {\n required = false;\n s = s.unwrap();\n } else if (s instanceof z.ZodDefault) {\n required = false;\n dflt = s._def.defaultValue();\n s = s._def.innerType;\n } else if (s instanceof z.ZodEffects && s !== Image && s !== Item) {\n // refinements (e.g. video URL checks) describe the same underlying type\n s = s.innerType();\n } else break;\n }\n return { inner: s, required, default: dflt, description };\n}\n\nfunction isText(s: AnyZod): boolean {\n // Text may have been re-described (.describe clones), so compare by checks too.\n return s === Text || (s instanceof z.ZodString && s.description === Text.description);\n}\n\nfunction describeField(key: string, schema: AnyZod): EditorField {\n const { inner, required, default: dflt, description } = unwrap(schema);\n const base = {\n key,\n label: labelFor(key),\n required,\n ...(description ? { description } : {}),\n ...(dflt !== undefined ? { default: dflt } : {}),\n ...(MULTILINE.has(key) ? { multiline: true } : {}),\n ...(ADVANCED.has(key) ? { advanced: true } : {}),\n };\n\n if (inner === Image) return { ...base, kind: 'image' };\n if (inner === ChartSpec) {\n return {\n ...base,\n kind: 'group',\n hint: 'chart',\n fields: Object.entries(ChartSpec.shape as Record<string, AnyZod>).map(([k, v]) =>\n describeField(k, v)\n ),\n };\n }\n if (inner === Item) return { ...base, kind: 'item' };\n if (isText(inner)) return { ...base, kind: 'inline' };\n if (inner instanceof z.ZodString) {\n if (key === 'url' || inner.isURL) {\n return {\n ...base,\n kind: 'string',\n hint: /YouTube|Vimeo/.test(description ?? '') ? 'video-url' : 'url',\n };\n }\n return { ...base, kind: 'string' };\n }\n if (inner instanceof z.ZodBoolean) return { ...base, kind: 'boolean' };\n if (inner instanceof z.ZodEnum) return { ...base, kind: 'enum', options: [...inner.options] };\n if (inner instanceof z.ZodLiteral) return { ...base, kind: 'enum', options: [inner.value] };\n if (inner instanceof z.ZodNumber) {\n return {\n ...base,\n kind: 'number',\n integer: inner.isInt,\n ...(inner.minValue !== null ? { min: inner.minValue } : {}),\n ...(inner.maxValue !== null ? { max: inner.maxValue } : {}),\n };\n }\n if (inner instanceof z.ZodUnion) {\n const opts = inner.options as AnyZod[];\n if (opts.every((o) => o instanceof z.ZodLiteral)) {\n return {\n ...base,\n kind: 'enum',\n options: opts.map((o) => (o as z.ZodLiteral<string | number>).value),\n };\n }\n return { ...base, kind: 'string' };\n }\n if (inner instanceof z.ZodArray) {\n const el = inner.element as AnyZod;\n return {\n ...base,\n kind: 'list',\n ...(el instanceof z.ZodArray ? { hint: 'grid' as const } : {}),\n of: { ...describeField('', el), label: labelFor(key.replace(/s$/, '')) },\n ...(inner._def.minLength ? { min: inner._def.minLength.value } : {}),\n ...(inner._def.maxLength ? { max: inner._def.maxLength.value } : {}),\n };\n }\n if (inner instanceof z.ZodObject) {\n const shape = inner.shape as Record<string, AnyZod>;\n const isPoint = shape.x instanceof z.ZodNumber && shape.y instanceof z.ZodNumber;\n return {\n ...base,\n kind: 'group',\n ...(isPoint ? { hint: 'point' as const } : {}),\n fields: Object.entries(inner.shape as Record<string, AnyZod>).map(([k, v]) =>\n describeField(k, v)\n ),\n };\n }\n return { ...base, kind: 'string' };\n}\n\n/** Deck-level fields for a settings panel: brand overrides and presentation settings. */\nexport function deckEditorFields(): { brand: EditorField[]; settings: EditorField[] } {\n return {\n brand: Object.entries(DeckBrandSchema.shape as Record<string, AnyZod>).map(([k, v]) =>\n describeField(k, v)\n ),\n settings: Object.entries(DeckSettingsSchema.shape as Record<string, AnyZod>).map(([k, v]) =>\n describeField(k, v)\n ),\n };\n}\n\nexport interface LayoutEditorInfo {\n name: string;\n category: LayoutCategory;\n description: string;\n whenToUse: string;\n defaults: { background?: string; track?: string };\n /** Layout-specific fields, in declaration order. */\n fields: EditorField[];\n /** A valid starting slide for this layout. */\n example: Record<string, unknown>;\n}\n\n/** Fields shared by every slide (track, background, notes, step…). */\nexport function commonSlideFields(): EditorField[] {\n return Object.entries(baseSlide).map(([k, v]) => describeField(k, v));\n}\n\nexport function layoutEditorInfo(name: string): LayoutEditorInfo | undefined {\n const layout = getLayout(name);\n if (!layout) return undefined;\n return {\n name: layout.name,\n category: LAYOUT_CATEGORIES[layout.name as LayoutName],\n description: layout.description,\n whenToUse: layout.whenToUse,\n defaults: layout.defaults ?? {},\n fields: Object.entries(layout.shape as Record<string, AnyZod>).map(([k, v]) =>\n describeField(k, v)\n ),\n example: layout.example,\n };\n}\n\nexport function allLayoutEditorInfo(): LayoutEditorInfo[] {\n return LAYOUTS.map((l) => layoutEditorInfo(l.name)!);\n}\n\n/**\n * One deck holding every layout's starting slide, in palette order, for\n * rendering layout thumbnails once (render it, then show slide N of the\n * result per layout). `slideFor[layout]` is that layout's slide index.\n */\nexport function layoutGalleryDeck(): {\n deck: {\n title: string;\n journey: { steps: string[] };\n slides: Record<string, unknown>[];\n };\n slideFor: Record<string, number>;\n} {\n const slides: Record<string, unknown>[] = [];\n const slideFor: Record<string, number> = {};\n for (const layout of LAYOUTS) {\n slideFor[layout.name] = slides.length;\n slides.push(blankSlide(layout.name)!);\n }\n // Journey layouts need deck steps to render\n const journey = { steps: ['Contract', 'Design', 'Build', 'Close', 'Move in', 'Warranty'] };\n return { deck: { title: 'Layouts', journey, slides }, slideFor };\n}\n\n/**\n * Stand-in image for new slides: a neutral frame reading \"Add a photo\".\n * It validates (so a fresh slide previews immediately) but lint warns until\n * it is replaced.\n */\nexport const PLACEHOLDER_IMAGE =\n 'data:image/svg+xml;base64,' +\n btoa(\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1600\" height=\"1000\" viewBox=\"0 0 1600 1000\"><rect width=\"1600\" height=\"1000\" fill=\"#ecebe6\"/><rect x=\"24\" y=\"24\" width=\"1552\" height=\"952\" fill=\"none\" stroke=\"#b9bcb4\" stroke-width=\"6\" stroke-dasharray=\"28 20\"/><text x=\"800\" y=\"520\" text-anchor=\"middle\" font-family=\"Figtree,Arial,sans-serif\" font-size=\"64\" fill=\"#7a7a7a\">Add a photo</text></svg>'\n );\n\nexport function isPlaceholderImage(src: string | undefined): boolean {\n return src === PLACEHOLDER_IMAGE;\n}\n\n/**\n * A new slide for a layout, ready to edit: the layout's example with sample\n * image paths swapped for {@link PLACEHOLDER_IMAGE}. Always passes validation.\n */\nexport function blankSlide(name: string): Record<string, unknown> | undefined {\n const layout = getLayout(name);\n if (!layout) return undefined;\n const slide = JSON.parse(JSON.stringify(layout.example), (key, value) =>\n key === 'src' && typeof value === 'string' && !/^(https?:|data:)/.test(value)\n ? PLACEHOLDER_IMAGE\n : value\n ) as Record<string, unknown>;\n return { ...slide, id: newSlideId() };\n}\n","import QRCode from 'qrcode';\nimport type { ZodIssue } from 'zod';\nimport { getLayout, type LayoutIssue } from './layouts/index.js';\nimport { CLASSIC_HOMES_BRAND, type BrandProfile } from './brand.js';\nimport { PLACEHOLDER_IMAGE } from './editor.js';\nimport { collectImageSources } from './render.js';\nimport { DeckSchema, SlideSchema, type Deck, type SlideData } from './schema/deck.js';\n\nexport interface ValidationResult {\n ok: boolean;\n deck?: Deck;\n /** Errors block rendering; warnings are advice that keeps slides clean. */\n issues: LayoutIssue[];\n}\n\nfunction fromZod(issue: ZodIssue): LayoutIssue {\n let message = issue.message;\n if (issue.code === 'invalid_union_discriminator') {\n message = `Unknown layout. Use one of: ${issue.options.join(', ')}.`;\n } else if (issue.code === 'unrecognized_keys') {\n // Only a slide object's fields depend on its layout; the deck and nested objects don't.\n const onSlide =\n issue.path.length === 2 && issue.path[0] === 'slides' && typeof issue.path[1] === 'number';\n message = `Unknown field(s) ${issue.keys.map((k) => `\"${k}\"`).join(', ')}${onSlide ? ' for this layout' : ''}.`;\n }\n return { level: 'error', path: issue.path, message };\n}\n\nexport interface ValidateOptions {\n /** Brand profiles `deck.brand.profile` may reference (classic-homes is built in). */\n brands?: BrandProfile[];\n}\n\n/** Checks that need only the slide itself (no deck context). */\nfunction slideIssues(slide: SlideData, i: number): LayoutIssue[] {\n const issues: LayoutIssue[] = [];\n const layout = getLayout(slide.layout)!;\n for (const url of layout.prepare?.(slide as never)?.qr ?? []) {\n try {\n // Cap pathological input before the QR encoder allocates its matrix.\n if (url.length > 10000) throw new Error('URL too long');\n QRCode.create(url, { errorCorrectionLevel: 'M' });\n } catch {\n issues.push({\n level: 'error',\n path: ['slides', i, 'url'],\n message: 'This URL is too long for a QR code. Use a shorter URL.',\n });\n }\n }\n for (const issue of layout.lint?.(slide as never) ?? []) {\n issues.push({ ...issue, path: ['slides', i, ...issue.path] });\n }\n if (collectImageSources(slide).has(PLACEHOLDER_IMAGE)) {\n issues.push({\n level: 'warning',\n path: ['slides', i],\n message: 'Replace the placeholder photo before presenting.',\n });\n }\n return issues;\n}\n\nexport function validateDeck(input: unknown, options: ValidateOptions = {}): ValidationResult {\n const parsed = DeckSchema.safeParse(input);\n if (!parsed.success) {\n // Schema errors stop the deck, but slides that parse on their own still get their\n // layout checks (chart shape, QR length, ...) so one round trip reports every problem.\n const issues = parsed.error.issues.map(fromZod);\n const raw = (input as { slides?: unknown } | null)?.slides;\n if (Array.isArray(raw)) {\n raw.forEach((candidate, i) => {\n const slide = SlideSchema.safeParse(candidate);\n if (slide.success) issues.push(...slideIssues(slide.data, i));\n });\n }\n return { ok: false, issues: byPath(issues) };\n }\n const deck = parsed.data;\n const issues: LayoutIssue[] = [];\n const steps = deck.journey?.steps.length ?? 0;\n const seen = new Set<string>();\n\n deck.slides.forEach((slide, i) => {\n issues.push(...slideIssues(slide, i));\n if (slide.id) {\n if (seen.has(slide.id))\n issues.push({\n level: 'error',\n path: ['slides', i, 'id'],\n message: `Duplicate slide id \"${slide.id}\".`,\n });\n seen.add(slide.id);\n }\n if ((slide.step || slide.showJourney || slide.layout === 'journey') && !steps) {\n issues.push({\n level: 'error',\n path: ['slides', i, slide.step ? 'step' : 'layout'],\n message: 'This slide uses the journey, but the deck has no journey.steps defined.',\n });\n }\n if (slide.step && steps && slide.step > steps) {\n issues.push({\n level: 'error',\n path: ['slides', i, 'step'],\n message: `Step ${slide.step} is past the last journey step (${steps}).`,\n });\n }\n });\n\n const profile = deck.brand?.profile;\n if (profile && ![CLASSIC_HOMES_BRAND, ...(options.brands ?? [])].some((b) => b.key === profile)) {\n const known = [CLASSIC_HOMES_BRAND, ...(options.brands ?? [])].map((b) => b.key).join(', ');\n issues.push({\n level: 'error',\n path: ['brand', 'profile'],\n message: `Unknown brand profile \"${profile}\". Available: ${known}.`,\n });\n }\n if (deck.slides.every((sl) => sl.hidden)) {\n issues.push({\n level: 'error',\n path: ['slides'],\n message: 'Every slide is hidden; unhide at least one.',\n });\n }\n if (deck.slides[0]?.layout !== 'title') {\n issues.push({\n level: 'warning',\n path: ['slides', 0, 'layout'],\n message: 'Decks usually open with a \"title\" slide.',\n });\n }\n\n return { ok: !issues.some((i) => i.level === 'error'), deck, issues: byPath(issues) };\n}\n\n/** Slide index an issue belongs to; deck-level issues sort before every slide. */\nfunction slideOf(path: (string | number)[]): number {\n return path[0] === 'slides' && typeof path[1] === 'number' ? path[1] : -1;\n}\n\n/**\n * Deck order: deck-level first, then slide by slide (2 before 10). The sort is stable, so\n * each slide keeps its issues in the order found: schema fields as declared, then layout checks.\n */\nfunction byPath(issues: LayoutIssue[]): LayoutIssue[] {\n return [...issues].sort((a, b) => slideOf(a.path) - slideOf(b.path));\n}\n\n/** Human path: slides.3.items.0 → \"slide 4 › items › 1\" (positions are 1-based, like the outline). */\nexport function formatPath(path: (string | number)[]): string {\n if (!path.length) return 'deck';\n // The deck's own \"slides\" field (missing, empty) has no slide number to show in its place.\n if (path.length === 1 && path[0] === 'slides') return 'slides';\n return path\n .map((p, i) =>\n typeof p === 'number' ? (path[i - 1] === 'slides' ? `slide ${p + 1}` : String(p + 1)) : p\n )\n .filter((p) => p !== 'slides')\n .join(' › ');\n}\n\nexport function formatIssues(issues: LayoutIssue[]): string {\n return issues\n .map((i) => `${i.level === 'error' ? '✖' : '⚠'} ${formatPath(i.path)}: ${i.message}`)\n .join('\\n');\n}\n\nexport class DeckError extends Error {\n constructor(public issues: LayoutIssue[]) {\n super(`Deck is not valid:\\n${formatIssues(issues.filter((i) => i.level === 'error'))}`);\n this.name = 'DeckError';\n }\n}\n","import QRCode from 'qrcode';\nimport { resolveBrand, type BrandProfile, type ResolvedBrand } from './brand.js';\nimport { renderChartSvg, type ChartSpecValue } from './charts.js';\nimport { escapeAttr, escapeCssString, escapeHtml, plain, prose } from './inline.js';\nimport {\n getLayout,\n type ChartRequest,\n type RenderContext,\n type RenderedSlide,\n} from './layouts/index.js';\nimport { roadmap } from './layouts/media.js';\nimport { RUNTIME_JS } from './runtime.js';\nimport type { Deck } from './schema/deck.js';\nimport { DECK_CSS, DECK_CSS_EXTRA } from './styles.js';\nimport { fontsCss, LOGO_MARK_SVG, LOGO_SVG, logoLockup, tokensCss } from './theme.js';\nimport { DeckError, validateDeck } from './validate.js';\n\n/**\n * Size to lay a preview out at before scaling it down. Slides are responsive\n * and switch to a stacked layout below ~840px wide, so small previews should\n * render at this size and use a CSS transform.\n */\nexport const PREVIEW_SIZE = { width: 1280, height: 720 } as const;\n\nexport type ImageResolver = (src: string) => Promise<string> | string;\n\nexport interface RenderOptions {\n /**\n * Turns an image `src` from the deck into something the browser can load,\n * normally a data: URI so the file stays self-contained. The default passes\n * data: and https: URLs through and rejects everything else.\n */\n resolveImage?: ImageResolver;\n /**\n * Maximum escaped UTF-8 bytes of data-URI images emitted into HTML, counting\n * every occurrence (including repeated logos, backgrounds and favicon).\n * Over-budget resolved images retain their original https URL. Authored\n * data URIs/local images with no safe remote fallback raise DeckError.\n * Fixed embedded fonts are excluded. Omit for unrestricted local exports.\n */\n maxInlineImageBytes?: number;\n /** Embed the deck source (JSON, without image data) so the HTML can be re-opened for editing. Default true. */\n embedSource?: boolean;\n /** 0-based rendered slide to open on (ignored when the URL has #slide-N). Handy for editor previews. */\n initialSlide?: number;\n /** Brand profiles available to `deck.brand.profile` (the built-in classic-homes profile is always present). */\n brands?: BrandProfile[];\n /** Render slides marked `hidden` too (dimmed, badged). For editor previews. */\n includeHidden?: boolean;\n /** Include speaker notes, the notes panel and the presenter window. Default true; turn off for shared links. */\n speakerNotes?: boolean;\n /** Permit kiosk auto-advance in an isolated presentation host (editor previews stay paused). */\n allowEmbeddedKiosk?: boolean;\n /**\n * Click-to-edit for editor previews. Embeds each slide's text and image\n * fields so that, inside an iframe, clicking a title, bullet or picture\n * posts `{ type: 'classic-slides:select', index, path }` to the parent\n * (`index` is the deck slide, `path` the field, or null for the slide\n * itself), and the parent can outline a field with\n * `{ type: 'classic-slides:highlight', index, path }`. Links inside slides\n * stop navigating. Off by default; never use it for shared or exported decks.\n */\n editorMarkers?: boolean;\n}\n\n/** A field the editor runtime can match a clicked element to. */\nexport interface FieldMarker {\n /** Path inside the slide, e.g. [\"title\"] or [\"items\", 2, \"text\"] */\n path: (string | number)[];\n /** Visible text of a text field, whitespace collapsed */\n text?: string;\n /** Resolved src of an image field */\n img?: string;\n}\n\n// Slide fields that never show up as visible text or images on the slide\nconst NON_VISUAL_KEYS = new Set([\n 'layout',\n 'id',\n 'notes',\n 'time',\n 'hidden',\n 'background',\n 'backgroundImage',\n 'overlay',\n 'track',\n 'step',\n 'stepDone',\n 'showJourney',\n 'href',\n 'url',\n 'fit',\n 'focus',\n 'size',\n 'alt',\n]);\n\n/**\n * The text and image fields of one slide, for click-to-edit matching.\n * `resolveImage` maps an authored src to the src rendered in the page.\n */\nexport function fieldMarkers(\n slide: Record<string, unknown>,\n resolveImage: (src: string) => string = (src) => src\n): FieldMarker[] {\n const out: FieldMarker[] = [];\n const walk = (value: unknown, path: (string | number)[]) => {\n if (typeof value === 'string') {\n const text = plain(value).replace(/\\s+/g, ' ').trim();\n if (text) out.push({ path, text });\n } else if (Array.isArray(value)) {\n value.forEach((v, i) => walk(v, [...path, i]));\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n if (typeof obj.src === 'string') {\n out.push({ path, img: resolveImage(obj.src) });\n return;\n }\n for (const [key, v] of Object.entries(obj)) {\n if (!NON_VISUAL_KEYS.has(key)) walk(v, [...path, key]);\n }\n }\n };\n walk(slide, []);\n return out;\n}\n\nexport interface RenderResult {\n html: string;\n deck: Deck;\n slideCount: number;\n /** For each deck slide, the 0-based indices of the rendered slides it produced (a walkthrough yields several). */\n slideMap: number[][];\n warnings: ReturnType<typeof validateDeck>['issues'];\n brand: ResolvedBrand;\n}\n\nconst passThrough: ImageResolver = (src) => {\n if (/^(data:|https?:)/.test(src)) return src;\n throw new Error(\n `Cannot load image \"${src}\": no image resolver for local files. Use the node renderer or an https URL.`\n );\n};\n\n/** Collects every image src in the deck (any object with a string `src`). */\nexport function collectImageSources(value: unknown, out = new Set<string>()): Set<string> {\n if (Array.isArray(value)) value.forEach((v) => collectImageSources(v, out));\n else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n if (typeof obj.src === 'string') out.add(obj.src);\n Object.values(obj).forEach((v) => collectImageSources(v, out));\n }\n return out;\n}\n\nconst CHECK_SVG =\n '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5 L10 17.5 L19 7\"/></svg>';\n\nexport async function renderDeck(\n input: unknown,\n options: RenderOptions = {}\n): Promise<RenderResult> {\n const result = validateDeck(input, { brands: options.brands });\n if (!result.ok || !result.deck) throw new DeckError(result.issues);\n const deck = result.deck;\n const brand = resolveBrand(deck.brand, options.brands);\n const visible = deck.slides.filter((sl) => options.includeHidden || !sl.hidden);\n\n // Gather async work declared by layouts (QR codes, charts, extra images).\n const qrUrls = new Set<string>();\n const chartReqs = new Map<string, ChartRequest>();\n const extraImages = new Set<string>();\n for (const slide of visible) {\n const prep = getLayout(slide.layout)!.prepare?.(slide as never);\n prep?.qr?.forEach((u) => qrUrls.add(u));\n prep?.charts?.forEach((c) => chartReqs.set(c.key, c));\n prep?.images?.forEach((u) => extraImages.add(u));\n }\n\n const resolve = options.resolveImage ?? passThrough;\n const images = new Map<string, string>();\n const brandImages = [brand.logo, brand.logoOnDark, brand.favicon].flatMap((i) =>\n i ? [i.src] : []\n );\n const requiredImages = new Set([...collectImageSources(visible), ...brandImages]);\n const pendingImages = [...new Set([...requiredImages, ...extraImages])];\n // Limit transient resolver buffers as well as the final export size. A worker\n // takes its next image only after the preceding resolver has released it.\n let nextImage = 0;\n let imageError: unknown;\n let imageFailed = false;\n await Promise.all(\n Array.from({ length: Math.min(4, pendingImages.length) }, async () => {\n while (!imageFailed && nextImage < pendingImages.length) {\n const src = pendingImages[nextImage++];\n try {\n images.set(src, await resolve(src));\n } catch (error) {\n if (requiredImages.has(src)) {\n imageFailed = true;\n imageError = error;\n return;\n }\n images.set(src, src); // Optional provider posters can remain remote.\n }\n }\n })\n );\n\n if (imageFailed) throw imageError;\n\n const qrs = new Map<string, string>();\n await Promise.all(\n [...qrUrls].map(async (url) => {\n try {\n qrs.set(\n url,\n await QRCode.toString(url, {\n type: 'svg',\n margin: 0,\n errorCorrectionLevel: 'M',\n color: { dark: '#002e3fff', light: '#ffffffff' },\n })\n );\n } catch {\n throw new DeckError([\n {\n level: 'error',\n path: ['slides'],\n message: 'A QR code could not be generated. Shorten its URL and try again.',\n },\n ]);\n }\n })\n );\n\n const charts = new Map<string, string>();\n for (const [key, req] of chartReqs) {\n charts.set(\n key,\n await renderChartSvg(req.spec as ChartSpecValue, {\n width: req.width,\n height: req.height,\n palette: brand.stock ? undefined : brand.palette,\n })\n );\n }\n\n const imageBudget = options.maxInlineImageBytes;\n if (imageBudget !== undefined && (!Number.isFinite(imageBudget) || imageBudget < 0)) {\n throw new RangeError('maxInlineImageBytes must be a finite nonnegative number.');\n }\n let emittedImageBytes = 0;\n let imagePath: (string | number)[] = ['brand'];\n const imageSizes = new Map<string, number>();\n const warnedImages = new Set<string>();\n const image = (src: string, path = imagePath): string => {\n const resolved = images.get(src) ?? src;\n if (imageBudget === undefined || !/^data:/i.test(resolved)) return resolved;\n let bytes = imageSizes.get(resolved);\n if (bytes === undefined) {\n bytes = escapedImageBytes(resolved);\n imageSizes.set(resolved, bytes);\n }\n if (emittedImageBytes + bytes <= imageBudget) {\n emittedImageBytes += bytes;\n return resolved;\n }\n if (/^https:\\/\\//i.test(src)) {\n if (!warnedImages.has(src)) {\n warnedImages.add(src);\n result.issues.push({\n level: 'warning',\n path,\n message:\n 'An image remains at its original HTTPS URL because the inline image budget was reached.',\n });\n }\n return src;\n }\n throw new DeckError([\n {\n level: 'error',\n path,\n message:\n 'This embedded image exceeds the rendered inline image budget. Use smaller images or an HTTPS image URL.',\n },\n ]);\n };\n // Reserve the favicon before layout rendering consumes the budget. Each logo\n // call must account for both image variants anew; caching logo HTML would\n // otherwise bypass the budget on every footer that repeats it.\n const icon = brand.favicon\n ? image(brand.favicon.src, ['brand', 'favicon'])\n : image(\n favicon(brand, (src) => images.get(src) ?? src),\n ['brand', 'favicon']\n );\n const logo = () => (deck.settings.logo === 'none' ? '' : brandLogo(brand, image));\n const ctx: RenderContext = {\n deck,\n image,\n qr: (url) => qrs.get(url) ?? '',\n chart: (key) => charts.get(key) ?? '',\n logo,\n brandName: brand.name,\n };\n\n const sections: string[] = [];\n const notes: { html: string; time?: string }[] = [];\n const slideMap: number[][] = [];\n\n const footerText = [brand.footer, deck.settings.confidential].filter(Boolean) as string[];\n const wantFooter =\n deck.settings.slideNumbers || footerText.length > 0 || deck.settings.logo === 'all';\n\n deck.slides.forEach((slide, i) => {\n if (slide.hidden && !options.includeHidden) {\n slideMap.push([]);\n return;\n }\n imagePath = ['slides', i];\n const layout = getLayout(slide.layout)!;\n const rendered = layout.render(slide as never, ctx);\n const list: RenderedSlide[] = Array.isArray(rendered) ? rendered : [rendered];\n const track = slide.track ?? layout.defaults?.track ?? 'value';\n const bg = slide.background ?? layout.defaults?.background ?? 'paper';\n\n slideMap.push(list.map((_, j) => sections.length + j));\n list.forEach((r, j) => {\n const classes = ['slide', `layout-${layout.name}`, ...(r.classes ?? [])];\n if (bg !== 'paper') classes.push('solid', `bg-${bg}`);\n let style = '';\n if (slide.backgroundImage) {\n const overlay = slide.overlay ?? 'dark';\n classes.push('has-bg', `overlay-${overlay}`);\n if (overlay !== 'light' && !classes.includes('solid')) classes.push('solid');\n style = ` style=\"--bg-img:url("${escapeAttr(escapeCssString(ctx.image(slide.backgroundImage.src)))}")\"`;\n }\n if (slide.hidden) classes.push('is-hidden');\n let chrome = '';\n if (slide.step && deck.journey) {\n classes.push('has-step');\n chrome = `<div class=\"steprail\" aria-hidden=\"true\"><div class=\"raillock\"><div class=\"sq\">${\n slide.stepDone ? CHECK_SVG : ''\n }</div><div class=\"lbl\">${escapeHtml(deck.journey.label)} <b>${slide.step}</b></div></div></div>`;\n }\n const strip =\n slide.showJourney && deck.journey ? roadmap(deck.journey.steps, slide.step, true) : '';\n const id = slide.id ? (list.length > 1 ? `${slide.id}-${j + 1}` : slide.id) : '';\n const number = sections.length + 1;\n const foot =\n wantFooter && layout.name !== 'title'\n ? `<footer class=\"slide-foot\" aria-hidden=\"true\"><span class=\"foot-l\">${\n deck.settings.logo === 'all' ? `<span class=\"foot-logo\">${logo()}</span>` : ''\n }${footerText.map((t) => `<span>${escapeHtml(t)}</span>`).join('')}</span>${\n deck.settings.slideNumbers ? `<span class=\"foot-n\">${number}</span>` : ''\n }</footer>`\n : '';\n sections.push(\n `<section class=\"${classes.join(' ')}\" data-track=\"${escapeAttr(track)}\" data-index=\"${i}\"${\n id ? ` id=\"${escapeAttr(id)}\"` : ''\n }${style} aria-label=\"Slide ${number}\">${chrome}<div class=\"slide__inner\">${strip}${r.html}</div>${foot}${\n slide.hidden ? '<span class=\"hidden-badge\">Hidden</span>' : ''\n }</section>`\n );\n notes.push({ html: prose(r.notes ?? slide.notes), time: r.time ?? slide.time });\n });\n });\n\n const withNotes = options.speakerNotes !== false;\n const fields = options.editorMarkers\n ? `<script type=\"application/json\" id=\"deck-fields\">${JSON.stringify(\n deck.slides.map((slide) =>\n fieldMarkers(slide as Record<string, unknown>, (src) => images.get(src) ?? src)\n )\n ).replace(/</g, '\\\\u003c')}</script>\\n`\n : '';\n const json = (v: unknown) => JSON.stringify(v).replace(/</g, '\\\\u003c');\n // Data-URI images are dropped from the embedded source (they are already in the\n // slides); speaker notes are dropped too when they are turned off.\n const stripData = (key: string, v: unknown) =>\n !withNotes && key === 'notes'\n ? undefined\n : typeof v === 'string' && /^data:/i.test(v)\n ? '(embedded)'\n : v;\n const source =\n options.embedSource === false\n ? ''\n : `<script type=\"application/json\" id=\"deck-source\">${JSON.stringify(deck, stripData).replace(/</g, '\\\\u003c')}</script>\\n`;\n\n const html = `<!doctype html>\n<html lang=\"${escapeAttr(deck.lang)}\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>${escapeHtml(deck.title)} · ${escapeHtml(brand.name)}</title>\n<link rel=\"icon\" href=\"${escapeAttr(icon)}\">\n${deck.description ? `<meta name=\"description\" content=\"${escapeAttr(deck.description)}\">\\n` : ''}<meta name=\"generator\" content=\"@classic-homes/slides\">\n<style id=\"brand-fonts\">${fontsCss()}</style>\n<style>${tokensCss(brand.stock ? undefined : brand.palette)}${DECK_CSS}${DECK_CSS_EXTRA}</style>\n</head>\n<body${wantFooter ? ' class=\"has-foot\"' : ''}${options.initialSlide ? ` data-initial-slide=\"${Math.max(0, Math.floor(options.initialSlide))}\"` : ''}${\n deck.settings.autoAdvance ? ` data-auto-advance=\"${deck.settings.autoAdvance}\"` : ''\n }${deck.settings.loop ? ' data-loop' : ''}${options.allowEmbeddedKiosk ? ' data-embedded-kiosk' : ''}${\n options.editorMarkers ? ' data-editor' : ''\n }>\n<div class=\"rail\" id=\"rail\"></div>\n<main class=\"deck\" id=\"deck\">\n${sections.join('\\n')}\n</main>\n<nav class=\"dots\" id=\"dots\" aria-label=\"Slide navigation\"></nav>\n${\n withNotes\n ? `<div class=\"hud\"><span class=\"counter\" id=\"counter\" aria-live=\"polite\"></span><button class=\"btn\" id=\"notesBtn\" aria-label=\"Toggle speaker notes\">▤ notes (N)</button></div>\n<div class=\"hint\"><kbd>↑</kbd><kbd>↓</kbd> or <kbd>Space</kbd> navigate · <kbd>N</kbd> notes · <kbd>P</kbd> presenter · <kbd>O</kbd> overview · <kbd>F</kbd> fullscreen</div>\n<aside class=\"notes\" id=\"notes\" aria-live=\"polite\"><div class=\"notes__head\"><span class=\"tag\">Speaker notes</span><span class=\"time\" id=\"notesTime\"></span></div><div class=\"notes__body\" id=\"notesBody\"></div></aside>`\n : `<div class=\"hud\"><span class=\"counter\" id=\"counter\" aria-live=\"polite\"></span></div>\n<div class=\"hint\"><kbd>↑</kbd><kbd>↓</kbd> or <kbd>Space</kbd> navigate · <kbd>O</kbd> overview · <kbd>F</kbd> fullscreen</div>`\n}\n<script type=\"application/json\" id=\"deck-notes\">${json(withNotes ? notes : [])}</script>\n${source}${fields}<script>${RUNTIME_JS}</script>\n</body>\n</html>\n`;\n\n return { html, deck, slideCount: sections.length, slideMap, warnings: result.issues, brand };\n}\n\nexport interface SpeakerNotesOptions {\n /** Brand profiles available to `deck.brand.profile` (needed to validate decks that name one). */\n brands?: BrandProfile[];\n /** List slides marked `hidden` too. Default false, matching a presentation. */\n includeHidden?: boolean;\n}\n\n/** One presented slide's speaker notes. */\nexport interface SpeakerNote {\n /** 1-based slide number as presented (a walkthrough counts once per stage). */\n number: number;\n /** 0-based index of the deck slide it came from. */\n deckIndex: number;\n slideId?: string;\n /** Stage of a slide that expands into several (a walkthrough), else absent. */\n part?: { index: number; count: number };\n /** Timing cue. */\n time?: string;\n /** Notes as HTML (paragraphs, bullets, inline marks), escaped; '' when there are none. */\n html: string;\n}\n\nconst NO_ASSETS: Pick<RenderContext, 'image' | 'qr' | 'chart' | 'logo'> = {\n image: () => '',\n qr: () => '',\n chart: () => '',\n logo: () => '',\n};\n\n/**\n * Every presented slide's speaker notes, numbered as `renderDeck` numbers\n * them, for a printed notes handout. Walks the slides the way `renderDeck`\n * does but skips images, QR codes and charts, so nothing is fetched or drawn.\n */\nexport function speakerNotes(input: unknown, options: SpeakerNotesOptions = {}): SpeakerNote[] {\n const result = validateDeck(input, { brands: options.brands });\n if (!result.ok || !result.deck) throw new DeckError(result.issues);\n const deck = result.deck;\n const ctx: RenderContext = {\n deck,\n ...NO_ASSETS,\n brandName: resolveBrand(deck.brand, options.brands).name,\n };\n\n const out: SpeakerNote[] = [];\n deck.slides.forEach((slide, i) => {\n if (slide.hidden && !options.includeHidden) return;\n const rendered = getLayout(slide.layout)!.render(slide as never, ctx);\n const list: RenderedSlide[] = Array.isArray(rendered) ? rendered : [rendered];\n list.forEach((r, j) => {\n const notes = (r.notes ?? slide.notes)?.trim();\n out.push({\n number: out.length + 1,\n deckIndex: i,\n ...(slide.id ? { slideId: slide.id } : {}),\n ...(list.length > 1 ? { part: { index: j + 1, count: list.length } } : {}),\n ...((r.time ?? slide.time) ? { time: r.time ?? slide.time } : {}),\n html: notes ? prose(notes) : '',\n });\n });\n });\n return out;\n}\n\n/** Size of an escaped image attribute without allocating another image-sized string/buffer. */\nfunction escapedImageBytes(value: string): number {\n let bytes = 0;\n for (let i = 0; i < value.length; i++) {\n const code = value.codePointAt(i)!;\n if (code === 38 || code === 39)\n bytes += 5; // & / '\n else if (code === 34)\n bytes += 6; // "\n else if (code === 60 || code === 62)\n bytes += 4; // < / >\n else if (code < 128) bytes++;\n else if (code < 2048) bytes += 2;\n else if (code <= 65535) bytes += 3;\n else {\n bytes += 4;\n i++;\n }\n }\n return bytes;\n}\n\n/** Logo lockup for a brand: its logo images (light + dark ground variants) or the Classic mark with its name. */\nfunction brandLogo(brand: ResolvedBrand, image: (src: string) => string): string {\n if (brand.logo) {\n const light = image(brand.logo.src);\n const dark = image((brand.logoOnDark ?? brand.logo).src);\n return `<span class=\"logo logo--img\" role=\"img\" aria-label=\"${escapeAttr(brand.name)}\"><img class=\"logo-light\" src=\"${escapeAttr(\n light\n )}\" alt=\"\"><img class=\"logo-dark\" src=\"${escapeAttr(dark)}\" alt=\"\"></span>`;\n }\n if (brand.name === 'Classic Homes') return LOGO_SVG;\n return logoLockup(brand.name, brand.key === 'classic-homes');\n}\n\n/** Tab icon: the brand favicon, or the Classic mark tinted with the brand primary. */\nfunction favicon(brand: ResolvedBrand, image: (src: string) => string): string {\n if (brand.favicon) return image(brand.favicon.src);\n if (brand.key !== 'classic-homes') {\n // Partner brand without a favicon: a monogram in its primary colour.\n const letter = (brand.name.match(/[A-Za-z0-9]/)?.[0] ?? '•').toUpperCase();\n const mono = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><rect width=\"32\" height=\"32\" rx=\"7\" fill=\"${brand.palette.primary}\"/><text x=\"16\" y=\"22.5\" text-anchor=\"middle\" font-family=\"Figtree,Arial,sans-serif\" font-size=\"19\" font-weight=\"700\" fill=\"#fff\">${letter}</text></svg>`;\n return `data:image/svg+xml,${encodeURIComponent(mono)}`;\n }\n const colour = brand.stock ? '#c50f22' : brand.palette.primary;\n const svg = LOGO_MARK_SVG.replace(\n '<svg ',\n `<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"${colour}\" `\n ).replace(' aria-hidden=\"true\"', '');\n return `data:image/svg+xml,${encodeURIComponent(svg)}`;\n}\n\n/** Pulls the embedded deck source back out of a rendered HTML file. */\nexport function extractDeckSource(html: string): unknown | undefined {\n const m = /<script type=\"application\\/json\" id=\"deck-source\">([\\s\\S]*?)<\\/script>/.exec(html);\n return m ? JSON.parse(m[1]) : undefined;\n}\n","/**\n * Presenter runtime inlined into every deck. Plain JS, no dependencies.\n *\n * - Scroll-snap navigation, progress rail, dot nav, counter, #slide-N links\n * - Speaker notes (N), fullscreen (F), presenter window (P), overview grid (O)\n * - Progressive reveal of [data-build] items, one per advance\n * - Videos/embeds load only while their slide is shown (offline → fallback)\n * - Before/after sliders\n * - Kiosk: data-auto-advance on <body> or ?kiosk=SECONDS, loops, hides chrome\n * - Chrome fades after a few idle seconds\n * - Embedders drive it with postMessage({ type: 'classic-slides:go', index })\n * - Editor previews (body[data-editor]): click a field to post classic-slides:select;\n * classic-slides:highlight outlines one\n */\nexport const RUNTIME_JS = String.raw`\n(() => {\n // The presenter runs this exact script too, retaining the host's script hash.\n // A MessagePort stays attached to its document if the popup later navigates;\n // unlike window.postMessage('*'), it cannot leak notes to a replacement page.\n if (document.body.classList.contains('presenter')) {\n if (!window.opener) return;\n const channel = document.querySelector('meta[name=\"presenter-channel\"]').content;\n const connection = new MessageChannel();\n const port = connection.port1;\n let started = Date.now();\n function scale(container, html) {\n container.innerHTML = html;\n const wrap = container.firstElementChild;\n if (!wrap?.classList.contains('ov-thumb')) return;\n const width = Math.max(200, container.clientWidth || 760);\n wrap.style.width = width + 'px';\n wrap.style.height = width * 9 / 16 + 'px';\n wrap.firstElementChild.style.transform = 'scale(' + width / 1280 + ')';\n }\n function tick() {\n const seconds = Math.floor((Date.now() - started) / 1000);\n document.querySelector('.pv-elapsed').textContent = Math.floor(seconds / 60) + ':' + String(seconds % 60).padStart(2, '0');\n document.querySelector('.pv-time').textContent = new Date().toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' });\n }\n port.onmessage = (event) => {\n const state = event.data;\n if (!state || state.type !== 'classic-slides:presenter-state') return;\n document.title = 'Presenter · ' + state.title;\n started = state.started;\n scale(document.querySelector('.pv-cur'), state.current);\n scale(document.querySelector('.pv-next'), state.next);\n document.querySelector('.pv-notes-body').innerHTML = state.notes;\n document.querySelector('.pv-cue').textContent = state.cue;\n document.querySelector('.pv-count').textContent = state.count;\n tick();\n };\n const keys = ['ArrowDown', 'ArrowRight', 'PageDown', ' ', 'Enter', 'ArrowUp', 'ArrowLeft', 'PageUp', 'Backspace', 'Home', 'End'];\n document.addEventListener('keydown', (event) => {\n if (event.metaKey || event.ctrlKey || event.altKey || !keys.includes(event.key)) return;\n if (event.target?.closest?.('a,button,input,textarea,select,[contenteditable]')) return;\n event.preventDefault();\n port.postMessage({ type: 'classic-slides:presenter-key', key: event.key });\n });\n window.addEventListener('resize', () => port.postMessage({ type: 'classic-slides:presenter-refresh' }));\n window.opener.postMessage({ type: 'classic-slides:presenter-ready', channel }, '*', [connection.port2]);\n const timer = setInterval(tick, 1000);\n window.addEventListener('beforeunload', () => { clearInterval(timer); port.close(); });\n return;\n }\n const runtimeSource = document.currentScript.textContent;\n const NOTES = JSON.parse(document.getElementById('deck-notes').textContent || '[]');\n const deck = document.getElementById('deck');\n const slides = [...deck.querySelectorAll('.slide')];\n const dotsWrap = document.getElementById('dots');\n const notes = document.getElementById('notes');\n const notesBody = document.getElementById('notesBody');\n const notesTime = document.getElementById('notesTime');\n const rail = document.getElementById('rail');\n const counter = document.getElementById('counter');\n const body = document.body;\n const embedded = window.parent !== window;\n\n slides.forEach((s, i) => {\n const b = document.createElement('button');\n b.setAttribute('aria-label', 'Go to slide ' + (i + 1));\n b.addEventListener('click', () => go(i));\n dotsWrap.appendChild(b);\n });\n const dots = [...dotsWrap.children];\n\n // ---------- progressive reveal ----------\n const buildItems = slides.map((s) => [...s.querySelectorAll('[data-build] .b-item')]);\n const shown = slides.map((_, i) => buildItems[i].length); // start fully shown until entered forwards\n function paintBuild(i) {\n buildItems[i].forEach((el, j) => el.classList.toggle('b-hidden', j >= shown[i]));\n }\n\n // ---------- media (video / embed) ----------\n function mountMedia(slide) {\n slide.querySelectorAll('.media-frame[data-media-src]').forEach((f) => {\n if (f.querySelector('iframe') || !navigator.onLine) return;\n const ifr = document.createElement('iframe');\n ifr.src = f.dataset.mediaSrc;\n ifr.title = f.dataset.mediaTitle || 'Embedded content';\n ifr.loading = 'eager';\n ifr.referrerPolicy = 'strict-origin-when-cross-origin';\n ifr.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-forms allow-popups allow-presentation');\n if (f.dataset.mediaKind === 'video') {\n ifr.allow = 'autoplay; encrypted-media; picture-in-picture; fullscreen';\n ifr.allowFullscreen = true;\n }\n f.appendChild(ifr);\n f.classList.add('live');\n });\n }\n function unmountMedia(slide) {\n slide.querySelectorAll('.media-frame.live').forEach((f) => {\n f.querySelector('iframe')?.remove();\n f.classList.remove('live');\n });\n }\n\n // ---------- before / after ----------\n deck.querySelectorAll('.compare').forEach((c) => {\n const r = c.querySelector('.cmp-range');\n r.addEventListener('input', () => c.style.setProperty('--pos', r.value + '%'));\n r.addEventListener('keydown', (e) => e.stopPropagation());\n });\n\n // ---------- active slide ----------\n let idx = -1;\n function setActive(i, fromKeys) {\n if (i === idx) return;\n const prev = idx;\n idx = i;\n if (prev >= 0) unmountMedia(slides[prev]);\n if (!fromKeys) shown[i] = buildItems[i].length; // arriving by scroll or jump shows everything\n paintBuild(i);\n mountMedia(slides[i]);\n dots.forEach((d, j) => d.setAttribute('aria-current', j === i ? 'true' : 'false'));\n const track = slides[i].getAttribute('data-track');\n rail.style.background = track === 'build' ? 'var(--teal)' : track === 'neutral' ? 'var(--navy)' : 'var(--red)';\n counter.textContent = (i + 1) + ' / ' + slides.length;\n if (notes?.classList.contains('open')) fillNotes();\n try {\n if (location.hash !== '#slide-' + (i + 1)) history.replaceState(null, '', '#slide-' + (i + 1));\n } catch (_) {}\n if (embedded) window.parent.postMessage({ type: 'classic-slides:slide', index: i, count: slides.length }, '*');\n presenterSync();\n }\n function fillNotes() {\n const n = NOTES[idx] || {};\n notesBody.innerHTML = n.html || '<p><i>No notes for this slide.</i></p>';\n notesTime.textContent = n.time || '';\n }\n\n const clamp = (n) => Math.max(0, Math.min(slides.length - 1, n));\n const currentIndex = () => clamp(Math.round(deck.scrollTop / deck.clientHeight));\n function updateRail() {\n const max = deck.scrollHeight - deck.clientHeight;\n rail.style.width = (max > 0 ? (deck.scrollTop / max) * 100 : 0) + '%';\n }\n\n let ticking = false;\n let jumping = false;\n deck.addEventListener('scroll', () => {\n if (ticking) return;\n ticking = true;\n requestAnimationFrame(() => {\n ticking = false;\n updateRail();\n if (!jumping) setActive(currentIndex());\n });\n }, { passive: true });\n\n // Scroll the deck element itself; scrolling the slide into view would also move an embedding page.\n function go(n, instant, fromKeys) {\n const t = clamp(n);\n jumping = true;\n // 'auto' would inherit the CSS smooth scrolling; jumps must really be instant.\n deck.scrollTo({ top: t * deck.clientHeight, behavior: instant || window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ? 'instant' : 'smooth' });\n setActive(t, fromKeys);\n clearTimeout(go.t);\n // Ignore scroll events until the programmatic scroll settles.\n go.t = setTimeout(() => { jumping = false; }, instant ? 80 : 1200);\n }\n deck.addEventListener('scrollend', () => {\n if (!jumping) return;\n clearTimeout(go.t);\n jumping = false;\n });\n\n // next/prev step through build items first, then move between slides.\n // Entering a slide forwards starts its build from zero; going back shows it complete.\n function next() {\n if (idx < 0) return;\n if (shown[idx] < buildItems[idx].length) { shown[idx]++; paintBuild(idx); presenterSync(); return; }\n if (idx === slides.length - 1) { if (loop) { shown[0] = 0; go(0, true, true); } return; }\n shown[idx + 1] = 0;\n go(idx + 1, false, true);\n }\n function prev() {\n if (idx < 0) return;\n if (buildItems[idx].length && shown[idx] > 0) { shown[idx]--; paintBuild(idx); presenterSync(); return; }\n const t = clamp(idx - 1);\n shown[t] = buildItems[t].length;\n go(t, false, true);\n }\n\n window.addEventListener('message', (e) => {\n const d = e.data;\n if (!d || typeof d !== 'object') return;\n if (pw && e.source === pw && d.type === 'classic-slides:presenter-ready' && d.channel === presenterChannel && e.ports[0]) {\n presenterPort?.close();\n presenterPort = e.ports[0];\n presenterPort.onmessage = (event) => {\n const command = event.data;\n if (command?.type === 'classic-slides:presenter-refresh') presenterSync();\n else if (command?.type === 'classic-slides:presenter-key' && typeof command.key === 'string') {\n onKey({ key: command.key, preventDefault() {} });\n }\n };\n presenterSync();\n return;\n }\n if (!embedded || e.source !== window.parent) return;\n if (d.type === 'classic-slides:go' && Number.isInteger(d.index)) go(d.index, true);\n else if (d.type === 'classic-slides:notes') { if (notes && notes.classList.contains('open') !== !!d.open) toggleNotes(); }\n else if (d.type === 'classic-slides:highlight' && editor) highlight(d.index, d.path);\n });\n\n // ---------- editor click-to-edit ----------\n // Matches the clicked element to a slide field by its visible text (or an\n // image by its src), walking up from the target, so layouts need no markup.\n const editor = embedded && body.hasAttribute('data-editor');\n const fieldsEl = editor && document.getElementById('deck-fields');\n const FIELDS = fieldsEl ? JSON.parse(fieldsEl.textContent || '[]') : [];\n const norm = (t) => (t || '').replace(/\\s+/g, ' ').trim();\n function ownText(el) {\n let t = '';\n el.childNodes.forEach((n) => { if (n.nodeType === 3) t += n.textContent; });\n return norm(t);\n }\n function fieldFor(el, candidates) {\n if (el.tagName === 'IMG') {\n const src = el.getAttribute('src');\n return candidates.find((c) => c.img && c.img === src);\n }\n const text = norm(el.textContent);\n const own = ownText(el);\n return candidates.find((c) => c.text && (c.text === text || (own && c.text === own)));\n }\n function locate(target) {\n const section = target.closest && target.closest('.slide');\n if (!section) return null;\n const index = Number(section.getAttribute('data-index'));\n const candidates = FIELDS[index] || [];\n for (let el = target; el && el !== section; el = el.parentElement) {\n const field = fieldFor(el, candidates);\n if (field) return { index, path: field.path, el };\n }\n return { index, path: null, el: section };\n }\n let hovered = null;\n let selected = null;\n function highlight(index, path) {\n selected?.classList.remove('cs-edit-selected');\n selected = null;\n if (!Array.isArray(path)) return;\n const key = JSON.stringify(path);\n const candidates = FIELDS[index] || [];\n for (const section of deck.querySelectorAll('.slide[data-index=\"' + index + '\"]')) {\n for (const el of section.querySelectorAll('*')) {\n const field = fieldFor(el, candidates);\n if (field && JSON.stringify(field.path) === key) {\n selected = el;\n el.classList.add('cs-edit-selected');\n return;\n }\n }\n }\n }\n if (editor) {\n const style = document.createElement('style');\n style.textContent = '.cs-edit-hover{outline:2px dashed rgba(0,122,255,.7);outline-offset:4px;cursor:pointer}' +\n '.cs-edit-selected{outline:2px solid rgb(0,122,255);outline-offset:4px}';\n document.head.appendChild(style);\n deck.addEventListener('click', (e) => {\n const hit = locate(e.target);\n if (!hit) return;\n // Links on a slide would navigate the preview away\n if (e.target.closest('a[href]')) e.preventDefault();\n window.parent.postMessage({ type: 'classic-slides:select', index: hit.index, path: hit.path }, '*');\n }, true);\n deck.addEventListener('mouseover', (e) => {\n const hit = locate(e.target);\n const el = hit && hit.path ? hit.el : null;\n if (el === hovered) return;\n hovered?.classList.remove('cs-edit-hover');\n hovered = el;\n el?.classList.add('cs-edit-hover');\n });\n deck.addEventListener('mouseleave', () => { hovered?.classList.remove('cs-edit-hover'); hovered = null; });\n }\n\n function onKey(e) {\n if (e.metaKey || e.ctrlKey || e.altKey) return;\n const k = e.key;\n if (overview && k === 'Escape') { e.preventDefault(); closeOverview(); return; }\n if (overview && k === 'Tab') {\n const buttons = [...overview.querySelectorAll('button')];\n const first = buttons[0], last = buttons[buttons.length - 1];\n if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last?.focus(); }\n else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first?.focus(); }\n return;\n }\n if (e.target?.closest?.('a,button,input,textarea,select,[contenteditable]:not([contenteditable=\"false\"]),[role=\"button\"],[role=\"slider\"]')) return;\n if (overview) return;\n if (['ArrowDown', 'ArrowRight', 'PageDown', ' ', 'Enter'].includes(k)) { e.preventDefault(); next(); }\n else if (['ArrowUp', 'ArrowLeft', 'PageUp', 'Backspace'].includes(k)) { e.preventDefault(); prev(); }\n else if (k === 'Home') { e.preventDefault(); go(0); }\n else if (k === 'End') { e.preventDefault(); go(slides.length - 1); }\n else if (k.toLowerCase() === 'n') toggleNotes();\n else if (k.toLowerCase() === 'f') toggleFs();\n else if (k.toLowerCase() === 'p') openPresenter();\n else if (k.toLowerCase() === 'o') toggleOverview();\n else return;\n wake();\n }\n document.addEventListener('keydown', onKey);\n\n // Shared links may render without speaker notes: no panel, no presenter window.\n function toggleNotes() { if (!notes) return; notes.classList.toggle('open'); if (notes.classList.contains('open')) fillNotes(); }\n document.getElementById('notesBtn')?.addEventListener('click', toggleNotes);\n function toggleFs() {\n if (!document.fullscreenElement) document.documentElement.requestFullscreen?.();\n else document.exitFullscreen?.();\n }\n\n // ---------- idle chrome ----------\n let idleT;\n function wake() {\n body.classList.remove('idle');\n clearTimeout(idleT);\n idleT = setTimeout(() => body.classList.add('idle'), 2800);\n }\n document.addEventListener('mousemove', wake, { passive: true });\n\n // ---------- overview (O) ----------\n let overview = null;\n let overviewFocus = null;\n function scaledClone(i, width) {\n const wrap = document.createElement('div');\n wrap.className = 'ov-thumb';\n const inner = slides[i].cloneNode(true);\n inner.removeAttribute('id');\n inner.querySelectorAll('iframe').forEach((f) => f.remove());\n inner.querySelectorAll('.media-frame.live').forEach((f) => f.classList.remove('live'));\n inner.querySelectorAll('.b-hidden').forEach((el) => el.classList.remove('b-hidden'));\n inner.style.width = '1280px';\n inner.style.height = '720px';\n inner.style.transform = 'scale(' + width / 1280 + ')';\n inner.style.transformOrigin = '0 0';\n inner.style.position = 'absolute';\n inner.style.pointerEvents = 'none';\n wrap.style.width = width + 'px';\n wrap.style.height = (width * 9) / 16 + 'px';\n wrap.appendChild(inner);\n return wrap;\n }\n function toggleOverview() { overview ? closeOverview() : openOverview(); }\n function openOverview() {\n overviewFocus = document.activeElement;\n overview = document.createElement('div');\n overview.className = 'overview';\n overview.setAttribute('role', 'dialog');\n overview.setAttribute('aria-modal', 'true');\n overview.setAttribute('aria-label', 'All slides');\n const w = Math.min(300, Math.floor((window.innerWidth - 96) / 4) - 16);\n slides.forEach((_, i) => {\n const b = document.createElement('button');\n b.className = 'ov-item' + (i === idx ? ' ov-current' : '');\n b.setAttribute('aria-label', 'Go to slide ' + (i + 1));\n b.appendChild(scaledClone(i, w));\n const n = document.createElement('span');\n n.textContent = String(i + 1);\n b.appendChild(n);\n b.addEventListener('click', () => { closeOverview(); go(i, true); });\n overview.appendChild(b);\n });\n body.appendChild(overview);\n const cur = overview.querySelector('.ov-current');\n if (cur) { overview.scrollTop = cur.offsetTop - overview.clientHeight / 2 + cur.clientHeight / 2; cur.focus(); }\n }\n function closeOverview() { overview?.remove(); overview = null; overviewFocus?.focus(); overviewFocus = null; }\n\n // ---------- presenter window (P) ----------\n let pw = null;\n let presenterPort = null;\n let presenterChannel = '';\n let presenterUrl = '';\n const started = Date.now();\n function openPresenter() {\n if (!notes) return;\n if (pw && !pw.closed) { pw.focus(); return; }\n presenterPort?.close();\n presenterPort = null;\n if (presenterUrl) URL.revokeObjectURL(presenterUrl);\n presenterChannel = Array.from(crypto.getRandomValues(new Uint8Array(24)), (n) => n.toString(16).padStart(2, '0')).join('');\n const styles = [...document.querySelectorAll('style')].map((s) => s.outerHTML).join('');\n const html = '<!doctype html><html><head><meta charset=\"utf-8\"><meta name=\"presenter-channel\" content=\"' + presenterChannel + '\"><title>Presenter</title>' + styles +\n '</head><body class=\"presenter\"><div class=\"pv-main\"><div class=\"pv-cur\"></div><div class=\"pv-side\"><div class=\"pv-label\">Next</div><div class=\"pv-next\"></div>' +\n '<div class=\"pv-clock\"><b class=\"pv-elapsed\">0:00</b><span class=\"pv-time\"></span><span class=\"pv-count\"></span></div></div></div>' +\n '<div class=\"pv-notes\"><div class=\"pv-label\">Notes <span class=\"pv-cue\"></span></div><div class=\"pv-notes-body notes__body\"></div></div><script>' + runtimeSource + '<' + '/script></body></html>';\n presenterUrl = URL.createObjectURL(new Blob([html], { type: 'text/html' }));\n pw = window.open(presenterUrl, '_blank', 'width=1200,height=760');\n if (!pw) { URL.revokeObjectURL(presenterUrl); presenterUrl = ''; }\n }\n function presenterSync() {\n if (!pw || pw.closed || !presenterPort || idx < 0) return;\n const current = scaledClone(idx, 760);\n buildItems[idx].forEach((_, j) => {\n if (j >= shown[idx]) current.querySelectorAll('[data-build] .b-item')[j]?.classList.add('b-dim');\n });\n const n = NOTES[idx] || {};\n const steps = buildItems[idx].length ? ' · step ' + shown[idx] + '/' + buildItems[idx].length : '';\n presenterPort.postMessage({\n type: 'classic-slides:presenter-state', title: document.title, started,\n current: current.outerHTML,\n next: idx + 1 < slides.length ? scaledClone(idx + 1, 360).outerHTML : 'End of deck',\n notes: n.html || '<p><i>No notes for this slide.</i></p>', cue: n.time || '',\n count: 'Slide ' + (idx + 1) + ' of ' + slides.length + steps,\n });\n }\n window.addEventListener('beforeunload', () => {\n presenterPort?.close();\n if (pw && !pw.closed) pw.close();\n if (presenterUrl) URL.revokeObjectURL(presenterUrl);\n });\n\n // ---------- kiosk ----------\n const km = /[?&]kiosk=(\\d+)/.exec(location.search);\n const autoAdvance = km ? Number(km[1]) : Number(body.dataset.autoAdvance || 0);\n const loop = !!km || body.hasAttribute('data-loop');\n if (autoAdvance >= 3 && (!embedded || body.hasAttribute('data-embedded-kiosk'))) {\n body.classList.add('kiosk');\n setInterval(() => {\n shown[idx] = buildItems[idx].length;\n if (idx === slides.length - 1) { if (loop) go(0, true); }\n else go(idx + 1, true);\n }, autoAdvance * 1000);\n }\n\n // ---------- start ----------\n const m = /^#slide-(\\d+)$/.exec(location.hash);\n const initial = m ? Number(m[1]) - 1 : Number(body.dataset.initialSlide || 0);\n // The script runs at the end of <body>, so layout exists; jump synchronously.\n if (initial > 0) go(initial, true);\n else setActive(0);\n window.addEventListener('online', () => mountMedia(slides[idx]));\n window.addEventListener('hashchange', () => {\n const h = /^#slide-(\\d+)$/.exec(location.hash);\n if (h && Number(h[1]) - 1 !== idx) go(Number(h[1]) - 1, true);\n });\n wake();\n})();\n`;\n","/**\n * Deck stylesheet. Carried over from the hand-built homeowner-guide decks\n * (template + orientation \"PPT-parity\" components), trimmed to what the\n * layouts emit. Layouts only ever reference classes defined here.\n */\nexport const DECK_CSS = String.raw`\n*{box-sizing:border-box}\nhtml{scroll-behavior:smooth}\n@media (prefers-reduced-motion:reduce){html,.deck{scroll-behavior:auto}}\nbody{margin:0;font-family:var(--font-body);color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased}\na{color:var(--teal)}\nimg{display:block;max-width:100%}\n\n/* ---------- deck + slide frame ---------- */\n.deck{height:100vh;overflow-y:scroll;scroll-snap-type:y mandatory;scroll-behavior:smooth}\n@media (prefers-reduced-motion:reduce){.deck{scroll-behavior:auto}}\n.slide{height:100vh;scroll-snap-align:start;scroll-snap-stop:always;position:relative;display:flex;flex-direction:column;justify-content:center;\n --slide-pad-left:var(--slide-pad-x);padding:var(--slide-pad-y) var(--slide-pad-x) var(--slide-pad-y) var(--slide-pad-left);overflow:hidden;\n background:linear-gradient(var(--grid) 1px,transparent 1px) 0 0/100% 46px,linear-gradient(90deg,var(--grid) 1px,transparent 1px) 0 0/46px 100%,var(--paper)}\n.slide__inner{width:100%;max-width:var(--maxw);margin:0 auto;position:relative}\n.slide::before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:6px;background:var(--red)}\n.slide[data-track=\"build\"]::before{background:var(--teal)}\n.slide[data-track=\"neutral\"]::before{background:var(--navy)}\n.align-center .slide__inner,.slide__inner.align-center{text-align:center}\n.align-center .lead{margin-left:auto;margin-right:auto}\n\n/* solid grounds */\n.slide.bg-navy{background:var(--navy)}\n.slide.bg-slate{background:var(--slate)}\n.slide.bg-red{background:var(--red)}\n.slide.bg-teal{background:var(--teal-fill)}\n.slide.bg-plum{background:var(--plum)}\n.slide.bg-grey{background:var(--grey)}\n.slide.bg-stone{background:var(--stone)}\n.slide.solid::before{background:hsl(0 0% 100% / .25)}\n.slide.solid,.slide.solid h1,.slide.solid h2,.slide.solid h3,.slide.solid strong,.slide.solid b{color:#fff}\n.slide.solid .lead,.slide.solid p,.slide.solid li{color:hsl(40 30% 96% / .92)}\n.slide.solid .eyebrow,.slide.solid .kicker,.slide.solid em.hl{color:#fff}\n.slide.solid .eyebrow .act{color:hsl(0 0% 100% / .7)}\n.slide.solid .eyebrow::after{background:hsl(0 0% 100% / .3)}\n.slide.solid a{color:#fff}\n\n/* ---------- type ---------- */\n.eyebrow{font-family:var(--font-mono);font-size:clamp(12.5px,1.15vw,14.5px);letter-spacing:.2em;text-transform:uppercase;color:var(--red);margin:0 0 18px;display:flex;align-items:center;gap:12px}\n.slide[data-track=\"build\"] .eyebrow{color:var(--teal)}\n.slide[data-track=\"neutral\"] .eyebrow{color:var(--ink-faint)}\n.eyebrow .act{color:var(--ink-faint);font-weight:400}\n.eyebrow::after{content:\"\";flex:1;height:1px;background:var(--line-faint);max-width:160px}\n.align-center .eyebrow{justify-content:center}\nh1,h2{font-family:var(--font-display);font-weight:600;line-height:1.05;letter-spacing:-.018em;text-wrap:balance;margin:0 0 20px;color:var(--ink)}\nh1{font-style:italic;font-weight:500;font-size:clamp(38px,6.2vw,80px)}\nh2{font-family:var(--font-body);letter-spacing:-.01em;font-size:clamp(28px,4.2vw,54px)}\nh3{font-family:var(--font-body)}\n.lead{font-size:clamp(17px,1.95vw,26px);line-height:1.5;color:var(--ink-soft);max-width:48ch;margin:0 0 8px;text-wrap:pretty}\nb,strong{color:var(--ink);font-weight:700}\nem.hl{color:var(--red);font-style:italic}\n.slide[data-track=\"build\"] em.hl{color:var(--teal);font-style:normal;font-weight:600}\ncode{font-family:var(--font-mono);font-size:.92em}\n.kicker{font-family:var(--font-mono);font-size:clamp(12px,1.15vw,15px);letter-spacing:.28em;text-transform:uppercase;color:var(--red);margin:0 0 26px}\n\n/* ---------- logo ---------- */\n.logo{display:inline-flex;align-items:center;gap:.5em;font-family:var(--font-body);font-weight:500;font-size:clamp(16px,1.6vw,22px);color:#000}\n.logo svg{width:1.6em;height:1.6em}\n.logo-mark{fill:var(--red-logo)}\n.solid .logo,.solid .logo-word{color:#fff}\n.solid .logo-mark{fill:#fff}\n.brand-logo{margin:0 0 28px}\n.brand-logo.end{margin:36px 0 0}\n\n/* ---------- title ---------- */\n.title-wrap h1{font-size:clamp(44px,6.6vw,88px);margin-bottom:24px}\n.title-meta{display:flex;flex-wrap:wrap;gap:12px 26px;margin-top:36px;font-family:var(--font-mono);font-size:clamp(12px,1.1vw,14.5px);color:var(--ink-faint)}\n.align-center .title-meta{justify-content:center}\n.hero{margin:26px 0 0;max-width:760px}\n.align-center .hero{margin-left:auto;margin-right:auto}\n.hero img{width:100%;max-height:42vh;object-fit:cover;border-radius:6px}\n\n/* ---------- section divider ---------- */\n.divider-title{font-size:clamp(32px,5vw,64px);line-height:1.08;margin:0 auto}\n.photo-row{display:grid;grid-template-columns:repeat(var(--n),1fr);gap:10px;max-width:min(100%,calc(var(--n) * 220px));margin:34px auto 0}\n.photo-row img{width:100%;aspect-ratio:3/4;object-fit:cover;border-radius:2px}\n.photo-row.aspect-landscape img{aspect-ratio:4/3}\n.photo-row.aspect-native img{aspect-ratio:auto;height:auto;max-height:40vh}\n.photo-row.aspect-landscape:has(img:only-child),.photo-row.aspect-native:has(img:only-child){max-width:min(100%,760px)}\n.photo-row:has(img:nth-child(7)){max-width:min(100%,1320px)}\n\n/* ---------- columns + lists ---------- */\n.cols{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(26px,4.5vw,64px);align-items:center}\n.cols.even{grid-template-columns:1fr 1fr;align-items:start}\n@media (max-width:840px){.cols,.cols.even{grid-template-columns:1fr;gap:24px}}\nul.clean{list-style:none;padding:0;margin:16px 0 0;display:flex;flex-direction:column;gap:12px}\nul.clean li{position:relative;padding-left:26px;font-size:clamp(16px,1.7vw,21px);line-height:1.4;color:var(--ink-soft);text-align:left}\nul.clean li::before{content:\"\";position:absolute;left:0;top:.5em;width:9px;height:9px;background:var(--red);border-radius:2px}\n.slide[data-track=\"build\"] ul.clean li::before{background:var(--teal)}\n.slide[data-track=\"neutral\"] ul.clean li::before{background:var(--navy)}\n.slide.solid ul.clean li::before{background:#fff}\nul.clean li .sub{display:block;font-size:.84em;color:var(--ink-faint);margin-top:2px}\n.slide.solid ul.clean li .sub{color:hsl(0 0% 100% / .75)}\nul.check li{padding-left:30px}\nul.check li::before{content:\"\\2713\";background:none!important;width:auto;height:auto;left:0;top:.02em;color:var(--red);font-weight:900;font-size:1.15em;line-height:1;border-radius:0}\n.slide[data-track=\"build\"] ul.check li::before{color:var(--teal)}\n.slide.solid ul.check li::before{color:#fff}\n\n/* ---------- cards ---------- */\n.cardgrid{display:grid;grid-template-columns:repeat(var(--cols,3),1fr);gap:14px;margin-top:20px;align-items:start}\n.cardgrid.cards--banner{align-items:stretch}\n@media (max-width:840px){.cardgrid{grid-template-columns:1fr 1fr}}\n.card{background:var(--paper-2);border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:var(--shadow);display:flex;flex-direction:column;text-align:left}\n.card-b{padding:18px 20px}\n.card-img{width:100%;aspect-ratio:16/10;object-fit:cover}\n.card h3{margin:0 0 6px;font-size:clamp(16px,1.5vw,19px);font-weight:650;letter-spacing:-.01em;color:var(--ink)}\n.card .tag+h3{margin-top:8px}\n.card p{margin:0;font-size:clamp(14px,1.3vw,16px);line-height:1.5;color:var(--ink-soft)}\n.card .tag{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--red);display:block}\n.slide[data-track=\"build\"] .card .tag{color:var(--teal)}\n.cardgrid.cards--banner .card-band{background:var(--navy);color:#fff;font-weight:700;letter-spacing:.12em;text-transform:uppercase;padding:14px 18px;font-size:clamp(14px,1.5vw,19px)}\n.slide[data-track=\"value\"] .cardgrid.cards--banner .card-band{background:var(--red)}\n.slide[data-track=\"build\"] .cardgrid.cards--banner .card-band{background:var(--teal-fill)}\n.cardgrid.cards--banner .card-b{flex:1;display:flex;flex-direction:column;justify-content:center;text-align:center}\n.slide.solid .card h3,.slide.solid .card b{color:var(--ink)}\n.slide.solid .card p{color:var(--ink-soft)}\n\n/* footnote + natural-size images */\n.footnote{margin:22px 0 0;font-size:clamp(15px,1.55vw,19px);line-height:1.45;color:var(--ink-soft);max-width:70ch}\n.slide.solid .footnote{color:hsl(0 0% 100% / .85)}\nimg.natural,.media img.natural,.photo-grid img.natural{width:auto;max-width:min(100%,320px);max-height:120px;aspect-ratio:auto;object-fit:contain;border-radius:0}\n.media img.natural{justify-self:start}\n.media--badge{min-height:220px;display:flex;align-items:center;justify-content:center}\n.media--badge .callout-circle{position:static;width:clamp(200px,22vw,280px)}\n.qr-hero img.qr-img{width:clamp(180px,21vw,250px);height:auto}\n\n/* ---------- stats ---------- */\n.stat-row{display:flex;flex-wrap:wrap;gap:12px;margin-top:26px}\n.align-center .stat-row{justify-content:center}\n.stat{background:var(--paper-2);border:1px solid var(--line);border-radius:10px;padding:18px 22px;min-width:150px;flex:1 1 0;max-width:280px;box-shadow:var(--shadow)}\n.stat b{display:block;font-family:var(--font-display);font-size:clamp(30px,3.6vw,48px);line-height:1;color:var(--red);font-variant-numeric:tabular-nums}\n.slide[data-track=\"build\"] .stat b{color:var(--teal)}\n.slide[data-track=\"neutral\"] .stat b{color:var(--navy)}\n.stat span{display:block;margin-top:8px;font-size:clamp(13px,1.2vw,15px);line-height:1.35;color:var(--ink-faint)}\n.slide.solid .stat span{color:var(--ink-faint)}\n\n/* ---------- comparison ---------- */\n.split2{display:grid;grid-template-columns:repeat(var(--cols,2),1fr);gap:18px;margin-top:10px}\n@media (max-width:720px){.split2{grid-template-columns:1fr}}\n.split2 .col{background:var(--paper-2);border:1px solid var(--line);border-top:3px solid var(--red);border-radius:12px;padding:22px;box-shadow:var(--shadow);text-align:left}\n.split2 .col h3{font-family:var(--font-mono);font-size:12px;letter-spacing:.16em;text-transform:uppercase;margin:0 0 12px;color:var(--red)}\n.split2 .col p{margin:0;color:var(--ink-soft);font-size:clamp(14px,1.4vw,17px);line-height:1.45}\n.split2 .col.tone-build{border-top-color:var(--teal)}\n.split2 .col.tone-build h3{color:var(--teal)}\n.split2 .col.tone-build ul.clean li::before{background:var(--teal)}\n.split2 .col.tone-build ul.check li::before{color:var(--teal)}\n.split2 .col.tone-neutral{border-top-color:var(--navy)}\n.split2 .col.tone-neutral h3{color:var(--navy)}\n.split2 .col.tone-neutral ul.clean li::before{background:var(--navy)}\n.split2 .col.tone-value ul.clean li::before{background:var(--red)}\n.slide.solid .split2 .col li,.slide.solid .split2 .col p{color:var(--ink-soft)}\n\n/* ---------- quote ---------- */\n.quote{font-family:var(--font-display);font-size:clamp(24px,3vw,40px);line-height:1.3;color:var(--ink);border-left:3px solid var(--red);padding-left:28px;margin:0;text-wrap:pretty}\n.slide[data-track=\"build\"] .quote{border-left-color:var(--teal)}\n.quote cite{display:block;font-family:var(--font-mono);font-style:normal;font-size:13px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);margin-top:20px}\n.quote-cols{grid-template-columns:1.4fr .6fr}\n.portrait img{width:100%;aspect-ratio:3/4;object-fit:cover;border-radius:6px}\n.slide.solid .quote{color:#fff;border-left-color:#fff}\n.slide.solid .quote cite{color:hsl(0 0% 100% / .75)}\n\n/* ---------- split (text + photos) ---------- */\n.split-photo{display:grid;grid-template-columns:1.1fr .9fr;gap:clamp(24px,4vw,56px);align-items:center}\n.split-photo.media-left{grid-template-columns:.9fr 1.1fr}\n@media (max-width:840px){.split-photo,.split-photo.media-left{grid-template-columns:1fr}}\n.split-text h2{margin-bottom:14px}\n.group{margin-top:16px}\n.group-h{font-weight:700;color:var(--ink);margin:0 0 2px;font-size:clamp(16px,1.7vw,21px)}\n.group>p:not(.group-h){margin:4px 0 0;color:var(--ink-soft);font-size:clamp(15px,1.6vw,19px);line-height:1.45}\n.group ul.clean{margin-top:6px}\n.slide.solid .group-h{color:#fff}\n.media{position:relative;display:grid;gap:10px}\n.media img{width:100%;border-radius:6px;object-fit:cover}\n.media--single img{max-height:62vh}\n.media--stack img{max-height:30vh}\n.media--grid{grid-template-columns:1fr 1fr}\n.media--grid img{aspect-ratio:4/3;max-height:30vh}\n.media--overlap{display:block;aspect-ratio:4/3}\n.media--overlap img{position:absolute;border:6px solid #fff;box-shadow:0 16px 34px -12px rgba(0,0,0,.5)}\n.media--overlap .ov-back{width:86%;height:80%;top:0;left:0}\n.media--overlap .ov-front{width:52%;height:52%;right:0;bottom:0;z-index:2}\n.callout-circle{position:absolute;top:-14px;right:-10px;z-index:3;border-radius:50%;background:var(--red);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:16px;box-shadow:0 6px 18px -6px rgba(0,0,0,.35);width:clamp(150px,16vw,210px);aspect-ratio:1}\n.callout-circle b{display:block;color:#fff;font-size:clamp(13px,1.35vw,17px);line-height:1.15;margin-bottom:5px}\n.callout-circle span{font-size:clamp(12px,1.2vw,15px);line-height:1.22}\n\n/* ---------- photo grid ---------- */\n.photo-grid{display:grid;grid-template-columns:repeat(var(--cols,3),1fr);gap:10px;margin-top:10px}\n.photo-grid img{width:100%;object-fit:cover;border-radius:3px}\n.photo-grid.aspect-portrait img{aspect-ratio:3/4}\n.photo-grid.aspect-landscape img{aspect-ratio:4/3}\n.photo-grid.aspect-square img{aspect-ratio:1}\n.photo-grid.aspect-native{align-items:start}\n.photo-grid.aspect-native img{height:auto}\n.photo-grid figure{margin:0}\n.photo-grid figcaption{margin-top:6px;font-size:13px;color:var(--ink-faint);text-align:center}\n.slide.solid .photo-grid figcaption{color:hsl(0 0% 100% / .8)}\n.photo-grid:only-child,.slide__inner>.photo-grid:first-child{margin-top:0}\n\n/* ---------- single image ---------- */\n.diagram-shot{display:block;width:fit-content;max-width:100%;margin:6px auto 0;border:1px solid var(--line);border-radius:10px;padding:10px;background:#fff;box-shadow:var(--shadow)}\n.diagram-shot img{width:auto;max-width:100%;max-height:62vh;margin:0 auto}\n.shot-cap{margin-top:10px;font-family:var(--font-mono);font-size:12px;letter-spacing:.02em;color:var(--ink-faint);text-align:center}\n.bleed-img{margin:0}\n.bleed-img img{width:100%;max-height:70vh;object-fit:cover;border-radius:8px}\n\n/* ---------- walkthrough ---------- */\n.stage-spot{display:grid;grid-template-columns:1.12fr .88fr;gap:clamp(22px,3.2vw,44px);align-items:center;margin:clamp(8px,2vh,20px) 0 clamp(20px,3.4vh,34px)}\n@media (max-width:840px){.stage-spot{grid-template-columns:1fr}}\n.stage-figure{position:relative;aspect-ratio:16/9;border-radius:11px;overflow:hidden;box-shadow:var(--shadow);background:var(--paper-3)}\n.stage-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}\n.stage-badge{position:absolute;left:0;bottom:0;background:var(--red);color:#fff;padding:9px 20px 11px;display:flex;flex-direction:column;line-height:1;border-top-right-radius:9px}\n.slide[data-track=\"build\"] .stage-badge{background:var(--teal-fill)}\n.stage-kicker{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;opacity:.9;margin-bottom:3px}\n.stage-num{font-family:var(--font-mono);font-weight:700;font-size:clamp(26px,3.4vw,44px)}\n.stage-count{font-family:var(--font-mono);color:var(--ink-faint);font-size:clamp(13px,1.4vw,16px);letter-spacing:.04em;margin-bottom:12px}\n.stage-count b{color:var(--red);font-size:1.5em}\n.stage-copy h3{margin:0 0 8px;font-size:clamp(18px,2vw,26px);color:var(--ink)}\n.stage-txt{font-size:clamp(17px,1.9vw,25px);line-height:1.42;color:var(--ink);font-weight:500;margin:0}\n.stage-rail{display:flex;align-items:center;padding:4px 6px}\n.snode{flex:1;position:relative;display:flex;justify-content:center;min-width:0}\n.snode::before{content:\"\";position:absolute;top:50%;left:calc(-50% + 8px);width:calc(100% - 16px);height:2px;background:var(--line);transform:translateY(-50%)}\n.snode:first-child::before{display:none}\n.snode.done::before,.snode.active::before{background:var(--red)}\n.sn-dot{position:relative;z-index:1;width:15px;height:15px;border-radius:50%;background:#fff;border:2px solid var(--line-strong)}\n.snode.done .sn-dot{background:var(--red);border-color:var(--red)}\n.snode.active .sn-dot{background:var(--red);border-color:var(--red);transform:scale(1.55);box-shadow:0 0 0 4px var(--red-soft)}\n\n/* ---------- qr ---------- */\n.qr-wrap{display:flex;justify-content:center}\n.qr-hero{display:inline-block;background:#fff;border:1px solid var(--line);border-radius:16px;padding:clamp(18px,2.4vw,26px);box-shadow:var(--shadow);text-align:center;text-decoration:none}\n.qr-hero svg{width:clamp(180px,21vw,250px);height:auto;display:block;border-radius:4px}\n.qr-hero .u{margin-top:14px;font-family:var(--font-mono);font-size:clamp(13px,1.35vw,16px);font-weight:600;color:var(--ink)}\n\n/* ---------- contacts ---------- */\n.contact-grid{display:grid;grid-template-columns:repeat(var(--cols,3),1fr);gap:14px;margin-top:20px}\n@media (max-width:840px){.contact-grid{grid-template-columns:1fr}}\n.contact{display:flex;gap:16px;align-items:center;background:var(--paper-2);border:1px solid var(--line);border-radius:12px;padding:18px 20px;box-shadow:var(--shadow);text-align:left}\n.contact .avatar{width:64px;height:64px;border-radius:50%;object-fit:cover;flex:none}\n.contact h3{margin:0;font-size:clamp(16px,1.5vw,19px);color:var(--ink)}\n.contact .role{margin:2px 0 6px;font-size:14px;color:var(--ink-faint)}\n.contact a{display:block;font-family:var(--font-mono);font-size:13.5px;color:var(--teal);text-decoration:none;line-height:1.6}\n.slide.solid .contact h3{color:var(--ink)}\n.slide.solid .contact .role{color:var(--ink-faint)}\n.slide.solid .contact a{color:var(--teal)}\n\n/* ---------- journey map + step rail ---------- */\n.roadmap{display:flex;align-items:flex-start;gap:6px;margin:26px 0 0}\n.roadmap .rstep{flex:1;text-align:center;position:relative;min-width:0}\n.roadmap .rstep::before{content:\"\";position:absolute;top:19px;left:calc(-50% + 16px);width:calc(100% - 38px);height:2px;background:var(--line)}\n.roadmap .rstep:first-child::before{display:none}\n.roadmap .rn{position:relative;z-index:1;width:40px;height:40px;border-radius:50%;background:#fff;border:2px solid var(--line-strong);color:var(--ink-faint);font-family:var(--font-mono);font-weight:700;display:flex;align-items:center;justify-content:center;margin:0 auto;font-size:16px}\n.roadmap .rt{margin-top:9px;font-size:clamp(11.5px,1.05vw,13.5px);line-height:1.25;color:var(--ink-soft)}\n.roadmap .rstep.active .rn{background:var(--red);border-color:var(--red);color:#fff;transform:scale(1.12)}\n.roadmap .rstep.active .rt{color:var(--ink);font-weight:700}\n.roadmap.mini{gap:5px;margin:0 auto 22px;max-width:600px}\n.roadmap.mini .rn{width:28px;height:28px;font-size:12.5px;border-width:1.5px}\n.roadmap.mini .rstep::before{top:13px;left:calc(-50% + 11px);width:calc(100% - 27px)}\n.slide.solid .roadmap.mini .rn{background:transparent;border-color:rgba(255,255,255,.55);color:rgba(255,255,255,.85)}\n.slide.solid .roadmap.mini .rstep::before{background:rgba(255,255,255,.3)}\n.slide.solid .roadmap.mini .rstep.active .rn{background:#fff;border-color:#fff;color:var(--red)}\n.slide.has-step{--slide-pad-left:calc(clamp(60px,6.5vw,100px) + var(--slide-pad-x))}\n.slide.has-step::before{display:none}\n.steprail{position:absolute;left:0;top:0;bottom:0;width:clamp(60px,6.5vw,100px);background:var(--red);display:flex;flex-direction:column;align-items:center;z-index:3}\n.slide[data-track=\"build\"] .steprail{background:var(--teal-fill)}\n.slide[data-track=\"neutral\"] .steprail{background:var(--navy)}\n.slide.bg-red .steprail{background:var(--navy)}\n.slide.bg-teal .steprail{background:var(--red)}\n.steprail .raillock{display:flex;flex-direction:column;align-items:center;gap:9px;margin-top:clamp(28px,5vh,52px)}\n.steprail .sq{width:24px;height:24px;background:#fff;display:flex;align-items:center;justify-content:center}\n.steprail .sq svg{width:18px;height:18px}\n.steprail .sq svg path{fill:none;stroke:var(--red);stroke-width:3.6;stroke-linecap:round;stroke-linejoin:round}\n.steprail .lbl{writing-mode:vertical-rl;transform:rotate(180deg);color:#fff;font-weight:700;letter-spacing:.16em;font-size:clamp(15px,1.7vw,22px)}\n.steprail .lbl b{color:#fff;font-size:1.15em}\n\n/* ---------- chrome ---------- */\n.rail{position:fixed;top:0;left:0;height:3px;z-index:40;background:var(--red);width:0;transition:width .25s ease,background .3s}\n.hud{position:fixed;bottom:18px;right:20px;z-index:40;display:flex;align-items:center;gap:9px;font-family:var(--font-mono);font-size:12px;color:var(--ink-faint)}\n.btn{font-family:var(--font-mono);font-size:12px;letter-spacing:.03em;color:var(--ink-soft);background:var(--paper-2);border:1px solid var(--line);border-radius:6px;padding:7px 11px;cursor:pointer}\n.btn:hover{color:var(--ink);border-color:var(--ink-faint)}\n.btn:focus-visible,.dots button:focus-visible{outline:2px solid var(--teal);outline-offset:2px}\n.counter{background:var(--paper-2);border:1px solid var(--line);border-radius:6px;padding:7px 10px}\n.dots{position:fixed;top:50%;right:16px;transform:translateY(-50%);z-index:40;display:flex;flex-direction:column;gap:8px}\n@media (max-width:900px){.dots{display:none}}\n.dots button{width:9px;height:9px;padding:0;border-radius:50%;border:1.5px solid var(--ink-faint);background:transparent;cursor:pointer}\n.dots button[aria-current=\"true\"]{background:var(--red);border-color:var(--red);transform:scale(1.3)}\n.notes{position:fixed;left:0;right:0;bottom:0;z-index:50;background:var(--navy);color:hsl(40 30% 96%);border-top:3px solid var(--red);padding:20px clamp(24px,6vw,88px) 24px;transform:translateY(101%);visibility:hidden;transition:transform .28s cubic-bezier(.4,0,.2,1),visibility 0s .28s;max-height:46vh;overflow-y:auto;box-shadow:0 -20px 40px -20px hsl(0 0% 0% / .6)}\n.notes.open{transform:translateY(0);visibility:visible;transition:transform .28s cubic-bezier(.4,0,.2,1)}\n.notes__head{display:flex;align-items:baseline;gap:14px;margin-bottom:10px}\n.notes__head .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:hsl(357 70% 72%)}\n.notes__head .time{font-family:var(--font-mono);font-size:11px;color:hsl(40 20% 96% / .5);margin-left:auto}\n.notes__body{font-size:clamp(13px,1.45vw,16.5px);line-height:1.55;color:hsl(40 25% 96% / .9);max-width:80ch}\n.notes__body p{margin:0 0 9px}\n.notes__body ul{margin:0 0 9px;padding-left:20px}\n.notes__body b{color:#fff}\n.notes__body em.hl{color:hsl(357 70% 80%)}\n.notes__body a{color:hsl(182 45% 70%)}\n.hint{position:fixed;bottom:18px;left:20px;z-index:40;font-family:var(--font-mono);font-size:11px;color:var(--ink-faint)}\n.hint kbd{font-family:var(--font-mono);background:var(--paper-2);border:1px solid var(--line);border-radius:4px;padding:2px 6px;color:var(--ink-soft);font-size:11px}\n@media (max-width:680px){.hint{display:none}}\n@media (prefers-reduced-motion:reduce){.rail,.notes{transition:none}}\n\n/* ---------- print: one slide per landscape page ---------- */\n@media print{\n @page{size:13.333in 7.5in;margin:0}\n .deck{height:auto;overflow:visible}\n .slide{height:7.5in;width:13.333in;page-break-after:always;break-after:page;-webkit-print-color-adjust:exact;print-color-adjust:exact}\n .rail,.hud,.dots,.notes,.hint{display:none!important}\n}\n`;\n\n/** Styles for v0.3 layouts and presenter features. */\nexport const DECK_CSS_EXTRA = String.raw`\n/* ---------- brand logo images ---------- */\n.logo--word .logo-word{font-weight:700;letter-spacing:.01em}\n.logo--img img{height:2.1em;width:auto;max-width:14em;object-fit:contain}\n.logo--img .logo-dark{display:none}\n.solid .logo--img .logo-light{display:none}\n.solid .logo--img .logo-dark{display:inline-block}\n\n/* ---------- background photos ---------- */\n.slide.has-bg{background:var(--overlay),var(--bg-img) center/cover no-repeat}\n.slide.overlay-dark{--overlay:linear-gradient(100deg,hsl(196 100% 6% / .78),hsl(196 100% 8% / .45))}\n.slide.overlay-brand{--overlay:linear-gradient(100deg,color-mix(in srgb,var(--navy) 86%,transparent),color-mix(in srgb,var(--navy) 55%,transparent))}\n.slide.overlay-light{--overlay:linear-gradient(100deg,hsl(40 20% 98% / .92),hsl(40 20% 98% / .7))}\n.slide.has-bg.solid .lead{color:#fff}\n\n/* ---------- footer, hidden ---------- */\n.slide-foot{position:absolute;left:var(--slide-pad-left);right:var(--slide-pad-x);max-width:var(--maxw);margin:0 auto;bottom:14px;display:flex;align-items:center;justify-content:space-between;gap:16px;font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;color:var(--ink-faint);pointer-events:none}\n.slide-foot .foot-l{display:flex;align-items:center;gap:16px}\n.slide-foot .foot-l>span+span::before{content:\"·\";margin-right:16px}\n.slide-foot .foot-logo .logo{font-size:12px}\n.slide-foot .foot-n{font-weight:700;color:var(--ink-soft)}\n.slide.solid .slide-foot,.slide.solid .slide-foot .foot-n{color:hsl(0 0% 100% / .72)}\n.slide.is-hidden>.slide__inner{opacity:.45}\n.hidden-badge{position:absolute;top:14px;right:18px;font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;background:var(--ink);color:#fff;padding:4px 8px;border-radius:4px}\n\n/* ---------- progressive reveal ---------- */\n[data-build] .b-item{transition:opacity .35s ease,transform .35s ease}\n[data-build] .b-item.b-hidden{opacity:0;transform:translateY(10px)}\n.b-dim{opacity:.28!important;transform:none!important}\n@media (prefers-reduced-motion:reduce){[data-build] .b-item{transition:none}}\n\n/* ---------- stats trends ---------- */\n.stat .trend{display:inline-block;margin:6px 0 0;font-family:var(--font-mono);font-style:normal;font-size:13px;font-weight:700}\n.trend--good{color:var(--good)}\n.trend--bad{color:var(--red)}\n.trend--flat{color:var(--ink-faint)}\n.stat .spark{display:block;width:100%;max-width:140px;height:32px;margin-top:8px}\n.spark polyline{fill:none;stroke:var(--red);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}\n.spark circle{fill:var(--red)}\n.slide[data-track=\"build\"] .spark polyline{stroke:var(--teal)}\n.slide[data-track=\"build\"] .spark circle{fill:var(--teal)}\n.slide[data-track=\"neutral\"] .spark polyline{stroke:var(--navy)}\n.slide[data-track=\"neutral\"] .spark circle{fill:var(--navy)}\n\n/* ---------- chart ---------- */\n.chart-fig{margin:8px 0 0}\n.chart-fig svg{display:block;width:100%;height:auto;max-height:56vh}\n.chart-split{display:grid;grid-template-columns:1.55fr 1fr;gap:clamp(20px,3vw,44px);align-items:center}\n@media (max-width:840px){.chart-split{grid-template-columns:1fr}}\n.insights ul.clean li{font-size:clamp(16px,1.7vw,21px)}\n.source{margin-top:6px;font-family:var(--font-mono);font-size:11.5px;color:var(--ink-faint)}\n.slide.solid .chart-fig{background:#fff;border-radius:10px;padding:14px}\n\n/* ---------- table ---------- */\n.table-wrap{margin-top:14px;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--paper-2);box-shadow:var(--shadow)}\n.data-table{width:100%;border-collapse:collapse;font-size:clamp(14px,1.45vw,18px);font-variant-numeric:tabular-nums}\n.data-table th,.data-table td{padding:12px 18px;border-bottom:1px solid var(--line-faint);color:var(--ink-soft)}\n.data-table thead th{background:var(--paper-3);font-family:var(--font-mono);font-size:12px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint)}\n.data-table tbody th{font-weight:600;color:var(--ink)}\n.data-table tbody tr:nth-child(even){background:hsl(60 11% 98%)}\n.data-table .al-left{text-align:left}.data-table .al-center{text-align:center}.data-table .al-right{text-align:right}\n.data-table .hl-row th,.data-table .hl-row td{background:var(--red-soft);color:var(--ink);font-weight:600}\n.data-table .hl-col{background:color-mix(in srgb,var(--red-soft) 70%,transparent)}\n.data-table thead .hl-col{color:var(--red)}\n.data-table tfoot th,.data-table tfoot td{font-weight:700;color:var(--ink);border-top:2px solid var(--ink);border-bottom:0}\n.slide.solid .data-table th,.slide.solid .data-table td{color:var(--ink-soft)}\n.slide.solid .data-table tbody th,.slide.solid .data-table tfoot *{color:var(--ink)}\n\n/* ---------- flow ---------- */\n.flow{list-style:none;margin:18px 0 0;padding:0;display:grid;gap:clamp(22px,2.6vw,40px)}\n.flow--horizontal{grid-template-columns:repeat(var(--n),minmax(0,1fr));align-items:stretch}\n.flow--vertical{max-width:720px;gap:34px}\n.align-center .flow--vertical{margin-left:auto;margin-right:auto}\n.flow-step{position:relative;display:flex;gap:14px;align-items:flex-start;background:var(--paper-2);border:1px solid var(--line);border-radius:12px;padding:18px 20px;box-shadow:var(--shadow);text-align:left}\n.flow-step h3{margin:0 0 4px;font-size:clamp(16px,1.6vw,20px);color:var(--ink)}\n.flow-step p{margin:0;font-size:clamp(13.5px,1.35vw,16px);line-height:1.45;color:var(--ink-soft)}\n.flow-n{flex:none;width:32px;height:32px;border-radius:50%;background:var(--red);color:#fff;font-family:var(--font-mono);font-weight:700;display:flex;align-items:center;justify-content:center;font-size:14px}\n.slide[data-track=\"build\"] .flow-n{background:var(--teal-fill)}\n.slide[data-track=\"neutral\"] .flow-n{background:var(--navy)}\n.flow>li:not(:last-child)::after{content:\"\";position:absolute;background:var(--red);-webkit-mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 11h12.2l-4.6-4.6L13 5l7 7-7 7-1.4-1.4 4.6-4.6H4z'/%3E%3C/svg%3E\") center/contain no-repeat;mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 11h12.2l-4.6-4.6L13 5l7 7-7 7-1.4-1.4 4.6-4.6H4z'/%3E%3C/svg%3E\") center/contain no-repeat}\n.flow--horizontal>li:not(:last-child)::after{width:24px;height:24px;right:calc(-1 * clamp(22px,2.6vw,40px) / 2 - 12px);top:calc(50% - 12px)}\n.flow--vertical>li:not(:last-child)::after{width:26px;height:26px;left:calc(50% - 13px);bottom:-31px;transform:rotate(90deg)}\n.slide[data-track=\"build\"] .flow>li::after{background:var(--teal)}\n.flow-end{position:relative;display:flex;align-items:center;justify-content:center}\n.flow-end span{background:var(--red);color:#fff;font-weight:700;letter-spacing:.12em;text-transform:uppercase;padding:12px 30px;border-radius:999px;font-size:clamp(14px,1.4vw,17px)}\n.slide.solid .flow-step h3{color:var(--ink)}\n.slide.solid .flow-step p{color:var(--ink-soft)}\n\n/* ---------- timeline ---------- */\n.timeline{margin-top:24px;display:grid;grid-template-columns:1fr;gap:14px}\n.tl-phases{display:grid;grid-template-columns:repeat(var(--n),minmax(0,1fr));gap:0 10px}\n.tl-phase{border-radius:8px 8px 0 0;padding:8px 12px;font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;font-weight:700;border-bottom:3px solid}\n.tl-phase--0{background:var(--red-soft);color:var(--red);border-color:var(--red)}\n.tl-phase--1{background:var(--teal-soft);color:var(--teal);border-color:var(--teal)}\n.tl-items{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(var(--n),minmax(0,1fr));gap:10px;position:relative}\n.tl-items::before{content:\"\";position:absolute;left:0;right:0;top:9px;height:2px;background:var(--line)}\n.tl-item{position:relative;padding-top:30px;text-align:left}\n.tl-dot{position:absolute;top:2px;left:0;width:16px;height:16px;border-radius:50%;background:#fff;border:2.5px solid var(--line-strong)}\n.tl-in-0 .tl-dot,.tl-done .tl-dot{border-color:var(--red)}\n.tl-in-1 .tl-dot{border-color:var(--teal)}\n.tl-done .tl-dot{background:var(--red)}\n.tl-current .tl-dot{background:var(--red);border-color:var(--red);box-shadow:0 0 0 5px var(--red-soft);transform:scale(1.2)}\n.tl-date{display:block;font-family:var(--font-mono);font-size:12px;letter-spacing:.06em;color:var(--ink-faint);margin-bottom:4px}\n.tl-item h3{margin:0 0 4px;font-size:clamp(14px,1.45vw,18px);line-height:1.2;color:var(--ink)}\n.tl-item p{margin:0;font-size:clamp(12.5px,1.2vw,14.5px);line-height:1.4;color:var(--ink-soft)}\n.tl-current h3{color:var(--red)}\n.slide.solid .tl-item h3{color:#fff}\n.slide.solid .tl-items::before{background:hsl(0 0% 100% / .35)}\n\n/* ---------- cycle ---------- */\n.cycle{position:relative;width:min(62vh,540px);aspect-ratio:1;margin:10px auto 0}\n.cycle-ring{position:absolute;inset:0;width:100%;height:100%;overflow:visible}\n.cycle-ring path{fill:none;stroke:var(--line-strong);stroke-width:.9}\n.cycle-ring marker path{fill:var(--line-strong);stroke:none}\n.cycle-center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-family:var(--font-display);font-style:italic;font-size:clamp(20px,2.4vw,30px);color:var(--red);text-align:center;max-width:30%}\n.cycle-node{position:absolute;transform:translate(-50%,-50%);width:clamp(140px,15vw,200px);background:var(--paper-2);border:1px solid var(--line);border-top:3px solid var(--red);border-radius:10px;padding:12px 14px;box-shadow:var(--shadow);text-align:center}\n.slide[data-track=\"build\"] .cycle-node{border-top-color:var(--teal)}\n.cycle-node h3{margin:0 0 3px;font-size:clamp(15px,1.5vw,18px);color:var(--ink)}\n.cycle-node p{margin:0;font-size:clamp(12.5px,1.2vw,14px);line-height:1.35;color:var(--ink-soft)}\n\n/* ---------- hierarchy ---------- */\n.hierarchy{margin-top:16px;overflow:visible}\n.hierarchy ul{position:relative;display:flex;justify-content:center;gap:0;margin:0;padding:26px 0 0;list-style:none}\n.hierarchy>ul{padding-top:0}\n.hierarchy li{position:relative;display:flex;flex-direction:column;align-items:center;padding:26px 10px 0}\n.hierarchy>ul>li{padding-top:0}\n.hierarchy li::before,.hierarchy li::after{content:\"\";position:absolute;top:0;width:50%;height:26px;border-top:2px solid var(--line-strong)}\n.hierarchy li::before{right:50%}\n.hierarchy li::after{left:50%;border-left:2px solid var(--line-strong)}\n.hierarchy li:only-child::before,.hierarchy li:only-child::after{border-top:0}\n.hierarchy li:first-child::before,.hierarchy li:last-child::after{border-top:0}\n.hierarchy li:last-child::before{border-right:2px solid var(--line-strong)}\n.hierarchy li:last-child::after{border-left:0}\n.hierarchy>ul>li::before,.hierarchy>ul>li::after{display:none}\n.hierarchy ul ul::before{content:\"\";position:absolute;top:0;left:50%;height:26px;border-left:2px solid var(--line-strong)}\n.h-node{display:flex;align-items:center;gap:12px;background:var(--paper-2);border:1px solid var(--line);border-top:3px solid var(--red);border-radius:10px;padding:12px 16px;box-shadow:var(--shadow);text-align:left;min-width:150px;max-width:240px}\n.hierarchy>ul>li>.h-node{border-top-color:var(--navy)}\n.h-node .avatar{width:44px;height:44px;border-radius:50%;object-fit:cover;flex:none}\n.h-node h3{margin:0;font-size:clamp(14px,1.4vw,17px);color:var(--ink)}\n.h-node p{margin:2px 0 0;font-size:clamp(12px,1.15vw,13.5px);line-height:1.3;color:var(--ink-soft)}\n.slide.solid .hierarchy li::before,.slide.solid .hierarchy li::after,.slide.solid .hierarchy ul ul::before{border-color:hsl(0 0% 100% / .5)}\n\n/* ---------- matrix ---------- */\n.matrix{display:grid;grid-template-columns:auto 1fr;grid-template-rows:1fr auto;gap:10px;margin-top:12px;max-width:980px}\n.mx-y{grid-row:1;display:flex;flex-direction:column-reverse;justify-content:space-between;align-items:center;writing-mode:vertical-rl;transform:rotate(180deg);font-size:13px;color:var(--ink-faint);font-family:var(--font-mono);letter-spacing:.04em}\n.mx-y b,.mx-x b{color:var(--ink);font-family:var(--font-body);letter-spacing:.08em;text-transform:uppercase;font-size:12px}\n.mx-grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:10px}\n.mx-x{grid-column:2;display:flex;justify-content:space-between;font-size:13px;color:var(--ink-faint);font-family:var(--font-mono);letter-spacing:.04em}\n.mx-q{background:var(--paper-2);border:1px solid var(--line);border-radius:12px;padding:16px 18px;box-shadow:var(--shadow);min-height:clamp(110px,17vh,170px);text-align:left}\n.mx-q h3{margin:0 0 8px;font-size:clamp(15px,1.5vw,19px);color:var(--ink)}\n.mx-q ul{margin:0;padding-left:18px;color:var(--ink-soft);font-size:clamp(13px,1.3vw,15.5px);line-height:1.5}\n.mx-hl{background:var(--red);border-color:var(--red)}\n.mx-hl h3,.mx-hl ul{color:#fff}\n\n/* ---------- tiers ---------- */\n.tiers{list-style:none;margin:18px auto 0;padding:0;display:flex;flex-direction:column;gap:8px;max-width:880px}\n.tiers li{display:grid;grid-template-columns:1fr minmax(160px,.55fr);align-items:center;gap:22px}\n.tier-bar{width:var(--w);justify-self:center;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 22px;border-radius:6px;color:#fff;background:color-mix(in srgb,var(--red) calc(100% - var(--i) * 14%),var(--navy))}\n.slide[data-track=\"build\"] .tier-bar{background:color-mix(in srgb,var(--teal-fill) calc(100% - var(--i) * 14%),var(--navy))}\n.tier-label{font-weight:700;font-size:clamp(15px,1.55vw,19px)}\n.tier-bar b{color:#fff;font-family:var(--font-display);font-size:clamp(18px,2vw,26px)}\n.tier-note{margin:0;font-size:clamp(13px,1.3vw,15.5px);color:var(--ink-soft);text-align:left}\n.slide.solid .tier-note{color:hsl(0 0% 100% / .85)}\n\n/* ---------- image hotspots ---------- */\n.hs-layout{display:grid;grid-template-columns:1.5fr 1fr;gap:clamp(20px,3vw,40px);align-items:center}\n@media (max-width:840px){.hs-layout{grid-template-columns:1fr}}\n.hs-layout .diagram-shot{margin:0}\n.hs-wrap{position:relative;display:inline-block;max-width:100%}\n.hs-wrap img{display:block;max-height:62vh;width:auto;max-width:100%}\n.hs-mark{position:absolute;transform:translate(-50%,-50%);width:30px;height:30px;border-radius:50%;background:var(--red);color:#fff;font-family:var(--font-mono);font-weight:700;font-size:13px;display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 3px #fff,0 4px 10px rgba(0,0,0,.3)}\n.hs-legend{margin:0;padding:0;list-style:none;counter-reset:hs;display:flex;flex-direction:column;gap:12px;text-align:left}\n.hs-legend li{counter-increment:hs;position:relative;padding-left:42px;font-size:clamp(14px,1.45vw,17px);line-height:1.4;color:var(--ink-soft)}\n.hs-legend li::before{content:counter(hs);position:absolute;left:0;top:-2px;width:28px;height:28px;border-radius:50%;background:var(--red);color:#fff;font-family:var(--font-mono);font-weight:700;font-size:12.5px;display:flex;align-items:center;justify-content:center}\n.hs-legend b{display:block;color:var(--ink)}\n.slide.solid .hs-legend li{color:hsl(0 0% 100% / .85)}\n.slide.solid .hs-legend b{color:#fff}\n\n/* ---------- video / embed ---------- */\n.media-frame{position:relative;margin:8px auto 0;width:min(100%,calc(62vh * 16 / 9));aspect-ratio:16/9;border-radius:12px;overflow:hidden;background:var(--navy);box-shadow:0 18px 40px -18px rgba(0,0,0,.45)}\n.media-frame.aspect-4x3{aspect-ratio:4/3;width:min(100%,calc(62vh * 4 / 3))}\n.media-frame.aspect-1x1{aspect-ratio:1;width:min(100%,62vh)}\n.media-frame.aspect-tall{aspect-ratio:9/14;width:min(100%,calc(64vh * 9 / 14))}\n.media-poster{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}\n.media-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0;background:#fff;z-index:3}\n.media-fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:28px;background:linear-gradient(180deg,hsl(196 100% 8% / .25),hsl(196 100% 8% / .6));z-index:2}\n.media-frame.live .media-fallback{display:none}\n.play-badge{width:84px;height:84px;border-radius:50%;background:var(--red);color:#fff;font-size:34px;display:flex;align-items:center;justify-content:center;padding-left:6px;box-shadow:0 8px 24px rgba(0,0,0,.35)}\n.media-qr{background:#fff;border-radius:12px;padding:12px;text-align:center;width:150px;box-shadow:var(--shadow)}\n.media-qr svg{width:100%;height:auto;display:block}\n.media-qr a{display:block;margin-top:8px;font-family:var(--font-mono);font-size:10.5px;color:var(--ink);text-decoration:none;overflow-wrap:anywhere}\n.media-open{position:absolute;right:10px;top:10px;z-index:4;font-family:var(--font-mono);font-size:11.5px;background:hsl(0 0% 100% / .92);color:var(--ink);padding:5px 9px;border-radius:6px;text-decoration:none;opacity:.85}\n.media-open:hover{opacity:1}\n.has-media .shot-cap{text-align:center}\n\n/* ---------- compare ---------- */\n.compare{position:relative;margin:8px auto 0;width:min(100%,calc(62vh * 16 / 10));aspect-ratio:16/10;border-radius:12px;overflow:hidden;box-shadow:var(--shadow);user-select:none}\n.compare img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}\n.cmp-before-clip{position:absolute;inset:0;clip-path:inset(0 calc(100% - var(--pos)) 0 0)}\n.cmp-handle{position:absolute;top:0;bottom:0;left:var(--pos);width:3px;margin-left:-1.5px;background:#fff;box-shadow:0 0 12px rgba(0,0,0,.4);pointer-events:none}\n.cmp-handle::after{content:\"◀ ▶\";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;color:var(--ink);font-size:11px;padding:8px 10px;border-radius:999px;white-space:nowrap;box-shadow:var(--shadow)}\n.cmp-range{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:ew-resize;margin:0}\n.cmp-label{position:absolute;bottom:12px;z-index:2;font-family:var(--font-mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;background:hsl(196 100% 8% / .72);color:#fff;padding:5px 10px;border-radius:5px}\n.cmp-label--before{left:12px}\n.cmp-label--after{right:12px}\n\n/* ---------- chrome: idle, kiosk, overview, presenter ---------- */\nbody.has-foot .hud,body.has-foot .hint{bottom:40px}\n.hud,.hint,.dots,.rail{transition:opacity .4s}\nbody.idle .hud,body.idle .hint,body.idle .dots{opacity:0}\nbody.kiosk .hud,body.kiosk .hint,body.kiosk .dots{display:none}\nbody.kiosk .deck{cursor:none}\n.overview{position:fixed;inset:0;z-index:80;background:hsl(196 100% 6% / .94);display:flex;flex-wrap:wrap;align-content:flex-start;gap:16px;padding:40px 48px;overflow-y:auto}\n.ov-item{position:relative;padding:0;border:2px solid transparent;border-radius:8px;background:none;cursor:pointer}\n.ov-item:hover,.ov-item:focus-visible{border-color:#fff;outline:0}\n.ov-current{border-color:var(--red)}\n.ov-thumb{position:relative;overflow:hidden;border-radius:6px;background:var(--paper)}\n.ov-item>span{position:absolute;left:6px;bottom:6px;font-family:var(--font-mono);font-size:11px;background:hsl(196 100% 6% / .8);color:#fff;padding:2px 6px;border-radius:4px}\nbody.presenter{margin:0;height:100vh;display:grid;grid-template-rows:1fr auto;background:#0b1d24;color:#fff;font-family:var(--font-body)}\n.pv-main{display:grid;grid-template-columns:2fr 1fr;gap:20px;padding:20px;min-height:0}\n.pv-cur,.pv-next{position:relative;min-width:0}\n.pv-cur .ov-thumb,.pv-next .ov-thumb{box-shadow:0 10px 30px rgba(0,0,0,.4)}\n.pv-side{display:flex;flex-direction:column;gap:12px;min-width:0}\n.pv-label{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:hsl(0 0% 100% / .6)}\n.pv-clock{margin-top:auto;display:flex;flex-direction:column;gap:4px;font-family:var(--font-mono)}\n.pv-elapsed{font-size:46px;font-weight:700;color:#fff}\n.pv-time,.pv-count{color:hsl(0 0% 100% / .7);font-size:14px}\n.pv-notes{border-top:3px solid var(--red);padding:16px 24px 22px;max-height:34vh;overflow-y:auto;background:var(--navy)}\n.pv-notes .notes__body{font-size:19px;max-width:none}\n.pv-cue{margin-left:12px;color:hsl(0 0% 100% / .5)}\n\n@media print{\n .slide-foot{position:absolute}\n [data-build] .b-item.b-hidden{opacity:1;transform:none}\n .media-frame iframe{display:none}\n .media-frame .media-fallback{display:flex!important}\n .cmp-before-clip{clip-path:inset(0 50% 0 0)}\n .overview,.hidden-badge{display:none}\n}\n`;\n","import YAML from 'yaml';\n\n/** Parses deck source text. YAML is a superset of JSON, so both work. */\nexport function parseDeckSource(text: string): unknown {\n return YAML.parse(text, { prettyErrors: true });\n}\n\n/** Serializes a deck back to YAML, the human-editable format. */\nexport function stringifyDeck(deck: unknown): string {\n return YAML.stringify(deck, {\n lineWidth: 0,\n defaultStringType: 'PLAIN',\n defaultKeyType: 'PLAIN',\n });\n}\n","/**\n * Rewrites every image src in a deck: inline them as data URIs for a portable\n * single-file export, or swap data URIs for hosted URLs on import.\n */\nimport type { ImageResolver } from './render.js';\nimport { DeckError, validateDeck, type ValidateOptions } from './validate.js';\n\ntype Path = (string | number)[];\n\nexport interface MapImagesOptions extends ValidateOptions {\n /** Images rewritten at once. Default 4. */\n concurrency?: number;\n}\n\nexport interface InlineImagesResult {\n /** A copy of the input deck with image srcs replaced. */\n deck: unknown;\n /** Images left as they were because the resolver failed. */\n warnings: { src: string; message: string }[];\n}\n\n/** Paths to every image object (any object with a string `src`) in a validated deck. */\nfunction imagePaths(value: unknown, path: Path = [], out: Path[] = []): Path[] {\n if (Array.isArray(value)) value.forEach((v, i) => imagePaths(v, [...path, i], out));\n else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n if (typeof obj.src === 'string') out.push(path);\n for (const [k, v] of Object.entries(obj)) imagePaths(v, [...path, k], out);\n }\n return out;\n}\n\n/**\n * Calls `fn` once per distinct image src and returns a copy of `input` with\n * each src replaced by the result. The deck is validated first so images\n * written as plain strings (`image: photo.jpg`) are found too; the copy keeps\n * the author's shape (strings stay strings, no schema defaults are added).\n * Throws `DeckError` if the deck is invalid, or the first error from `fn`.\n */\nexport async function mapDeckImages(\n input: unknown,\n fn: (src: string) => string | Promise<string>,\n options: MapImagesOptions = {}\n): Promise<unknown> {\n const result = validateDeck(input, options);\n if (!result.ok || !result.deck) throw new DeckError(result.issues);\n\n const paths = imagePaths(result.deck);\n const deck = structuredClone(input) as Record<string, unknown>;\n const read = (path: Path) =>\n path.reduce<unknown>((node, key) => (node as Record<string | number, unknown>)[key], deck);\n\n const sources = [\n ...new Set(\n paths.map((p) => {\n const node = read(p);\n return typeof node === 'string' ? node : (node as { src: string }).src;\n })\n ),\n ];\n const replaced = new Map<string, string>();\n let next = 0;\n await Promise.all(\n Array.from({ length: Math.min(options.concurrency ?? 4, sources.length) }, async () => {\n while (next < sources.length) {\n const src = sources[next++];\n replaced.set(src, await fn(src));\n }\n })\n );\n\n for (const path of paths) {\n const node = read(path);\n if (typeof node === 'string') {\n const parent = read(path.slice(0, -1)) as Record<string | number, unknown>;\n parent[path[path.length - 1]] = replaced.get(node)!;\n } else {\n const img = node as { src: string };\n img.src = replaced.get(img.src)!;\n }\n }\n return deck;\n}\n\n/**\n * Inlines every image as a data URI so the deck is one self-contained file.\n * Images the resolver can't load are left as-is and reported in `warnings`.\n */\nexport async function inlineDeckImages(\n input: unknown,\n resolve: ImageResolver,\n options: MapImagesOptions = {}\n): Promise<InlineImagesResult> {\n const warnings: InlineImagesResult['warnings'] = [];\n const deck = await mapDeckImages(\n input,\n async (src) => {\n if (/^data:/i.test(src)) return src;\n try {\n return await resolve(src);\n } catch (e) {\n warnings.push({ src, message: e instanceof Error ? e.message : String(e) });\n return src;\n }\n },\n options\n );\n return { deck, warnings };\n}\n\n/**\n * Replaces every data-URI image with the src `upload` returns (e.g. a hosted\n * URL). Other srcs are untouched. Errors from `upload` are thrown.\n */\nexport function externalizeDeckImages(\n input: unknown,\n upload: (dataUri: string) => string | Promise<string>,\n options: MapImagesOptions = {}\n): Promise<unknown> {\n return mapDeckImages(input, (src) => (/^data:/i.test(src) ? upload(src) : src), options);\n}\n"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACT1B,IAAM,WAAW,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuTxB,IAAM,iBAAiB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["z","z","colors","colors","z","z","colors","plain","q","z","image","z","z","z","z","z","z","z","z","z","z","z","journey","QRCode","image","QRCode","issues","img"]}
|