How sass_v2, template defaults, Databoard field CSS, Databoard Sass, utility generation, and the agent API connect into one generated-site styling system.
Copy this prompt to ChatGPT, Claude, or any AI — it will understand ANTSAND's Databoard styling system and walk you through it.
ANTSAND styling is intentionally layered. Agents should decide which layer owns a change before writing CSS. This keeps framework work reusable while allowing each generated site to have full page, section, and field-level control.
styles_antsand/sass_v2 defines shared tokens, components, utilities, patterns, and theme presets used across many generated sites.
parameter_files.json defines the default class slots and starting classes for every section template and field.
common_init_modern.volt reads saved Databoard CSS JSON and creates variables like data_h3_class, data_p_class, and section_container_class.
service_3_modern.volt and component renderers apply those variables to the fixed Header/Body/Footer HTML hierarchy.
The UI stores per-page, per-section, and per-field classes such as section.container, data.container, data.sub_container, data.h3, data.p, and data.cta.
The board-level Sass editor owns one website's branding, page CSS, custom section classes, and overrides. This is site-specific CSS, not shared sass_v2 framework code.
The Databoard utility scanner reads saved css_class values and generates board-local _utilities.scss for Tailwind-like classes used by that site.
Agents can inspect a board, patch HMVC/list/menu/Sass, compile utilities, deploy, and smoke-test without manually clicking every UI knob.
parameter_files.json.section.container or the section root.data.container, data.sub_container, and data.content_wrapper.data.h3, data.p, data.img_container, data.img, or data.cta.
Step 1: Global utility classes are defined in sass_v2/foundation/_utilities.scss and compiled into antsand-v2.css.
Step 2: antsand-v2.css is served from the CDN (styles.antsand.com) and loaded by all generated sites.
Step 3: In Databoard, agents and users assign class names to fields via the CSS panel (e.g., data.h3 = "line-clamp-2 md:text-xl").
Step 4: The Databoard Sass scanner reads all css_class values from the datalist and detects which utilities are used.
Step 5: Board-specific utility rules (not in the global library) are written to a site-local _utilities.scss during Databoard Sass generation/compile before deployment.
ANTSAND uses semantic classes first, utility classes second. Every section needs a design identity (Tier 1) before fine-tuning (Tier 2).
Define what a section IS. One root class + descendant selectors per section.
Enhance individual fields within a Tier 1 structure. Never use alone.
When a site needs utility-like rules that don't belong in the global library, the Databoard
Sass scanner generates a site-local _utilities.scss during Databoard Sass generation/compile.
How to combine Tier 1 + Tier 2 in Databoard field mappings for common section types.
These classes are defined in sass_v2/foundation/_utilities.scss, compiled into antsand-v2.css,
and available on all generated sites via the CDN. Safe to use in any Databoard field.
| Category | Classes | Typical Databoard Field |
|---|---|---|
| Spacing | p-1..p-8, px-*, py-*, m-1..m-8, mx-auto, gap-1..gap-8 |
data.container, section.container |
| Display | block, hidden, flex, grid, inline-flex |
data.container, data.span_container |
| Flexbox | flex-row, flex-col, flex-wrap, items-center, justify-between |
data.container, header.container |
| Typography | text-sm..text-5xl, font-bold, font-semibold, text-center |
data.h3, data.p, header.h1 |
| Line Clamp | line-clamp-1..line-clamp-5, truncate |
data.h3, data.p, data.description |
| Opacity | opacity-0, opacity-25, opacity-50, opacity-75, opacity-100 |
data.p, data.span, footer.p |
| Aspect Ratio | aspect-video (16:9), aspect-square (1:1), aspect-photo (4:3), aspect-portrait (3:4) |
data.img_container |
| Object Fit | object-cover, object-contain, object-center, object-top |
data.img |
| Borders | rounded, rounded-lg, rounded-full, border, border-0 |
data.sub_container, data.img |
| Shadows | shadow-sm, shadow, shadow-md, shadow-lg, shadow-xl |
data.sub_container, data.content_wrapper |
| Transitions | transition-all, transition-colors, transition-opacity, duration-200..duration-500 |
data.sub_container, data.cta |
| Hover | hover:scale-105, hover:-translate-y-1, hover:shadow-lg, hover:opacity-100 |
data.sub_container, data.cta |
| Backdrop | backdrop-blur, backdrop-blur-lg, bg-white/85, bg-black/50 |
header.section, overlay elements |
| Divide / Space | divide-y, divide-x, space-y-2..space-y-8, space-x-2..space-x-4 |
data.container, footer.container |
| Focus / Ring | ring, ring-primary, focus:ring, focus-visible:ring |
form inputs, data.cta |
| Animation | animate-fade-in, animate-slide-up, animate-spin, animate-pulse |
data.sub_container, loading states |
| Scroll | scroll-smooth, snap-x, snap-start, scrollbar-hide |
data.container (carousel sections) |
| Height | min-h-screen, max-h-[500px], h-screen, h-[50vh] |
section.container, data.img_container |
| Whitespace | whitespace-nowrap, whitespace-pre-wrap, break-words |
data.p, data.description |
Mobile-first breakpoint prefixes. Unprefixed = all screens. Prefixed = that breakpoint and up.
| Prefix | Breakpoint | Available Utilities |
|---|---|---|
sm: |
640px+ | display, grid-cols (1-3), flex |
md: |
768px+ | display, flex-direction, grid-cols (1-4), text-align, spacing (p, gap), text sizes (lg-4xl) |
lg: |
1024px+ | display, grid-cols (2-6), text-align, text sizes (2xl-5xl) |
⚠️ Semantic class first, utility class second
Every section MUST have a Tier 1 root class defining its design identity. Tier 2 utilities are modifiers on individual Databoard fields — never the primary structure.
| Do | Don't | |
|---|---|---|
| Section root | data.container = "pricing-grid antsand-grid" |
data.container = "flex flex-wrap gap-4 p-8" |
| Cards | "antsand-card shadow transition-all" |
"bg-white rounded-lg border p-4" |
| Buttons | "antsand-btn antsand-btn-primary" |
"px-4 py-2 bg-blue-500 text-white rounded" |
| Images | "aspect-video object-cover" (Tier 2 is fine for media) |
No aspect-ratio → images distort or overflow |
| Text truncation | "line-clamp-3 opacity-75" (Tier 2 for text control) |
Raw CSS style="overflow:hidden" on the field |
| Board-specific | Let Databoard Sass scanner generate site-local rules | Adding one-site rules to the global _utilities.scss |
The same styling model can be driven through the Databoard API. This is the agent-friendly path: inspect the board, patch the field classes/Sass, compile generated utilities, deploy, then smoke-test.
| Agent Goal | Best API/Layer | Why |
|---|---|---|
| Change nav/footer/classes on existing pages | /patch or /list |
Classes belong to Databoard field mappings, not hardcoded templates. |
| Add one-site CSS for ShivasNotes-style branding | Databoard Sass/common_styles | Website-specific CSS should travel with the board. |
Add utility classes like px-6 py-16 sticky top-0 |
/utilities/compile |
The compiler scans field CSS and emits board-local utility rules. |
| Create reusable class for all future sites | sass_v2 Git change | Framework-level rules should be versioned and shipped through antsand-v2.css. |
| Make a better default section template | parameter_files.json |
Template defaults seed the UI and should match runtime field aliases. |
Most utilities have both an antsand- prefixed version (Bootstrap-style)
and an unprefixed version (Tailwind-compatible). Both work — use whichever is more readable.
| ANTSAND Prefixed | Unprefixed | Effect |
|---|---|---|
antsand-text-center | text-center | text-align: center |
antsand-text-white | text-white | color: white |
antsand-flex-center | items-center justify-center | centered flex items |
antsand-shadow-lg | shadow-lg | large box-shadow |
antsand-p-4 | p-4 | padding: 1.5rem |
antsand-mb-3 | mb-3 | margin-bottom: 1rem |
antsand-rounded-lg | rounded-lg | border-radius: 0.75rem |