# Warnings

> Every warning and refusal MakoDeck can show for an upload: how its message starts, what it means, and the fix. Codes in backticks are for reference; people see only the messages.

The person pastes messages back to you — usually with **Copy for your AI** on the deck's page, which sends them as one message that quotes the deck's title and the warnings and links here. Match each by how it starts (quotes and apostrophes may be curly or straight), fix the files, re-run https://makodeck.com/ai/checklist.md, zip again, and have the person use **Replace deck** (https://makodeck.com/ai/workflow.md). “x” stands for a file, font or address the message names.

## Refused by the upload form

The form checks the file first; these messages have no code:

- "“x” isn't a supported file type" — upload a `.zip`, `.html` or `.pdf`. "“x” is a PowerPoint file" — export it to PDF.
- "“x” is a React component" (a `.jsx` or `.tsx` file, the kind Claude makes as an artifact) — build the deck as one self-contained HTML file, or a ZIP of the deck folder, instead.
- "“x” is a Keynote file" / "“x” is an OpenDocument presentation" — export it to PDF.
- "“x” is a Markdown file" — make it into an HTML deck (start from https://makodeck.com/ai/skeleton.md), or export it to PDF.
- "That file is … MB; the limit is 100 MB." / "That code is … MB" (pasted) / "That folder zips to …" — shrink images and video, or split the deck.
- "That folder comes to … with its software files" — attach fewer or smaller files.
- "Drop a single file, or a whole folder" — zip loose files, or drop their folder.
- "Skipped N files" under a chosen folder, each with its reason — the rest still uploads; fix or drop those files if they matter.

After **Publish** the site can still refuse:

- `email_unverified` "Verify your email address before uploading" — the person verifies it (Account settings).
- `rate_limited` "Too many uploads from … in the last hour" — wait the minutes it says. Each person and each network address gets 20 attempts an hour, counting refused ones, replacements, **Edit content** saves and copies (**Duplicate** and templates).
- `validation_failed` "Check the upload details." — usually an empty (0-byte) file: export it again. `invalid_size` "The file appears to be empty" is the same.
- `storage_full` "This workspace's storage is full" — a workspace owner frees space (the decks in it, their PDFs and attached files all count), or attach smaller files.
- `render_quota` (a PDF only) "This workspace has used its … renders for …" / "The Base workspaces of this workspace's owner have used their shared … renders" / "The account that made it has made … renders today" / "…has used today's render time" / "Renders are paused site-wide for today", each ending "A PDF can't be shown without one" — try again when it says, or upload the deck as HTML: an HTML or ZIP deck is never refused for renders (it publishes without thumbnails until they resume).
- `file_too_large`, `unsupported_kind`, `deck_too_large`, `sidecar_rejected` — the server's copies of the form's checks above: fix as there.
- `upload_incomplete`, `upload_expired`, `upload_conflict`, `invalid_filename`, `forbidden`, `not_found` — an unfinished or stale upload, or no access: wait, reload and retry, or ask a workspace admin.

In-app editing and copies (**Duplicate** and templates), not uploads: `attachments_unsupported` (a deck with attached files can't be edited in the app: edit the files, then **Replace deck** with **Choose a folder**), `archived`, `not_ready`, `source_missing`, `source_unreadable`, `source_conflict`, `invalid_template` — reload, or replace the deck instead. `update_processing`: another update to the deck is still processing — save again once it has finished; nothing needs reloading.

## Refused while processing

The deck's page says "This deck couldn't be processed" (for a replacement, "Your latest update couldn't be processed", and the previous copy stays live), then the message.

**The file**

- `empty_upload` "“x” is empty" — upload the file again.
- `upload_too_large`, `too_large` "… uploads can be at most 100 MB" / "This file is … MB; the limit is 100 MB" — shrink or split it.
- `unsupported_type` "This file type isn't supported" — upload a `.zip`, `.html` or `.pdf`.
- `pptx_unsupported` "PowerPoint files aren't supported yet" — export to PDF.
- `pdf_invalid` "This file isn't a PDF" — export the PDF again.
- `pdf_encrypted` "This PDF is password-protected or encrypted" — save a copy without a password or restrictions.
- `pdf_too_many_pages` "This PDF has … pages; the limit is 300" — split it.
- `pdf_no_pages` "This PDF has no pages." — export it again.
- `pdf_unreadable` "We couldn't read this PDF" — export it again (File → Save as PDF).
- `render_quota` "… have used … renders for …. A PDF can't be shown without one" — the workspace ran out of renders for the month after the PDF was uploaded: upload it again on the date it names, or as an HTML deck. (A PDF held up by a daily limit waits and finishes the next day by itself.)

"Processing failed — try uploading again" means the site gave up after retrying (for a PDF, when its reader fails: `render_failed`). Upload again; export the PDF again, or simplify the deck, if it repeats.

**The ZIP** — fix it, then zip the folder again with a standard tool (https://makodeck.com/ai/packaging.md)

- `zip_invalid` "“x” can't be opened" / "can't be read" — the ZIP is damaged.
- `zip_encrypted` "… is encrypted (password-protected)" — zip without a password.
- `zip_unsupported_compression` "… uses a compression method this site can't read" — use standard settings (deflate).
- `zip_symlink` "… is a symbolic link (alias)" — replace it with the real file.
- `zip_special_file` "… is not a regular file or folder" — remove it.
- `zip_unsafe_path` "“x” in … has …" (a bad character or name) / "is an absolute path" / "climbs out of the folder" — rename it.
- `zip_too_many_entries` "… files; a deck can have at most 500" — remove unused files and hidden folders such as `.git`.
- `zip_too_large` "… unpacks to …" — a deck can be 250 MB unzipped: shrink images and video.
- `file_too_large` "“x” in … is … unzipped" / "unpacks to more than …" — each file can be 100 MB: shrink or remove it.
- `zip_bomb` "… shares its data with another entry" / "expands more than 100 times" — zip normally; store a very repetitive file uncompressed, or remove it.
- `zip_empty` "… has no files in it" — zip the folder's contents.
- `no_entry_html` "… has no index.html" — put `index.html` at the top of the ZIP.
- `zip_reserved_path` "… has a top-level “_mako” folder" — rename the folder and the paths to it.
- `zip_duplicate` "“x” appears twice" / "The deck has “x” twice" — zip again.
- `zip_case_collision` "… differ only in upper/lower case" / "as both a file and a folder name" — rename one.
- `bundle_invalid` "The deck has a file named “x”; file names can't contain “%”, “?” or “#”" / "an unsafe path" — rename it.

**The content**

- `html_too_large` "“x” is larger than 32 MB" / "would be larger than 32 MB once normalized" — move embedded (`data:`) images, video and data into files, and upload a ZIP.
- `html_too_complex` "… has more than … HTML tags / elements" / "nests elements more than 512 levels deep" / "too many attributes" — simplify the markup or split the deck.
- `css_too_large` "… has more than 16 MB of CSS" — remove unused CSS.
- `css_too_complex` "… has more than … CSS rules" / "nests CSS rules" / "a CSS declaration with more than …" / "“url(” without a closing “)”" — simplify or fix that CSS.
- `svg_entities` "… uses entities from its DOCTYPE in its CSS" — export the SVG without a DOCTYPE.
- `too_many_slides` "… has … slides; a deck can have at most 300" — split it into several decks.
- `markdown_pattern`, `markdown_config`, `markdown_source`, `markdown_too_large` (reveal.js Markdown) "The slide separators…" / "The speaker-notes separator…" / "…use the deck's …, and this site can't tell what it is" / "…sets to different values in different places" / "Use a Markdown file (.md)" / "would add more than 4 MB" — give each section literal separators such as `data-separator="^---$"`, load Markdown only from `.md` files, each from one page.

## Published with warnings

The deck works; its page lists "N warnings" (summary lines included in N). It shows at most 20 of each kind and 200 in all: a longer group ends "…and N more “code” warnings like the ones above.", a longer list "…and N more warnings not shown." (`warnings_truncated`). The rest aren't kept — each upload checks again — so fixing the shown ones brings up the next.

**Files and references**

- `file_dropped` "Skipped “x”: .… files aren't served" / "files without an extension aren't served" / "Skipped … hidden files" — remove it, or use an allowed type (name licence files `LICENSE.txt`) (https://makodeck.com/ai/packaging.md).
- `sourcemap_dropped` "Skipped “x”: source maps are never served" — harmless; leave `.map` files out.
- `external_reference` "“x” loads “https://…”. Decks can't load files from other sites" — download it into the folder and use a relative path.
- `cdn_library` "… loads a script from “https://…”" — use the site's copy at `_mako/lib/` (https://makodeck.com/ai/interactive.md) or bundle the library.
- `cdn_import` "…: a module script imports “https://…”" / "…: an import map points a module at “https://…”" — the module won't run. For a library the site has, load the `_mako/lib/…` file it names (a classic `<script src>`, and its global if it has one, or a relative `./_mako/lib/…` import); otherwise bundle the module in the deck folder and import it with a relative `./` path. Nothing is rewritten.
- `library_substituted` "… loads “…”, but decks can't load scripts from other sites. It is exactly the file the site pins…", "… It asks for … which the site pins as …" or "… which isn't in the deck folder. It names … one of the site's pinned libraries…" — a note, not a fault: the deck already uses the site's copy (for "It asks for", the site's release of the major it asked for, which may differ a little from the one it named). To clear it, point the `<script>` at the `_mako/lib/…` path it names; to load a different release, bundle it in the deck folder. "… loads “https://cdn.tailwindcss.com…”, Tailwind 3's Play CDN, which decks can't load…" — the deck runs on the site's Tailwind 4 with a script that reads its `tailwind.config`; check the slides, and move them to Tailwind 4 (https://makodeck.com/ai/interactive.md) where a class looks wrong.
- `tailwind_plugins` "… asks the Tailwind CDN for its … plugin(s), which the site's Tailwind 4 doesn't have" — classes from forms, typography or aspect-ratio (`prose`, `form-input`, `aspect-w-16`…) do nothing: style those elements in the deck's own CSS, or use Tailwind 4's own classes (`aspect-video`).
- `root_relative_path` "… refers to “/x”, which isn't in the deck folder" — add the file, or fix the path (relative).
- `unknown_library` "… references “_mako/lib/…”, which isn't one of the site's pinned libraries" — copy a listed path exactly.
- `markdown_missing` "… loads reveal.js Markdown from “x”, which isn't in the deck folder" — add the file or fix the path.
- `markdown_inlined` "… the Markdown was copied into the page without its speaker notes" — no action needed; notes on the entry page still reach the presenter view.
- `markdown_comment` "…removed reveal.js `<!-- .slide: … -->` … comments" — write those slides in HTML.
- `srcdoc_dropped` "… nests `<iframe srcdoc>` documents more than 4 deep" — flatten the nesting.

**Structure and code**

- `no_slides_detected` "No slides were found, so the deck is shown as one scrolling page" — add `data-mako-deck` and layout classes (https://makodeck.com/ai/format.md). Sibling elements with class `slide` (or `data-slide`) that hold most of the page are also presented as slides. "…: it has N slide elements, more than the 300 a deck can have" — split it into smaller decks.
- `static_active_slide` "A slide is marked “is-active” in the HTML but the deck has no script" — remove `is-active` from the HTML so MakoDeck runs the slides, or add the script that moves them (https://makodeck.com/ai/format.md).
- `manifest_invalid` "The #mako-manifest …" (is larger than 64 KB / isn't valid JSON / must be a JSON object / has values that were ignored) / 'The element with id "mako-manifest" must be…' — fix it (https://makodeck.com/ai/format.md).
- `script_hazard` "… uses a service worker" / "starts a Web Worker (new Worker)" — remove the service worker; avoid workers (one made from a `blob:` URL runs, but is still flagged).
- `css_syntax` "… has a CSS error (line …)" — fix that CSS.
- `svg_stylesheet_removed` "…removed an `<?xml-stylesheet?>` that loads its CSS from a data: URL" — put the CSS in a `<style>` element.

**Fonts** (https://makodeck.com/ai/brand-and-design.md)

- `font_missing_file` "“x” asks for “file”, which isn't in the upload" — add the file, or fix the path.
- `font_local_only` "“x” loads only on computers that have “x” installed" — bundle the font file.
- `font_unavailable` "“x” isn't in the deck, …" / "asks Google Fonts for …" / "The workspace font “x” couldn't be read" — check the name's spelling, bundle the font, pick a style the family has, split a long Google Fonts address, or re-upload the workspace font.
- `font_large` "“x” has a font file of …" — use WOFF2, or a smaller subset.
- `font_budget` "…would come to more than 64 MB" / "uses more than 256 fonts" / "names its fonts in more ways than the site reads" — use fewer fonts and simpler `font-family` rules.
- `font_svg_image` "… an SVG shown as an image can't load fonts" — outline the SVG's text, or put it inline.
- `font_externalized` "moved an embedded (data:) font … into …" — harmless; bundle the font as a file.
- `font_blocked` "… embeds a font … as a data: URL that isn't a WOFF2/WOFF/TTF/OTF font" — use a real font file.

Uploading a workspace font (**Fonts**, in the workspace menu) explains its own refusals there.

**Attached files** (from **Choose a folder**; messages start "“x” wasn't attached.")

- `artifact_blocked` — a refused type (programs, no extension, a web file) or larger than declared: remove or rename it.
- `artifact_type_mismatch` "It doesn't start the way a .… file does" — export it again under its real type. "It is UTF-16 text" / "It contains binary data (a NUL byte)" / "It isn't valid UTF-8 text" — save it as UTF-8 text.
- `artifact_listing_rejected` — an archive whose contents failed the check: rebuild it.
- `artifact_path_conflict` "The deck itself has a file at the same path" / "Another attached file has the same name" — rename it.
- `artifact_unchecked` "This file couldn't be checked" / "never finished uploading" — upload again.
- `artifacts_not_copied` "Files attached to the original weren't copied" — only on a deck started from a template: attach them again (**Replace deck**, **Choose a folder**).

**Thumbnails and the PDF** (the deck itself still works; a warning about one slide names it)

- `missing_files` "The deck asked for files it doesn't contain: …" — add them, with relative paths spelled exactly; "A script's path that starts with “/” never loads on the site" means a script's `fetch()` or `import` used a `/…` path: make it relative.
- `render_slow_ready` "The deck took more than 10 seconds to be ready" — lighten what runs at load.
- `render_controls_missing` "The deck's slide controls didn't load, so only its first view has a thumbnail." — the markup is broken (or the navigation script of a deck that runs its own stage), or a script throws at load.
- `render_slide_timeout` "Slide … didn't render in time", `render_stopped_failures` "Thumbnails stopped after three slides in a row failed to render.", `render_stopped_timeout` "Thumbnails stopped after slide … because the deck took too long" — make slow slides lighter.
- `render_still_drawing` "Slide … was still drawing after 6 seconds" / "Slides … were still drawing", `pdf_still_drawing` "Some slides were still drawing when the PDF was made." — honour `Mako.still` and settle faster (https://makodeck.com/ai/interactive.md).
- `render_slides_capped` "Only the first 300 of … slides have thumbnails." — use fewer slides.
- `slide_count_mismatch` "The deck's file describes … slides but it shows … when it runs" — write every slide in the HTML; never nest `.slide`.
- `render_slide_not_shown` "Slide … couldn't be shown on its own" / "Slides … couldn't be shown on their own, so their thumbnails show another slide." — a deck of sibling `.slide` elements (not the native format) that didn't move when asked: mark the showing slide with one class such as `active`, or use the native format (https://makodeck.com/ai/format.md).
- `render_slide_not_shown` "Slide … didn't show when the site asked for it" / "Slides … didn't show when the site asked for them…" — a native deck that doesn't move: let MakoDeck run the slides — don't mark a slide `is-active` in the HTML or as the page loads; or, to keep running its own stage, its script must show slide n when the hash becomes `#n` (counting from 1), give that slide alone `is-active`, and its CSS must hide the others (https://makodeck.com/ai/format.md). If the message names `window.MakoDeck.goto(i)`, fix the hook so `goto(i)` shows slide i + 1 and `index()` then returns i.
- `pdf_pages_short` "The PDF has … page(s) for … slides: the deck shows one slide at a time and has no print styles." / "…: the deck prints only the slide showing." — a native deck: let MakoDeck run the slides — don't mark a slide `is-active` in the HTML or as the page loads; otherwise add `@page` and `@media print` rules that show every slide, each on its own page (https://makodeck.com/ai/format.md).
- `render_slide_not_shown` / `pdf_pages_short` ending "MakoDeck runs this deck's slides, but the deck's own CSS hides them" — MakoDeck runs this deck's stage (it marks no slide `is-active`), and the deck's own CSS hides its slides (a `display`, `visibility` or `opacity` rule on `.slide`, with a class of its own to show one): remove those rules; MakoDeck shows one slide at a time and prints every one.
- `pdf_too_large` "The PDF download wasn't kept: it came to … MB, over the … MB limit." — smaller images and media.
- `pdf_timeout` "The PDF download wasn't generated because the deck took too long", `pdf_failed` "The PDF download couldn't be generated" — make the deck lighter; a deck that runs its own stage: check its print CSS.
- `render_deck_failed` "Thumbnails and the PDF download couldn't be generated for this version: the deck didn't finish loading" / "…stopped responding while it was rendered" — find the script that fails or loops at load.
- `render_gave_up` "…couldn't be generated for this version. The deck itself is unaffected.", `render_incomplete` "…: the renderer stopped before finishing", `thumbs_unreadable` "Some slide thumbnails couldn't be read back" — the site's renderer failed, usually not the deck: replace the deck to retry; check what runs at load only if it happens again.
- `render_unavailable` "Thumbnails and the PDF download aren't available in this environment." — nothing to fix.
- `render_quota` "Thumbnails and the PDF download weren't made for this version: this workspace has used its … renders for …" / "…the Base workspaces of this workspace's owner have used their shared … renders" — nothing is wrong with the deck; it publishes without them. Each publish is one render, so iterate locally (https://makodeck.com/ai/checklist.md) and publish less often; renders resume on the date it names.
- `render_waiting` "Thumbnails and the PDF download are waiting: the account that made it has made … renders today" / "…has used today's render time" / "…renders are paused site-wide for today" — nothing to fix: the deck is live, and they're made by themselves once renders resume (by the next UTC day). Publish less often meanwhile.
- `render_warning` — any other thumbnail or PDF problem; its message says what.
