Pages & templates

Building CSS-first pages (no custom JavaScript)

Pages you bring into the portal through a bulk (ZIP) import cannot contain custom JavaScript. If they do, the page is rejected and does not import at all. This guide explains the rule, the one exception, and the CSS and built-in alternatives to use so your pages come in cleanly and behave exactly as you designed.

The rule, in one line

For security and compliance, a page imported through a bulk (ZIP) upload may not include custom JavaScript anywhere in the page — not in the <head> and not in the <body>.

It fails silently, and the whole page is lost. A page containing a hand-written <script> is not partially imported with the script stripped out — the entire page is rejected and simply does not appear. If a page you expected is missing after an import, a custom script is the most likely reason.
What happens to a page on import A page containing custom JavaScript is rejected on import and goes missing. A page built with CSS only, or with just JSON-LD schema, imports successfully. ZIP import validates each page Page with custom <script> … </script> ✗ Rejected page does not import — it goes missing Page with CSS only (or only JSON-LD schema) ✓ Imports fine appears and works as designed
Custom JavaScript stops the whole page importing. CSS-only pages (and JSON-LD schema) come through cleanly.

The one exception: structured data

Structured data for search engines is unaffected. A <script type="application/ld+json"> block (JSON-LD schema, which lives in the <head>) is the only script that is allowed, and it keeps working exactly as before. You never need to remove your schema. See Social & Sharing for how schema is handled for you.

Build CSS-first instead

Almost everything people reach for JavaScript to do on a marketing page can be done with CSS, or with a built-in CMS placeholder whose own script is added by the platform (not written into your page). Building this way keeps your pages fast and makes sure they import without a hitch.

When you want to…Avoid (custom JavaScript)Do this instead
A mobile menu / hamburger drawer A script that toggles the drawer open A CSS toggle using a hidden checkbox or :target — or use the portal’s dynamic menu, whose script is injected by the CMS
Reveal content on click / show-and-hide A click handler that adds a class Native <details>/<summary>, or a CSS :checked / :target pattern
Animations and transitions A JavaScript animation loop CSS transition, @keyframes, and scroll-driven CSS animation
Hover / focus effects and tabs Event listeners :hover, :focus-within, :has(), and CSS tabs
Your logo, menus, or login / join buttons Custom code to build them The built-in {{…}} CMS placeholders — the platform supplies any script they need
Building with the agentic toolkit? As of toolkit v1.4.0 it steers builds CSS-first for you: it defaults to static pages, warns before it would add any custom JavaScript, and offers a CSS or placeholder alternative. See What’s New in the Agentic Toolkit and Deep dive: Menus.

If you really need JavaScript

Some pages genuinely need custom scripting that CSS cannot cover. If that is you, talk to your account manager before importing — they can advise on the right approach and arrange a JavaScript allowance for your account where appropriate, so you are not caught out by a page silently going missing.

Quick checklist before importing