/* * Baked nine-slice texture generated by * desktop/scripts/texture-card/generate-card-texture.mjs. * * The source is 2×: 416 asset pixels = 208 CSS pixels. The image includes a * 96 CSS-pixel transparent outer powder band. `border-image` keeps corners * fixed and repeats edge texture while the white center fills any card size. */ .buzz-card-textured { --buzz-card-textured-source: url("./assets/card-texture.png"); --buzz-card-textured-slice: 416; --buzz-card-textured-width: 208px; --buzz-card-textured-outset: 96px; --buzz-card-textured-min-size: 224px; /* * The asset has three zones, from outside in: * 1. transparent powder bleed (outside the layout box, via outset) * 2. feathered fade (inside the layout edge, white is NOT fully opaque) * 3. solid white center (safe for content) * * `--buzz-card-textured-safe-inset` is the distance from the layout edge * to zone 3. `Card variant="textured"` applies it as default padding so * content always lands on solid fill. Features may add more padding, * never less — and must never layer an opaque surface on top of the * texture; the baked white center IS the surface. */ --buzz-card-textured-safe-inset: 5rem; border: 0 solid transparent; /* * Each border-image band is 208px wide but extends 96px outside the layout * box (outset), leaving 112px per edge inside it. Below 224px (2 × 112px) * on either axis the opposing bands collapse into each other: the solid * white center region disappears and the bands meet on a semi-transparent * row of the fade, which shows the page background through as a thin seam * line. Keep 224px as the default floor. Compact decorative cards may opt * into a smaller height with `--buzz-card-textured-min-height` when the * center seam is acceptable for that deliberately compressed surface. */ min-height: var( --buzz-card-textured-min-height, var(--buzz-card-textured-min-size) ); min-width: var( --buzz-card-textured-min-width, var(--buzz-card-textured-min-size) ); border-image-source: var(--buzz-card-textured-source); border-image-slice: var(--buzz-card-textured-slice) fill; border-image-width: var(--buzz-card-textured-width); border-image-outset: var(--buzz-card-textured-outset); border-image-repeat: repeat; } /* Dark backup surfaces use a separately baked fill so their content stays * bright; applying `filter: brightness()` to the element would dim children. */ .buzz-card-textured-dark { --buzz-card-textured-source: url("./assets/card-texture-dark.png"); } /* * Popovers, confirmations, and compact callouts need the same powder edge * without the full card's 96px bleed or 224px floor. This independently baked * nine-slice keeps the edge legible at overlay scale. */ .buzz-card-textured-compact { --buzz-card-textured-source: url("./assets/card-texture-compact.png"); --buzz-card-textured-slice: 136; --buzz-card-textured-width: 68px; --buzz-card-textured-outset: 24px; --buzz-card-textured-safe-inset: 1.75rem; --buzz-card-textured-min-size: 136px; } .buzz-card-textured-dark.buzz-card-textured-compact { --buzz-card-textured-source: url("./assets/card-texture-dark-compact.png"); }