diff --git a/backend/export.py b/backend/export.py
index cdc7e78..3f104d3 100644
--- a/backend/export.py
+++ b/backend/export.py
@@ -813,7 +813,7 @@ def generate_export_html(
// nested in a callout blockquote lose their `> ` prefix on the closer
// — otherwise the restored block sits inside
// without a valid CommonMark fence closer and runs unclosed.
- // Fence-aware so literal `> [!TIPO]` inside a top-level code block
+ // Fence-aware so literal `> [!TIP]` inside a top-level code block
// is not misread. Mirrors the in-app preview preprocessor.
let processed;
{{
diff --git a/frontend/app.js b/frontend/app.js
index 965cc47..a520819 100644
--- a/frontend/app.js
+++ b/frontend/app.js
@@ -5839,7 +5839,7 @@ function noteApp() {
// fences nested in a callout blockquote lose their `> ` prefix on
// the closer — otherwise CommonMark won't see a valid fence closer
// once restored inside
and the block
- // runs unclosed. Fence-aware so `> [!TIPO]` literal inside a
+ // runs unclosed. Fence-aware so `> [!TIP]` literal inside a
// top-level code block is not misread as a callout.
{
const CALLOUT_RE = /^>\s*\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]\s*(.*)$/i;