+ {/* Save state bar */}
+
+
+ {/* Mainnet warning */}
+ {isMainnet && (
+
+
+
+ )}
+
+ {/* Tab navigation (visible on all sizes; on lg the sidebar is always shown) */}
+
+ {TABS.map((tab) => (
+ setActiveTab(tab.id)}
+ className={`flex items-center gap-1.5 px-3 py-2 text-sm font-semibold rounded-t-lg border-b-2 transition-colors ${
+ activeTab === tab.id
+ ? 'border-primary text-primary'
+ : 'border-transparent text-on-surface-variant hover:text-on-surface'
+ }`}
+ >
+ {tab.icon}
+ {tab.label}
+
+ ))}
+
+
+ {/* Content area */}
+
+ {/* Editor panels */}
+
+
+ {/* Sidebar: progression + deploy CTA */}
+
+
+
+ {/* Mobile deploy bar */}
+
+
+ Deploy
+
+
+
+ );
+}
diff --git a/apps/frontend/src/components/app/branding/StellarConfigForm.tsx b/apps/frontend/src/components/app/branding/StellarConfigForm.tsx
new file mode 100644
index 0000000..3c3dcc8
--- /dev/null
+++ b/apps/frontend/src/components/app/branding/StellarConfigForm.tsx
@@ -0,0 +1,135 @@
+'use client';
+
+import React from 'react';
+import type { StellarConfig } from '@craft/types';
+
+interface StellarConfigFormProps {
+ value: StellarConfig;
+ onChange: (value: StellarConfig) => void;
+ errors?: Map