Questa guida documenta come scrivere il CSS personalizzato del layer. Ci sono due voci distinte nella configurazione, entrambe iniettate nel layer a runtime:
| Voce di config | Dove si trova | Cosa personalizza |
|---|---|---|
customCss |
builderConfig.layerConfig.customCss (campo Custom CSS dell’AccelaSearch Builder) |
Tutto il layer tranne le card prodotto: header, barra di ricerca, vetrina, filtri, griglia, stati di caricamento (§4–§11, §13–§14) |
cardCustomCss |
root della configurazione (accanto a shopId, baseUrl, …) |
Le card prodotto di default (§12) |
Ambito delle card La §12 documenta la card di default, cioè quella mostrata quando il Card Builder è spento (o acceso ma senza blocchi configurati). Le card generate dal Card Builder hanno un flusso di stile separato e non sono trattate qui.
Non stai cercando i componenti
<as-*>, vero? Questa guida riguarda il layer (<accelasearch-layer>), personalizzato dal campo Custom CSS del Builder. Se invece stai integrando i componenti<as-*>nel markup di un tema (Shopify o altro), quelli si personalizzano solo tramite i design token e la guida è STYLING.md — le classi documentate qui non li raggiungono.
Il layer è un Web Component (<accelasearch-layer>) che usa lo Shadow DOM.
Questo significa due cose fondamentali:
customCss non
esce dal layer per influenzare la pagina. Stai scrivendo CSS che vive solo
dentro il layer.customCss (e il cardCustomCss) viene iniettato per ultimo.
Ciascuno viene aggiunto come blocco <style> in fondo allo Shadow DOM, dopo
gli stili di base del componente.
Per le regole dell’ordine di cascata CSS, questo significa che a parità di
specificità il tuo CSS vince sugli stili predefiniti. Nella maggior parte
dei casi ti basta scrivere il selettore di classe (es. .as-layer { ... })
senza dover ricorrere a !important..as-header, .icebreaker-chip, ecc.). Sei già dentro lo Shadow DOM.!important solo se necessario, ad esempio per sovrascrivere stili
applicati inline via JavaScript (vedi la nota su as-main/product-grid)./* Sfondo del layer leggermente grigio e padding ridotto */
.as-layer {
background: #fafafa;
padding: 1.5rem;
}
/* Bottoni filtro più arrotondati */
.action-btn {
border-radius: 999px;
}
Questa è la gerarchia degli elementi e delle classi principali. Conoscere
l’annidamento ti permette di scrivere selettori discendenti precisi
(es. .as-main .product-grid).
<accelasearch-layer> (host, Shadow DOM)
└── #accelasearch-root (mount point React)
└── .as-backdrop [.full-screen|.half-screen|.windowed]
└── .as-layer (dialogo principale)
├── .as-loading-overlay (solo durante il caricamento config)
│ └── .as-spinner
├── .as-header
│ ├── .search-bar (SearchBar)
│ └── .close-btn
├── .showcase (vetrina iniziale)
├── .action-bar (barra azioni: filtri + ordinamento)
└── .as-container
├── .filter-panel [.filter-panel--open]
│ └── .filter-panel__inner
│ ├── .filter-panel__mobile-header (solo mobile)
│ └── .filter-panel__accordions
│ └── .filter-accordion … (un filtro per ciascuno)
└── .as-main
├── .icebreakers (chip categorie)
└── .product-grid (griglia risultati)
├── .product-grid__list (← contiene le CARD)
├── .product-grid__state (vuoto / errore / loading)
└── .product-grid__loader (loader paginazione)