// decorative.jsx — Decorative elements & patterns (expanded).
// Reusable visual vocabulary for the institutional site, posters,
// social, certificates, receipts.
const FIVE = ['var(--ceu)', 'var(--ceramica)', 'var(--sol)', 'var(--rosa)', 'var(--folha)'];
// ────────────────────────────────────────────────────────────────
// CATEGORY · DIVIDERS — discrete units between content blocks
// ────────────────────────────────────────────────────────────────
// 01 — Five Dots
function DecFiveDots({ size = 10, gap = 12, colors = FIVE }) {
return (
{colors.map((c, i) => (
))}
);
}
// 02 — Five Triangles
function DecFiveTriangles({ size = 16, gap = 5 }) {
return (
);
}
// 03 — Five Squares (rotated 45°)
function DecFiveDiamonds({ size = 12, gap = 8 }) {
return (
{FIVE.map((c, i) => (
))}
);
}
// 04 — Five Bars (varying heights — references the original child drawing)
function DecFiveBars({ unit = 8, gap = 4, max = 5 }) {
const heights = [3, 5, 5, 2, 4];
return (
{FIVE.map((c, i) => (
))}
);
}
// 05 — Roof Rule (horizontal rule with house-roof apex)
function DecRoofRule({ width = 280, height = 28, color = 'var(--ink)' }) {
const mid = width / 2;
return (
);
}
// 06 — Five Roof Rule (5 small roofs centered)
function DecFiveRoofs({ unit = 16, gap = 6 }) {
return (
);
}
// 07 — Section Mark (small house silhouette · use before section labels)
function DecSectionMark({ size = 18 }) {
return (
);
}
// ────────────────────────────────────────────────────────────────
// CATEGORY · LINE ART — long-form decoration for marginalia, page edges
// ────────────────────────────────────────────────────────────────
// 08 — Caminho (winding dashed path with sun)
function DecPath({ width = 280, height = 60, sun = true }) {
return (
);
}
// 09 — Vertical caminho — same path rotated, for page margins
function DecPathVertical({ width = 60, height = 280 }) {
return (
);
}
// 10 — Quote marks (large editorial quote)
function DecQuoteMark({ size = 80, color = 'var(--sol)' }) {
return (
);
}
// 11 — Page corner ornament (top-left)
function DecCornerOrnament({ size = 60, position = 'tl' }) {
// position: tl, tr, bl, br
const rotate = { tl: 0, tr: 90, br: 180, bl: 270 }[position];
return (
);
}
// ────────────────────────────────────────────────────────────────
// CATEGORY · RAYS / SUN — light motifs
// ────────────────────────────────────────────────────────────────
// 12 — Sunburst (rays from a corner)
function DecSunburst({ size = 220, origin = 'bl' }) {
let cx = 0, cy = size;
if (origin === 'br') { cx = size; cy = size; }
if (origin === 'tl') { cx = 0; cy = 0; }
if (origin === 'tr') { cx = size; cy = 0; }
if (origin === 'c') { cx = size / 2; cy = size / 2; }
return (
);
}
// 13 — Single sun (sol) symbol
function DecSun({ size = 60, rays = true }) {
return (
);
}
// 14 — Half-sun (horizon line)
function DecHalfSun({ width = 140, height = 70 }) {
return (
);
}
// ────────────────────────────────────────────────────────────────
// CATEGORY · PATTERNS — full tile fills
// ────────────────────────────────────────────────────────────────
// 15 — Roof pattern
function DecPatternRoofs({ density = 40, opacity = 0.35 }) {
return (
);
}
// 16 — Dots pattern (palette dots scattered on a grid)
function DecPatternDots({ tile = 32 }) {
return (
);
}
// 17 — Path pattern (winding caminhos repeated)
function DecPatternPath() {
const tile = 80;
return (
);
}
// 18 — Houses+dots pattern (richer fill)
function DecPatternHouses() {
const tile = 80;
return (
);
}
// 19 — Cross-stitch grid pattern (referencing the embroidery feel)
function DecPatternStitch() {
const tile = 18;
return (
);
}
// ────────────────────────────────────────────────────────────────
// CATEGORY · BIGGER SCENES
// ────────────────────────────────────────────────────────────────
// 20 — Skyline of small houses (used in footers, hero backgrounds)
function DecSkyline({ width = 1080, height = 80 }) {
// SVG dims match container — no preserveAspectRatio crop. Houses sit on
// the baseline; total house height < container height, so roofs always
// have headroom.
const baseline = height - 2;
const houses = [
{ x: 30, w: 36 }, { x: 85, w: 44 }, { x: 145, w: 56 },
{ x: 215, w: 42 }, { x: 275, w: 48 }, { x: 340, w: 38 },
{ x: 395, w: 52 }, { x: 465, w: 44 }, { x: 525, w: 50 },
{ x: 590, w: 40 }, { x: 645, w: 56 }, { x: 715, w: 38 },
{ x: 770, w: 50 }, { x: 835, w: 44 }, { x: 895, w: 56 },
{ x: 965, w: 40 }, { x: 1020, w: 48 },
];
return (
);
}
// 21 — Constellation of children figures (decorative scatter)
function DecConstellation({ width = 600, height = 200 }) {
const figures = [
{ x: 60, y: 70, h: 26, c: FIVE[0] },
{ x: 130, y: 130, h: 36, c: FIVE[1] },
{ x: 200, y: 60, h: 22, c: FIVE[2] },
{ x: 280, y: 150, h: 30, c: FIVE[3] },
{ x: 350, y: 90, h: 40, c: FIVE[4] },
{ x: 430, y: 140, h: 32, c: FIVE[0] },
{ x: 510, y: 70, h: 24, c: FIVE[1] },
{ x: 560, y: 130, h: 36, c: FIVE[2] },
];
return (
);
}
// ────────────────────────────────────────────────────────────────
// Showcase artboard — lays everything out for review
// ────────────────────────────────────────────────────────────────
function DecorativeShowcase() {
const Group = ({ label, children }) => (
);
return (
Elementos decorativos
21 unidades
);
}
function DecorativePatternShowcase() {
return (
Padrões
5 tiles
{[
{ label: '15 · Telhados', el:
},
{ label: '16 · Cinco cores', el:
},
{ label: '17 · Caminhos', el:
},
{ label: '18 · Casas + cores', el:
},
{ label: '19 · Ponto-cruz', el:
},
].map((p, i) => (
))}
);
}
Object.assign(window, {
DecFiveDots, DecFiveTriangles, DecFiveDiamonds, DecFiveBars,
DecRoofRule, DecFiveRoofs, DecSectionMark,
DecPath, DecPathVertical, DecQuoteMark, DecCornerOrnament,
DecSunburst, DecSun, DecHalfSun,
DecPatternRoofs, DecPatternDots, DecPatternPath, DecPatternHouses, DecPatternStitch,
DecSkyline, DecConstellation,
DecorativeShowcase, DecorativePatternShowcase,
DEC_FIVE: FIVE,
});