Follow these guidelines to make sure your theme will be accepted by ImpressPages Market. If your theme doesn't meet some of the requirements, it might be not approved.
Consistent layout and style
Theme should look beautiful, consistent, stylish. There have to be no broken elements, missing styles, etc.
Styles for all default widgets
The theme has to cover the styling for all widgets that are in ImpressPages by default. For example, before submitting the theme, please check the Contact form, Image gallery, Table and other ImpressPages widgets. If you are using the default ipContent CSS you should be fine, unless you break some styles with your custom CSS. If you write the whole CSS from scratch, be sure to cover all widgets.
Valid HTML and CSS
There are some cases when some HTML or CSS mistakes can be tolerated. Different validators often give different results on the same code. However generally speaking, there can't be any critical HTML or CSS errors that can lead to broken website.
Responsiveness
These days mobile access is must have. Make sure that your theme is easy to browse on mobile devices. Default widget styles, provided as ipContent CSS, are fully responsive by default. So it is really easy to make your layout responsive too.
No JavaScript errors
Even a small JavaScript error might lead to unusable website. No JavaScript errors can be tolerated. Don't include your own jQuery version. Use the one that comes with ImpressPages. Include the use strict statement in your JavaScript everywhere possible, but avoid forcing strict mode in the global scope. Use it inside each function.
No hardcoded domain or theme folder names
Do not use hardcoded website URLs or theme folder names. The domain and theme folder name on user computer might be different. Use BASE_URL, THEME_DIR and THEME constants instead.
Meet all license requirements
You can choose one of following licenses for your theme: GPL, MIT, ImpressPages commercial. If your theme contains any third party code, make sure to state it clearly in your theme and ensure that combined code licenses are compatible.
Use as less PHP code as possible
Themes are all about HTML and CSS. Use PHP code only where it is appropriate. Especially in no cases you should use some specific PHP functions that might not exist or be restricted on some server configurations. If you really need to use something like that, check if that functionality is available on that server and implement the fallback.
Naming conventions
Standard menu names
By default, ImpressPages CMS has three menus: menu1, menu2, menu3. The theme might have any number of menus, but all of them must follow the same naming pattern.
Standard inline managed elements names
Homepage often has one or few lines of text, like slogan, etc. Give them unique key names for these web page elements according the following naming convention:
For managedString elements string1, string2, string3, ...
For managedText elements - text1, text2, text3, ...
For managed images - image1, image2, image3, ...
Usually the elements mentioned above appear on the header. The element named image1 doesn't have to be related to elements text1 or string1. These elements are not related. You might have two string elements, one inline image and they are not related in any way.
If you need to group some elements, where managedImage goes together with managedString as a title of that image and managedText as description of it, use the same name group1 for all elements (for string, text and image). If you have several such groups, use the names group1, group2, group3, ... .
Consistent naming across themes is very important as it gives user ability to switch themes preserving as much of old content as possible.
Block names
Each layout of the theme (including homepage) must have a block with the main key. If you want to put additional blocks on homepage, call them home1, home2, ... . Usually these blocks are used as small boxes on a home page. If you have additional blocks on internal pages, call them side1, side2, ... .
Configuration
The theme must have at least minimal configuration options, e.g. a color selection. You are free to include any options you like.
Required theme elements
Browser differences are tolerated
Differences between browsers due different CSS3 support or browser bugs are acceptable as long as they are not critical to usability.