{"id":15681,"date":"2026-03-25T15:09:54","date_gmt":"2026-03-25T13:09:54","guid":{"rendered":"https:\/\/angeingabire.com\/?page_id=15681"},"modified":"2026-05-17T02:20:29","modified_gmt":"2026-05-17T00:20:29","slug":"ortive-ai-product-studio-build-monetize-ai-products","status":"publish","type":"page","link":"https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/","title":{"rendered":"Ortive \u2014 AI Product Studio | Build &#038; Monetize AI Products"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"15681\" class=\"elementor elementor-15681\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8ebd758 e-flex e-con-boxed e-con e-parent\" data-id=\"8ebd758\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a5d0d07 elementor-widget elementor-widget-html\" data-id=\"a5d0d07\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\"\/>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\"\/>\n<title>Ortive Studio<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Instrument+Serif:ital@0;1&family=Geist:wght@300;400;500;600;700&family=Geist+Mono:wght@400;500;600&display=swap\" rel=\"stylesheet\"\/>\n<style>\n*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\n\nhtml,body{\n  background:#F5F1E9;color:#13120D;\n  font-family:'Geist','Helvetica Neue',Helvetica,sans-serif;\n  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;\n  min-height:100vh;\n}\n::-webkit-scrollbar{width:3px;height:3px}\n::-webkit-scrollbar-thumb{background:rgba(10,10,11,.2)}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 MASTHEAD \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.masthead{\n  position:sticky;top:0;z-index:200;\n  background:#F5F1E9;\n  border-bottom:1.5px solid #13120D;\n  display:grid;\n  grid-template-columns:auto 1fr auto;\n  align-items:center;\n  gap:24px;\n  padding:0 28px;\n  height:54px;\n}\n.mast-brand{display:flex;align-items:center;gap:10px;flex-shrink:0}\n.mast-dot{width:8px;height:8px;border-radius:50%;background:#C47B3A;flex-shrink:0}\n.mast-name{font-family:'Instrument Serif',Georgia,serif;font-style:italic;font-size:22px;letter-spacing:-.02em;line-height:1;color:#13120D}\n.mast-name em{font-style:normal;color:#3E6B58}\n.mast-sub{font-family:'Geist Mono',ui-monospace,monospace;font-size:9px;letter-spacing:.12em;text-transform:uppercase;color:#A09880;margin-left:4px}\n\n.mast-step{font-family:'Geist Mono',ui-monospace,monospace;font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:#7A7266;text-align:center}\n.mast-step span{color:#3E6B58}\n\n\/* BYOK in masthead *\/\n.mast-byok{display:flex;align-items:center;gap:0;flex-shrink:0}\n.byok-disconnected{display:flex;align-items:center;gap:0}\n.byok-select{\n  height:34px;padding:0 28px 0 10px;\n  background:transparent;\n  border:1px solid rgba(10,10,11,.25);border-right:none;\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:10px;letter-spacing:.06em;color:#13120D;\n  outline:none;cursor:pointer;\n  background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%237A7266' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 8px center;\n  -webkit-appearance:none;min-width:160px;\n}\n.byok-select:focus{border-color:#3E6B58;outline:none}\n.byok-key-inp{\n  height:34px;padding:0 10px;width:200px;\n  background:transparent;\n  border:1px solid rgba(10,10,11,.25);border-right:none;\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:11px;color:#13120D;\n  outline:none;\n}\n.byok-key-inp::placeholder{color:#A09880;font-style:normal}\n.byok-key-inp:focus{border-color:#3E6B58}\n.byok-connect-btn{\n  height:34px;padding:0 16px;\n  background:#13120D;color:#F5F1E9;\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:10px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  border:1px solid #13120D;cursor:pointer;\n  display:flex;align-items:center;gap:8px;\n  transition:all .15s;white-space:nowrap;\n}\n.byok-connect-btn:hover{background:#3E6B58;border-color:#3E6B58}\n.byok-connect-btn .arrow{font-family:'Instrument Serif',Georgia,serif;font-size:18px;font-style:normal;transition:transform .2s}\n.byok-connect-btn:hover .arrow{transform:translateX(3px)}\n\n.byok-connected{display:none;align-items:center;gap:12px}\n.byok-connected.show{display:flex}\n.byok-disconnected.hide{display:none}\n.byok-pulse{width:6px;height:6px;border-radius:50%;background:#C47B3A;animation:pulse 2.2s ease-in-out infinite;flex-shrink:0}\n.byok-name{font-family:'Geist Mono',ui-monospace,monospace;font-size:10px;letter-spacing:.08em;color:#13120D}\n.byok-change{background:none;border:none;cursor:pointer;font-family:'Geist Mono',ui-monospace,monospace;font-size:10px;letter-spacing:.08em;color:#A09880;padding:0;transition:color .15s;text-decoration:underline;text-underline-offset:2px}\n.byok-change:hover{color:#3E6B58}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 USAGE CAP OVERLAY \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.cap-overlay{position:fixed;inset:0;background:rgba(19,18,13,.6);z-index:9000;display:flex;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(2px);animation:in .25s ease}\n.cap-overlay.hidden{display:none}\n.cap-box{background:#F5F1E9;border:1.5px solid #13120D;box-shadow:6px 6px 0 #13120D;width:480px;max-width:94vw;padding:40px 40px 36px;position:relative;animation:up .32s ease}\n.cap-close{position:absolute;top:14px;right:18px;background:none;border:none;cursor:pointer;font-family:'Geist Mono',monospace;font-size:16px;color:#A09880;line-height:1;padding:4px}\n.cap-close:hover{color:#13120D}\n.cap-kicker{font-family:'Geist Mono',monospace;font-size:9px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:#3E6B58;margin-bottom:14px;display:flex;align-items:center;gap:8px}\n.cap-title{font-family:'Instrument Serif',Georgia,serif;font-style:italic;font-size:28px;letter-spacing:-.02em;color:#13120D;margin-bottom:10px;line-height:1.1}\n.cap-body{font-size:13.5px;color:#7A7266;line-height:1.65;margin-bottom:24px}\n.cap-form{display:flex;gap:0;border:1.5px solid #13120D}\n.cap-form input{border:none;border-right:1.5px solid #13120D;padding:12px 14px;font-size:15px;font-family:'Instrument Serif',Georgia,serif;font-style:italic;flex:1;background:transparent;color:#13120D;outline:none}\n.cap-form input::placeholder{color:#A09880}\n.cap-form input:focus{background:rgba(62,107,88,.04)}\n.cap-form button{padding:12px 20px;background:#13120D;color:#F5F1E9;border:none;cursor:pointer;font-family:'Geist Mono',monospace;font-size:10px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;transition:background .15s;flex-shrink:0}\n.cap-form button:hover{background:#3E6B58}\n.cap-note{font-family:'Geist Mono',monospace;font-size:9.5px;color:#A09880;margin-top:10px;letter-spacing:.06em}\n\n@keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.85)}}\n@keyframes up{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}\n@keyframes in{from{opacity:0}to{opacity:1}}\n@keyframes spin{to{transform:rotate(360deg)}}\n@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 LAYOUT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.layout{display:flex;min-height:calc(100vh - 54px)}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 SIDEBAR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.sidebar{\n  width:232px;flex-shrink:0;\n  background:#13120D;\n  position:sticky;top:54px;\n  height:calc(100vh - 54px);\n  overflow-y:auto;\n  display:flex;flex-direction:column;\n  padding:24px 0 24px;\n}\n.sidebar::-webkit-scrollbar{width:2px}\n.sidebar::-webkit-scrollbar-thumb{background:rgba(255,255,255,.1)}\n\n.side-section{\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:8.5px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;\n  color:rgba(255,255,255,.2);\n  padding:0 20px;margin:20px 0 8px;\n}\n.side-section:first-child{margin-top:0}\n\n.nav-item{\n  display:flex;align-items:center;gap:10px;\n  padding:8px 20px;\n  cursor:pointer;border:none;background:transparent;\n  text-align:left;width:100%;\n  border-left:2px solid transparent;\n  transition:all .15s;position:relative;\n}\n.nav-item:hover .nav-label{color:rgba(255,255,255,.7)}\n.nav-item.on{background:rgba(255,255,255,.05);border-left-color:#C47B3A}\n.nav-item.on .nav-label{color:#fff;font-weight:600}\n.nav-item.on .nav-num{border-color:#C47B3A;color:#C47B3A}\n.nav-item.done .nav-num{background:#C47B3A;border-color:#C47B3A;color:#13120D;display:grid;place-items:center}\n\n.nav-num{\n  width:20px;height:20px;border-radius:0;\n  border:1px solid rgba(255,255,255,.15);\n  display:grid;place-items:center;\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:8px;font-weight:600;color:rgba(255,255,255,.25);\n  flex-shrink:0;transition:all .2s;\n}\n.nav-label{font-size:12px;font-weight:400;color:rgba(255,255,255,.35);line-height:1;transition:color .15s;letter-spacing:-.01em}\n.nav-dot{margin-left:auto;width:4px;height:4px;border-radius:50%;background:#C47B3A;opacity:0;flex-shrink:0}\n.nav-item.on .nav-dot{opacity:1}\n.side-divider{height:1px;background:rgba(255,255,255,.07);margin:12px 20px}\n\n.side-foot{\n  margin-top:auto;padding:16px 20px 0;\n  border-top:1px solid rgba(255,255,255,.07);\n  display:flex;align-items:center;gap:10px;\n}\n.side-avi{\n  width:26px;height:26px;background:#C47B3A;\n  display:grid;place-items:center;flex-shrink:0;\n  font-family:'Instrument Serif',Georgia,serif;font-style:italic;font-size:12px;color:#fff;\n}\n.side-foot-name{font-size:11.5px;font-weight:500;color:rgba(255,255,255,.55);letter-spacing:-.01em}\n.side-foot-sub{font-family:'Geist Mono',ui-monospace,monospace;font-size:9px;color:rgba(255,255,255,.2);letter-spacing:.08em;margin-top:1px}\n\n\/* mobile sidebar overlay *\/\n.mob-ov{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:150;animation:in .2s}\n.mob-ov.on{display:block}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 MAIN \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.main{flex:1;padding:48px 52px;min-height:calc(100vh - 54px);max-width:1100px}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 PAGE HEADER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.eyebrow{\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:10px;letter-spacing:.2em;text-transform:uppercase;\n  color:#3E6B58;margin-bottom:22px;\n  display:flex;align-items:center;gap:12px;\n}\n.eyebrow::before,.eyebrow::after{content:\"\";height:1px;background:#3E6B58;opacity:.4}\n.eyebrow::before{width:32px}\n.eyebrow::after{flex:1;opacity:.15}\n\n.pg-h1{\n  font-family:'Instrument Serif',Georgia,serif !important;\n  font-style:italic !important;\n  font-size:42px !important;font-weight:400 !important;\n  letter-spacing:-.025em !important;line-height:.98 !important;\n  color:#13120D !important;margin-bottom:14px !important;\n}\n.pg-sub{font-size:14px;color:#7A7266;line-height:1.65;max-width:480px}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 VIEWS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.view{display:none}\n.view.on{display:block;animation:up .3s ease both}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 CARDS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.card{\n  background:#fff;\n  border:1px solid #13120D;\n  box-shadow:3px 3px 0 #13120D;\n  padding:24px;\n}\n.card-sm{\n  background:#fff;\n  border:1px solid #13120D;\n  padding:18px;\n}\n.inset{\n  background:#E8E2D5;\n  border:1px solid rgba(10,10,11,.12);\n  padding:14px;\n}\n.inset-accent{\n  background:rgba(62,107,88,.06);\n  border:1px solid rgba(62,107,88,.3);\n  padding:14px;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 GRID \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.g2{display:grid;grid-template-columns:1fr 1fr;gap:18px}\n.g3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}\n.g4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}\n.col{display:flex;flex-direction:column}\n.row{display:flex;align-items:center}\n.between{display:flex;justify-content:space-between;align-items:center}\n.gap6{gap:6px}.gap8{gap:8px}.gap10{gap:10px}.gap12{gap:12px}.gap14{gap:14px}.gap16{gap:16px}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 TYPOGRAPHY \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.ct{font-family:'Instrument Serif',Georgia,serif;font-style:italic;font-weight:400;font-size:15px;letter-spacing:-.01em;color:#13120D}\n.cs{color:#7A7266;font-size:12.5px;margin-top:2px;line-height:1.5}\n.lbl{\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.14em;\n  color:#7A7266;display:block;margin-bottom:7px;\n}\n.body{font-size:13.5px;color:#1E1B15;line-height:1.72}\n.mono{font-family:'Geist Mono',ui-monospace,monospace;font-size:12px;color:#7A7266}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 BADGES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.badge{\n  display:inline-flex;align-items:center;\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:9px;font-weight:600;padding:3px 8px;\n  letter-spacing:.08em;text-transform:uppercase;\n  border-radius:0;\n}\n.bg{background:rgba(62,107,88,.1);color:#3E6B58;border:1px solid rgba(62,107,88,.35)}\n.bt{background:#E8E2D5;color:#7A7266;border:1px solid rgba(10,10,11,.15)}\n.bn{background:#13120D;color:#F5F1E9;border:1px solid #13120D}\n.bi{background:#E8E2D5;color:#7A7266;border:1px solid rgba(10,10,11,.12)}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 BUTTONS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.btn{\n  display:inline-flex;align-items:center;justify-content:center;gap:8px;\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-weight:600;font-size:10.5px;\n  letter-spacing:.14em;text-transform:uppercase;\n  border:none;cursor:pointer;transition:all .15s;\n  padding:10px 20px;border-radius:0;\n}\n.btn-dark{background:#13120D;color:#F5F1E9;border:1px solid #13120D}\n.btn-dark:hover{background:#3E6B58;border-color:#3E6B58;transform:translateY(-1px)}\n.btn-dark:disabled{background:#7A7266;border-color:#7A7266;cursor:not-allowed;transform:none}\n.btn-ghost{background:transparent;border:1px solid #13120D;color:#13120D}\n.btn-ghost:hover{background:#13120D;color:#F5F1E9}\n.btn-purple{background:#3E6B58;color:#fff;border:1px solid #3E6B58}\n.btn-purple:hover{background:#2D5448;border-color:#2D5448;transform:translateY(-1px)}\n.btn-full{width:100%;padding:13px;font-size:10.5px}\n.btn-sm{padding:6px 12px;font-size:9.5px}\n.btn-xl{padding:14px 28px;font-size:11px}\n.btn-arrow::after{content:\"\u2192\";font-family:'Instrument Serif',Georgia,serif;font-size:18px;font-style:normal;transition:transform .2s;letter-spacing:0}\n.btn-dark.btn-arrow:hover::after,.btn-ghost.btn-arrow:hover::after{transform:translateX(4px)}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 INPUTS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\ninput[type=text],input[type=email],input[type=password],textarea,select{\n  background:transparent;\n  border:none;border-bottom:1.5px solid #13120D;\n  padding:8px 2px;\n  color:#13120D;\n  font-family:'Instrument Serif',Georgia,serif;\n  font-style:italic;font-size:20px;\n  outline:none;width:100%;transition:border-color .2s;\n}\ninput[type=text]:focus,input[type=email]:focus,input[type=password]:focus,\ntextarea:focus,select:focus{border-bottom-color:#3E6B58}\ninput::placeholder,textarea::placeholder{color:#A09880;font-style:italic}\ntextarea{resize:vertical;min-height:80px;line-height:1.55;font-size:16px}\nselect{\n  background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='11' height='11' viewBox='0 0 24 24' fill='none' stroke='%237A7266' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 4px bottom 10px;\n  -webkit-appearance:none;padding-right:28px;font-size:17px;\n}\ninput[type=range]{width:100%;accent-color:#3E6B58;cursor:pointer;margin:4px 0}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 CHIP SELECTOR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.chip-group{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:18px}\n.chip{\n  display:inline-flex;align-items:center;gap:5px;\n  padding:5px 11px;\n  border:1px solid rgba(10,10,11,.25);border-radius:0;\n  cursor:pointer;background:transparent;\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;\n  color:#7A7266;transition:all .15s;\n}\n.chip svg{width:11px;height:11px;stroke:#A09880;flex-shrink:0;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:stroke .15s}\n.chip:hover{border-color:#13120D;color:#13120D}\n.chip.on{border-color:#13120D;background:#13120D;color:#F5F1E9}\n.chip.on svg{stroke:#F5F1E9}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 PRODUCT TYPE CARD \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.ptype{\n  background:#fff;border:1px solid #13120D;\n  box-shadow:3px 3px 0 #13120D;\n  padding:20px 18px;cursor:pointer;\n  transition:all .18s;position:relative;\n}\n.ptype:hover{transform:translate(-1px,-1px);box-shadow:5px 5px 0 #13120D}\n.ptype.sel{border-color:#3E6B58;box-shadow:3px 3px 0 #3E6B58;background:rgba(62,107,88,.04)}\n.ptype.sel::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:#3E6B58}\n.ptype-icon{width:40px;height:40px;display:grid;place-items:center;margin-bottom:14px;background:#E8E2D5}\n.ptype-name{font-family:'Instrument Serif',Georgia,serif;font-style:italic;font-weight:400;font-size:15px;color:#13120D;margin-bottom:5px;letter-spacing:-.01em}\n.ptype-desc{font-size:11.5px;color:#7A7266;line-height:1.55}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 OUTPUT TABS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.out-tabs{display:flex;border-bottom:1px solid #13120D;overflow-x:auto;scrollbar-width:none}\n.out-tabs::-webkit-scrollbar{display:none}\n.out-tab{\n  padding:10px 16px;\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;\n  color:#7A7266;cursor:pointer;\n  border-bottom:2px solid transparent;white-space:nowrap;flex-shrink:0;\n  background:none;border-top:none;border-left:none;border-right:none;\n  transition:all .15s;\n}\n.out-tab:hover{color:#13120D}\n.out-tab.on{color:#13120D;border-bottom-color:#3E6B58}\n.out-tab-push{flex:1}\n.dl-btn{\n  display:flex;align-items:center;gap:5px;padding:5px 12px;\n  background:#13120D;color:#F5F1E9;border:none;\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:9px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  cursor:pointer;flex-shrink:0;transition:all .15s;margin:auto 0;\n}\n.dl-btn:hover{background:#3E6B58}\n.out-pane{display:none;padding:22px}\n.out-pane.on{display:block}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 RESULT SECTIONS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.rsec{background:#E8E2D5;border:1px solid rgba(10,10,11,.12);padding:16px;margin-bottom:10px}\n.rsec-lbl{\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.14em;\n  color:#3E6B58;margin-bottom:10px;display:flex;align-items:center;gap:8px;\n}\n.rsec-lbl::after{content:\"\";flex:1;height:1px;background:rgba(62,107,88,.2)}\n.rsec ul{list-style:none}\n.rsec ul li{font-size:13px;color:#1E1B15;line-height:1.7;padding:2px 0 2px 14px;position:relative}\n.rsec ul li::before{content:'\u25c6';position:absolute;left:0;top:6px;color:#3E6B58;font-size:6px}\n\n.code-wrap{background:#13120D;padding:18px;margin-bottom:10px}\n.code-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}\n.code-lbl{font-family:'Geist Mono',ui-monospace,monospace;font-size:9px;color:rgba(255,255,255,.35);letter-spacing:.14em;text-transform:uppercase}\n.code-pre{font-family:'Geist Mono',ui-monospace,monospace;font-size:11.5px;color:rgba(255,255,255,.78);white-space:pre-wrap;word-break:break-word;line-height:1.65}\n.copy-btn{\n  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.1);\n  color:rgba(255,255,255,.4);font-size:9px;font-weight:600;\n  padding:3px 9px;cursor:pointer;\n  font-family:'Geist Mono',ui-monospace,monospace;\n  letter-spacing:.08em;transition:all .15s;border-radius:0;\n}\n.copy-btn:hover{background:rgba(255,255,255,.14);color:#fff}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 FLOW STEPS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.flow-step{display:flex;gap:10px;margin-bottom:8px}\n.flow-n{\n  width:22px;height:22px;min-width:22px;\n  background:#13120D;color:rgba(255,255,255,.6);\n  display:grid;place-items:center;\n  font-family:'Geist Mono',ui-monospace,monospace;font-size:8.5px;font-weight:600;\n}\n.flow-txt{\n  flex:1;background:#E8E2D5;border:1px solid rgba(10,10,11,.1);\n  padding:7px 11px;font-size:12.5px;color:#1E1B15;line-height:1.5;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 TOGGLE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.tgl{width:32px;height:17px;border-radius:0;cursor:pointer;position:relative;flex-shrink:0;transition:background .18s}\n.tgl-k{position:absolute;top:2px;width:13px;height:13px;background:#fff;transition:left .18s;box-shadow:0 1px 3px rgba(0,0,0,.2)}\n.cap-row{display:flex;justify-content:space-between;align-items:center;padding:7px 0;border-bottom:1px solid rgba(10,10,11,.08)}\n.cap-row:last-child{border-bottom:none;padding-bottom:0}\n.cap-label{font-size:12.5px;color:#1E1B15}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 RULE ROW \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.rule-r{display:flex;gap:8px;margin-bottom:7px;align-items:flex-start}\n.rule-ic{width:16px;height:16px;background:rgba(62,107,88,.1);display:grid;place-items:center;flex-shrink:0;margin-top:2px}\n.rule-txt{flex:1;background:#E8E2D5;border:1px solid rgba(10,10,11,.1);padding:6px 10px;font-size:12px;color:#1E1B15;line-height:1.5}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 TIER CARDS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.tier-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0;margin-top:12px;border:1px solid #13120D}\n.tier-card{padding:18px;position:relative;border-right:1px solid rgba(10,10,11,.15)}\n.tier-card:last-child{border-right:none}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 SKEL \/ SPINNER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.skel{background:linear-gradient(90deg,#E8E2D5 25%,#DFD9CC 50%,#E8E2D5 75%);background-size:200% 100%;animation:shimmer 1.4s ease infinite;margin-bottom:8px}\n.spin{display:inline-block;width:12px;height:12px;border:1.5px solid rgba(247,247,244,.2);border-top-color:#F5F1E9;border-radius:50%;animation:spin .65s linear infinite}\n.spin-d{display:inline-block;width:12px;height:12px;border:1.5px solid rgba(10,10,11,.1);border-top-color:#13120D;border-radius:50%;animation:spin .65s linear infinite}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 EMPTY STATE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:150px;gap:10px;color:#A09880;font-size:13px;text-align:center}\n.empty span{max-width:220px;line-height:1.6;font-family:'Instrument Serif',Georgia,serif;font-style:italic;font-size:15px}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 TOAST \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n#toast{\n  position:fixed;bottom:24px;right:24px;\n  background:#13120D;color:#F5F1E9;\n  padding:11px 18px;\n  font-family:'Geist Mono',ui-monospace,monospace;\n  font-size:11px;letter-spacing:.06em;\n  box-shadow:3px 3px 0 #C47B3A;\n  transform:translateY(60px);opacity:0;\n  transition:all .26s;z-index:9999;pointer-events:none;border-radius:0;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 POPUP OVERLAY \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:9999;display:flex;align-items:center;justify-content:center;animation:in .2s}\n.popup{\n  background:#F5F1E9;border:1px solid #13120D;box-shadow:6px 6px 0 #13120D;\n  padding:40px;width:420px;max-width:92vw;\n  animation:up .28s ease;text-align:center;\n}\n.popup-icon{width:48px;height:48px;background:rgba(62,107,88,.1);border:1px solid rgba(62,107,88,.35);display:grid;place-items:center;margin:0 auto 18px}\n.popup-title{font-family:'Instrument Serif',Georgia,serif;font-style:italic;font-weight:400;font-size:26px;letter-spacing:-.02em;color:#13120D;margin-bottom:10px}\n.popup-sub{color:#7A7266;font-size:13px;line-height:1.65;margin-bottom:24px}\n.popup-form{display:flex;gap:0;border:1px solid #13120D}\n.popup-form input{border:none;border-right:1px solid #13120D;padding:10px 12px;font-size:13px;font-family:'Geist',sans-serif;flex:1}\n.popup-form input:focus{outline:none;border-bottom:none}\n.popup-form button{padding:10px 16px;background:#13120D;color:#F5F1E9;border:none;cursor:pointer;font-family:'Geist Mono',ui-monospace,monospace;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;white-space:nowrap}\n.popup-form button:hover{background:#3E6B58}\n.popup-note{font-family:'Geist Mono',ui-monospace,monospace;font-size:9.5px;color:#A09880;margin-top:10px;letter-spacing:.06em}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 MOBILE BAR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.mob-bar{display:none;position:fixed;top:0;left:0;right:0;height:52px;background:#13120D;z-index:300;align-items:center;justify-content:space-between;padding:0 18px;border-bottom:1px solid rgba(255,255,255,.1)}\n.mob-brand{display:flex;align-items:center;gap:8px}\n.mob-name{font-family:'Instrument Serif',Georgia,serif;font-style:italic;font-size:20px;color:#F5F1E9;letter-spacing:-.02em}\n.mob-name em{font-style:normal;color:#3E6B58}\n.mob-step-lbl{font-family:'Geist Mono',ui-monospace,monospace;font-size:9px;color:rgba(255,255,255,.35);letter-spacing:.1em}\n.mob-menu-btn{width:32px;height:32px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.12);display:grid;place-items:center;cursor:pointer}\n\n@media(max-width:900px){.sidebar{width:200px}.main{padding:32px 24px}.g4{grid-template-columns:repeat(2,1fr)}}\n@media(max-width:700px){\n  .mob-bar{display:flex}\n  .masthead{display:none}\n  .sidebar{position:fixed;top:52px;left:0;height:calc(100vh - 52px);z-index:200;transform:translateX(-100%);transition:transform .28s cubic-bezier(.4,0,.2,1)}\n  .sidebar.open{transform:translateX(0)}\n  .layout{display:block}\n  .main{margin-left:0;padding:72px 16px 28px}\n  .g2,.g3,.g4{grid-template-columns:1fr}\n  .pg-h1{font-size:30px !important}\n  .tier-grid{grid-template-columns:1fr}\n  .tier-card{border-right:none;border-bottom:1px solid rgba(10,10,11,.15)}\n  .tier-card:last-child{border-bottom:none}\n  .mast-byok{flex-wrap:wrap}\n  .byok-key-inp{width:140px}\n}\n<\/style>\n<\/head>\n<body>\n\n<!-- USAGE CAP OVERLAY -->\n<div class=\"cap-overlay hidden\" id=\"cap-overlay\">\n  <div class=\"cap-box\">\n    <button class=\"cap-close\" onclick=\"closeCapPopup()\">\u2715<\/button>\n    <div class=\"cap-kicker\"><span style=\"width:5px;height:5px;border-radius:50%;background:#3E6B58;display:inline-block\"><\/span>Ortive Studio \u2014 MVP<\/div>\n    <div class=\"cap-title\">Thank you for exploring Ortive Studio<\/div>\n    <p class=\"cap-body\">You've used your 3 free generations and seen everything the MVP has to offer. Leave your email below \u2014 we'll notify you the moment the full version launches with unlimited sessions, saved projects, and team features.<\/p>\n    <div class=\"cap-form\">\n      <input type=\"email\" id=\"cap-email\" placeholder=\"your@email.com\" onkeydown=\"if(event.key==='Enter')submitCapEmail()\"\/>\n      <button onclick=\"submitCapEmail()\">Notify Me \u2192<\/button>\n    <\/div>\n    <p class=\"cap-note\">One email. No spam. Unsubscribe anytime.<\/p>\n    <div id=\"cap-success\" style=\"display:none;margin-top:16px;padding:12px;background:rgba(62,107,88,.08);border:1px solid rgba(62,107,88,.3);font-family:'Geist Mono',monospace;font-size:10.5px;color:#3E6B58;letter-spacing:.06em\">\n      \u2713 You're on the list. We'll be in touch.\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- MOBILE BAR -->\n<div class=\"mob-bar\">\n  <div class=\"mob-brand\">\n    <span class=\"mob-name\">Ort<em>ive<\/em><\/span>\n  <\/div>\n  <span class=\"mob-step-lbl\" id=\"mob-label\">Build \u00b7 Step 1<\/span>\n  <div class=\"mob-menu-btn\" onclick=\"openSide()\">\n    <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"rgba(255,255,255,.6)\" stroke-width=\"2\" stroke-linecap=\"round\"><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"\/><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"\/><line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"\/><\/svg>\n  <\/div>\n<\/div>\n<div class=\"mob-ov\" id=\"mob-ov\" onclick=\"closeSide()\"><\/div>\n\n<!-- MASTHEAD -->\n<header class=\"masthead\">\n  <div class=\"mast-brand\">\n    <div class=\"mast-dot\"><\/div>\n    <span class=\"mast-name\">Ort<em>ive<\/em><span class=\"mast-sub\">Studio<\/span><\/span>\n  <\/div>\n\n  <div class=\"mast-step\" id=\"mast-step\">Build <span>\u00b7<\/span> Step 1 of 5<\/div>\n\n  <div class=\"mast-byok\">\n    <!-- Disconnected -->\n    <div class=\"byok-disconnected\" id=\"byok-dis\">\n      <select class=\"byok-select\" id=\"gw-provider\" onchange=\"gwProviderChange()\">\n        <optgroup label=\"\u2500\u2500 Frontier \u2500\u2500\">\n          <option value=\"anthropic\">Claude \u2014 Anthropic<\/option>\n          <option value=\"openai\">GPT-4o \u2014 OpenAI<\/option>\n          <option value=\"google\">Gemini 1.5 Flash \u2014 Google<\/option>\n          <option value=\"xai\">Grok-2 \u2014 xAI<\/option>\n          <option value=\"mistral\">Mistral Large<\/option>\n          <option value=\"deepseek\">DeepSeek Chat<\/option>\n          <option value=\"cohere\">Command R+ \u2014 Cohere<\/option>\n        <\/optgroup>\n        <optgroup label=\"\u2500\u2500 Fast \/ Open Source \u2500\u2500\">\n          <option value=\"groq\">Llama 3.3 70B \u2014 Groq<\/option>\n          <option value=\"together\">Llama 3.3 \u2014 Together AI<\/option>\n          <option value=\"fireworks\">Llama 3.1 405B \u2014 Fireworks<\/option>\n          <option value=\"perplexity\">Sonar Pro \u2014 Perplexity<\/option>\n        <\/optgroup>\n      <\/select>\n      <input class=\"byok-key-inp\" type=\"password\" id=\"gw-key\" placeholder=\"sk-ant-api...\" autocomplete=\"off\" onkeydown=\"if(event.key==='Enter')gwConnect()\"\/>\n      <button class=\"byok-connect-btn\" id=\"gw-btn\" onclick=\"gwConnect()\">Connect <span class=\"arrow\">\u2192<\/span><\/button>\n    <\/div>\n    <!-- Connected -->\n    <div class=\"byok-connected\" id=\"byok-con\">\n      <div class=\"byok-pulse\"><\/div>\n      <span class=\"byok-name\" id=\"byok-name\">Claude \u2014 Anthropic<\/span>\n      <button class=\"byok-change\" onclick=\"gwReset()\">Change<\/button>\n    <\/div>\n  <\/div>\n<\/header>\n\n<!-- LAYOUT -->\n<div class=\"layout\">\n\n<!-- SIDEBAR -->\n<aside class=\"sidebar\" id=\"sidebar\">\n  <div class=\"side-section\">Build<\/div>\n  <button class=\"nav-item on\" data-v=\"b1\" onclick=\"nav('b1',this)\"><div class=\"nav-num\" id=\"nn-b1\">1<\/div><span class=\"nav-label\">Product Type<\/span><div class=\"nav-dot\"><\/div><\/button>\n  <button class=\"nav-item\" data-v=\"b2\" onclick=\"nav('b2',this)\"><div class=\"nav-num\" id=\"nn-b2\">2<\/div><span class=\"nav-label\">Define + Blueprint<\/span><div class=\"nav-dot\"><\/div><\/button>\n  <button class=\"nav-item\" data-v=\"b3\" onclick=\"nav('b3',this)\"><div class=\"nav-num\" id=\"nn-b3\">3<\/div><span class=\"nav-label\">Capabilities<\/span><div class=\"nav-dot\"><\/div><\/button>\n  <button class=\"nav-item\" data-v=\"b4\" onclick=\"nav('b4',this)\"><div class=\"nav-num\" id=\"nn-b4\">4<\/div><span class=\"nav-label\">Workflow<\/span><div class=\"nav-dot\"><\/div><\/button>\n  <button class=\"nav-item\" data-v=\"b5\" onclick=\"nav('b5',this)\"><div class=\"nav-num\" id=\"nn-b5\">5<\/div><span class=\"nav-label\">Deployment Manual<\/span><div class=\"nav-dot\"><\/div><\/button>\n  <div class=\"side-divider\"><\/div>\n  <div class=\"side-section\">Monetize<\/div>\n  <button class=\"nav-item\" data-v=\"m1\" onclick=\"nav('m1',this)\"><div class=\"nav-num\" id=\"nn-m1\">A<\/div><span class=\"nav-label\">Define Offer<\/span><div class=\"nav-dot\"><\/div><\/button>\n  <button class=\"nav-item\" data-v=\"m2\" onclick=\"nav('m2',this)\"><div class=\"nav-num\" id=\"nn-m2\">B<\/div><span class=\"nav-label\">Sales Package<\/span><div class=\"nav-dot\"><\/div><\/button>\n  <button class=\"nav-item\" data-v=\"m3\" onclick=\"nav('m3',this)\"><div class=\"nav-num\" id=\"nn-m3\">C<\/div><span class=\"nav-label\">Landing Page<\/span><div class=\"nav-dot\"><\/div><\/button>\n  <button class=\"nav-item\" data-v=\"m4\" onclick=\"nav('m4',this)\"><div class=\"nav-num\" id=\"nn-m4\">D<\/div><span class=\"nav-label\">Outreach<\/span><div class=\"nav-dot\"><\/div><\/button>\n  <button class=\"nav-item\" data-v=\"m5\" onclick=\"nav('m5',this)\"><div class=\"nav-num\" id=\"nn-m5\">E<\/div><span class=\"nav-label\">Revenue Model<\/span><div class=\"nav-dot\"><\/div><\/button>\n  <div class=\"side-foot\"><div class=\"side-avi\">O<\/div><div><div class=\"side-foot-name\">Ortive Studio<\/div><div class=\"side-foot-sub\">Early Access<\/div><\/div><\/div>\n<\/aside>\n\n<!-- MAIN -->\n<main class=\"main\">\n\n<!-- B1 -->\n<div class=\"view on\" id=\"v-b1\">\n  <div style=\"margin-bottom:32px\">\n    <div class=\"eyebrow\">Build \u2014 Step 1 of 5<\/div>\n    <h1 class=\"pg-h1\">What are you building?<\/h1>\n    <p class=\"pg-sub\">Select a product type. Your blueprint, capability modules, and deployment manual all adapt to this choice.<\/p>\n  <\/div>\n  <div class=\"g4\" id=\"type-grid\"><\/div>\n  <div style=\"margin-top:24px;display:flex;justify-content:flex-end\">\n    <button class=\"btn btn-dark btn-xl btn-arrow\" id=\"btn-next-type\" onclick=\"nav('b2')\" disabled>Continue to Blueprint&nbsp;<\/button>\n  <\/div>\n<\/div>\n\n<!-- B2 -->\n<div class=\"view\" id=\"v-b2\">\n  <div style=\"margin-bottom:32px\">\n    <div class=\"eyebrow\">Build \u2014 Step 2 of 5<\/div>\n    <h1 class=\"pg-h1\">Define &amp; generate blueprint<\/h1>\n    <p class=\"pg-sub\">Fill in the specifics. The richer your input, the deeper the output.<\/p>\n  <\/div>\n  <div class=\"g2\" style=\"gap:22px\">\n    <div class=\"col gap14\">\n      <div class=\"card\">\n        <div class=\"row gap10\" style=\"margin-bottom:18px\">\n          <div id=\"b2-type-icon\" style=\"width:36px;height:36px;background:#E8E2D5;display:grid;place-items:center;flex-shrink:0\"><\/div>\n          <div><div class=\"ct\" id=\"b2-type-lbl\">Selected Type<\/div><div class=\"cs\" id=\"b2-type-desc\">Configure below<\/div><\/div>\n        <\/div>\n        <div id=\"b2-mode-chips\"><\/div>\n        <div id=\"b2-fields\"><\/div>\n        <button class=\"btn btn-dark btn-full btn-arrow\" style=\"margin-top:14px\" id=\"btn-gen-bp\" onclick=\"genBlueprint()\">Cast Blueprint&nbsp;<\/button>\n      <\/div>\n    <\/div>\n    <div class=\"card\" id=\"b2-out\" style=\"min-height:380px;padding:0;overflow:hidden\">\n      <div class=\"empty\" style=\"padding:24px\">\n        <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#A09880\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><polyline points=\"14 2 14 8 20 8\"\/><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"\/><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"\/><\/svg>\n        <span>Your blueprint will appear here<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n  <div style=\"margin-top:16px;display:flex;justify-content:flex-end\">\n    <button class=\"btn btn-ghost btn-arrow\" onclick=\"nav('b3')\" style=\"gap:8px\">Next: Capabilities&nbsp;<\/button>\n  <\/div>\n<\/div>\n\n<!-- B3 -->\n<div class=\"view\" id=\"v-b3\">\n  <div style=\"margin-bottom:32px\">\n    <div class=\"eyebrow\">Build \u2014 Step 3 of 5<\/div>\n    <h1 class=\"pg-h1\">Capability modules<\/h1>\n    <p class=\"pg-sub\">Toggle what your product can do. Your deployment manual references everything active here.<\/p>\n  <\/div>\n  <div class=\"card\" style=\"margin-bottom:16px\">\n    <div class=\"between\"><div><div class=\"ct\">Active modules<\/div><div class=\"cs\">Mix freely across categories<\/div><\/div><span class=\"badge bg\" id=\"cap-badge\">0 active<\/span><\/div>\n  <\/div>\n  <div class=\"g2\" id=\"cap-grid\"><\/div>\n  <div style=\"margin-top:16px;display:flex;justify-content:flex-end\">\n    <button class=\"btn btn-ghost btn-arrow\" onclick=\"nav('b4')\">Build Workflow&nbsp;<\/button>\n  <\/div>\n<\/div>\n\n<!-- B4 -->\n<div class=\"view\" id=\"v-b4\">\n  <div style=\"margin-bottom:32px\">\n    <div class=\"eyebrow\">Build \u2014 Step 4 of 5<\/div>\n    <h1 class=\"pg-h1\">Product workflow<\/h1>\n    <p class=\"pg-sub\">End-to-end execution flow, delivery channels, and behavior rules.<\/p>\n  <\/div>\n  <div class=\"card\" style=\"margin-bottom:16px\">\n    <div class=\"between\">\n      <div><div class=\"ct\">Auto-generated from your configuration<\/div><div class=\"cs\">Updates when capabilities or channels change<\/div><\/div>\n      <button class=\"btn btn-ghost btn-sm\" onclick=\"buildWorkflow()\">\n        <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23 4 23 10 17 10\"\/><polyline points=\"1 20 1 14 7 14\"\/><path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\"\/><\/svg>\n        Regenerate\n      <\/button>\n    <\/div>\n  <\/div>\n  <div class=\"g2\" style=\"gap:18px\">\n    <div class=\"col gap14\">\n      <div class=\"card\"><div class=\"ct\" style=\"margin-bottom:14px\">Execution Flow<\/div><div id=\"wf-steps\"><\/div><\/div>\n    <\/div>\n    <div class=\"col gap14\">\n      <div class=\"card\"><div class=\"ct\" style=\"margin-bottom:12px\">Delivery Channels<\/div><div id=\"wf-channels\"><\/div><\/div>\n      <div class=\"card\">\n        <div class=\"ct\" style=\"margin-bottom:11px\">Behavior Rules<\/div>\n        <div id=\"wf-rules\"><\/div>\n        <div style=\"display:flex;gap:8px;margin-top:12px;align-items:flex-end\">\n          <div style=\"flex:1\"><input type=\"text\" id=\"rule-inp\" placeholder=\"Add a rule\u2026\" onkeydown=\"if(event.key==='Enter')addRule()\" style=\"font-size:15px\"\/><\/div>\n          <button class=\"btn btn-dark btn-sm\" onclick=\"addRule()\">+<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n  <div style=\"margin-top:16px;display:flex;justify-content:flex-end\">\n    <button class=\"btn btn-ghost btn-arrow\" onclick=\"nav('b5')\">Deployment Manual&nbsp;<\/button>\n  <\/div>\n<\/div>\n\n<!-- B5 -->\n<div class=\"view\" id=\"v-b5\">\n  <div style=\"margin-bottom:32px\">\n    <div class=\"eyebrow\">Build \u2014 Step 5 of 5<\/div>\n    <h1 class=\"pg-h1\">Deployment manual<\/h1>\n    <p class=\"pg-sub\">Real tools, real prices, real build phases \u2014 generated from everything you configured.<\/p>\n  <\/div>\n  <div class=\"g2\" style=\"gap:22px\">\n    <div class=\"col gap12\">\n      <div class=\"inset-accent\"><div class=\"lbl\">Session summary<\/div><div id=\"b5-summary\" class=\"col gap6\"><\/div><\/div>\n      <button class=\"btn btn-dark btn-full btn-arrow\" id=\"btn-gen-deploy\" onclick=\"genDeploy()\">Generate Manual&nbsp;<\/button>\n      <button class=\"btn btn-ghost btn-full\" id=\"btn-copy-deploy\" onclick=\"copyDeploy()\" disabled>Copy Full Manual<\/button>\n      <div class=\"card\" style=\"background:rgba(91,71,229,.05);border-color:rgba(62,107,88,.35)\">\n        <div class=\"ct\" style=\"margin-bottom:6px;font-size:13px\">Build track complete<\/div>\n        <div class=\"body\" style=\"font-size:12px;margin-bottom:12px\">Move to the Monetize track to generate pricing tiers, landing page copy, outreach, and revenue projections.<\/div>\n        <button class=\"btn btn-purple btn-full btn-arrow\" onclick=\"nav('m1')\">Go to Monetize&nbsp;<\/button>\n      <\/div>\n    <\/div>\n    <div class=\"card\" id=\"b5-out\" style=\"min-height:450px;max-height:78vh;overflow-y:auto;padding:0\">\n      <div class=\"empty\" style=\"padding:24px\">\n        <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#A09880\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><\/svg>\n        <span>Tech stack, build phases, launch checklist and cost estimates appear here<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- M1 -->\n<div class=\"view\" id=\"v-m1\">\n  <div style=\"margin-bottom:32px\">\n    <div class=\"eyebrow\">Monetize \u2014 Step A of E<\/div>\n    <h1 class=\"pg-h1\">Define your offer<\/h1>\n    <p class=\"pg-sub\">Context from your Build session is pre-filled. Adjust before generating your full monetization package.<\/p>\n  <\/div>\n  <div class=\"g2\" style=\"gap:22px\">\n    <div class=\"card\">\n      <div class=\"lbl\" style=\"margin-bottom:10px\">Industry \/ Niche<\/div>\n      <input type=\"text\" id=\"m-industry\" value=\"Healthcare\" style=\"margin-bottom:20px\"\/>\n      <div class=\"lbl\" style=\"margin-bottom:10px\">Problem you solve<\/div>\n      <textarea id=\"m-problem\" rows=\"3\" style=\"margin-bottom:20px\">Patients missing appointments, high no-show rate, staff wasting time on manual reminders<\/textarea>\n      <div class=\"lbl\" style=\"margin-bottom:10px\">Ideal customer<\/div>\n      <input type=\"text\" id=\"m-customer\" value=\"Private dental clinics, 3\u201315 staff, 20+ appointments\/day\" style=\"margin-bottom:20px\"\/>\n      <div class=\"lbl\" style=\"margin-bottom:10px\">Key differentiator<\/div>\n      <input type=\"text\" id=\"m-diff\" value=\"Fully autonomous \u2014 works 24\/7 without any staff involvement\" style=\"margin-bottom:20px\"\/>\n      <div class=\"lbl\">Pricing model<\/div>\n      <div class=\"chip-group\" id=\"m-pricing-btns\"><\/div>\n      <div class=\"lbl\">Price: $<span id=\"m-price-disp\">97<\/span>\/mo<\/div>\n      <input type=\"range\" id=\"m-price-slider\" min=\"9\" max=\"497\" value=\"97\" oninput=\"document.getElementById('m-price-disp').textContent=this.value\" style=\"margin-bottom:18px\"\/>\n    <\/div>\n    <div class=\"card\">\n      <div class=\"ct\" style=\"margin-bottom:16px\">Offer snapshot<\/div>\n      <div class=\"col gap10\">\n        <div class=\"inset\"><div class=\"lbl\">Product<\/div><div style=\"font-family:'Instrument Serif',serif;font-style:italic;font-size:18px;color:#13120D\" id=\"m1-name\">\u2014<\/div><div class=\"cs\" id=\"m1-type\">\u2014<\/div><\/div>\n        <div class=\"inset\"><div class=\"lbl\">Price<\/div><div style=\"font-family:'Instrument Serif',serif;font-style:italic;font-size:32px;color:#13120D\">$<span id=\"m1-price\">97<\/span><span style=\"font-size:14px;font-style:normal;color:#7A7266\">\/mo<\/span><\/div><div class=\"cs\" id=\"m1-model\">Subscription<\/div><\/div>\n        <div class=\"inset\"><div class=\"lbl\">Target<\/div><div class=\"body\" style=\"font-size:12.5px\" id=\"m1-target\">Private dental clinics\u2026<\/div><\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n  <div class=\"card\" style=\"margin-top:16px\">\n    <button class=\"btn btn-dark btn-full btn-arrow\" onclick=\"nav('m2')\">Continue to Sales Package&nbsp;<\/button>\n  <\/div>\n<\/div>\n\n<!-- M2 -->\n<div class=\"view\" id=\"v-m2\">\n  <div style=\"margin-bottom:32px\">\n    <div class=\"eyebrow\">Monetize \u2014 Step B of E<\/div>\n    <h1 class=\"pg-h1\">Sales package<\/h1>\n    <p class=\"pg-sub\">Product name, tagline, hero copy, bullets, and tiered pricing.<\/p>\n  <\/div>\n  <div class=\"g2\" style=\"gap:22px\">\n    <div class=\"card\"><div class=\"ct\" style=\"margin-bottom:6px\">AI Sales Package<\/div><div class=\"cs\" style=\"margin-bottom:18px\">Generates name, tagline, hero, bullets, and pricing tiers from your offer.<\/div>\n      <button class=\"btn btn-dark btn-full btn-arrow\" id=\"btn-gen-offer\" onclick=\"genOffer()\">Generate Sales Package&nbsp;<\/button>\n    <\/div>\n    <div class=\"card\" id=\"m2-out\" style=\"min-height:260px\"><div class=\"empty\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#A09880\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"16.5\" y1=\"9.4\" x2=\"7.5\" y2=\"4.21\"\/><path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"\/><\/svg><span>Name, tagline, hero, bullets, and pricing tiers appear here<\/span><\/div><\/div>\n  <\/div>\n  <div style=\"margin-top:16px;display:flex;justify-content:flex-end\"><button class=\"btn btn-ghost btn-arrow\" onclick=\"nav('m3')\">Next: Landing Page&nbsp;<\/button><\/div>\n<\/div>\n\n<!-- M3 -->\n<div class=\"view\" id=\"v-m3\">\n  <div style=\"margin-bottom:32px\">\n    <div class=\"eyebrow\">Monetize \u2014 Step C of E<\/div>\n    <h1 class=\"pg-h1\">Landing page copy<\/h1>\n    <p class=\"pg-sub\">Hero, problem, solution, features, testimonials, FAQ, and CTA \u2014 ready to paste into any builder.<\/p>\n  <\/div>\n  <div class=\"card\" style=\"margin-bottom:16px\"><button class=\"btn btn-dark btn-full btn-arrow\" id=\"btn-gen-lp\" onclick=\"genLP()\">Generate Landing Page Copy&nbsp;<\/button><\/div>\n  <div class=\"card\" id=\"m3-out\" style=\"min-height:180px\"><div class=\"empty\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#A09880\" stroke-width=\"1.2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"1\"\/><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"\/><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"\/><\/svg><span>Full landing page copy appears here<\/span><\/div><\/div>\n  <div style=\"margin-top:16px;display:flex;justify-content:flex-end\"><button class=\"btn btn-ghost btn-arrow\" onclick=\"nav('m4')\">Next: Outreach&nbsp;<\/button><\/div>\n<\/div>\n\n<!-- M4 -->\n<div class=\"view\" id=\"v-m4\">\n  <div style=\"margin-bottom:32px\">\n    <div class=\"eyebrow\">Monetize \u2014 Step D of E<\/div>\n    <h1 class=\"pg-h1\">Cold outreach sequence<\/h1>\n    <p class=\"pg-sub\">3-email sequence \u2014 intro, value follow-up, and break-up \u2014 written for your exact ICP.<\/p>\n  <\/div>\n  <div class=\"card\" style=\"margin-bottom:16px\"><button class=\"btn btn-dark btn-full btn-arrow\" id=\"btn-gen-out\" onclick=\"genOutreach()\">Generate 3-Email Sequence&nbsp;<\/button><\/div>\n  <div class=\"col gap12\" id=\"m4-out\"><div class=\"card\"><div class=\"empty\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#A09880\" stroke-width=\"1.2\"><path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"\/><polyline points=\"22,6 12,13 2,6\"\/><\/svg><span>Three ready-to-send emails appear here<\/span><\/div><\/div><\/div>\n  <div style=\"margin-top:16px;display:flex;justify-content:flex-end\"><button class=\"btn btn-ghost btn-arrow\" onclick=\"nav('m5')\">Next: Revenue Model&nbsp;<\/button><\/div>\n<\/div>\n\n<!-- M5 -->\n<div class=\"view\" id=\"v-m5\">\n  <div style=\"margin-bottom:32px\">\n    <div class=\"eyebrow\">Monetize \u2014 Step E of E<\/div>\n    <h1 class=\"pg-h1\">Revenue model<\/h1>\n    <p class=\"pg-sub\">Adjust growth assumptions. See your business at each milestone.<\/p>\n  <\/div>\n  <div class=\"g2\" style=\"gap:22px\">\n    <div class=\"col gap14\">\n      <div class=\"card\">\n        <div class=\"ct\" style=\"margin-bottom:12px\">Revenue Projections<\/div>\n        <div class=\"cs\" style=\"margin-bottom:18px\">At $<span id=\"rev-pr\">97<\/span>\/mo. Drag each slider.<\/div>\n        <div class=\"lbl\">Month 3 customers<\/div><input type=\"range\" id=\"rc3\" min=\"1\" max=\"80\" value=\"8\" oninput=\"calcRev()\" style=\"margin-bottom:14px\"\/>\n        <div class=\"lbl\">Month 6 customers<\/div><input type=\"range\" id=\"rc6\" min=\"5\" max=\"200\" value=\"30\" oninput=\"calcRev()\" style=\"margin-bottom:14px\"\/>\n        <div class=\"lbl\">Month 12 customers<\/div><input type=\"range\" id=\"rc12\" min=\"10\" max=\"400\" value=\"80\" oninput=\"calcRev()\" style=\"margin-bottom:14px\"\/>\n        <div class=\"lbl\">Monthly churn (%)<\/div><input type=\"range\" id=\"rch\" min=\"0\" max=\"15\" value=\"5\" oninput=\"calcRev()\" style=\"margin-bottom:18px\"\/>\n        <div id=\"rev-out\" class=\"col gap9\"><\/div>\n      <\/div>\n    <\/div>\n    <div class=\"col gap14\">\n      <div class=\"card\" style=\"background:rgba(62,107,88,.04);border-color:rgba(62,107,88,.35)\">\n        <div class=\"ct\" style=\"margin-bottom:12px\">Go-To-Market Checklist<\/div>\n        <div id=\"gtm-list\" class=\"col gap7\"><\/div>\n      <\/div>\n      <div class=\"card\">\n        <div class=\"ct\" style=\"margin-bottom:7px\">Export full session<\/div>\n        <div class=\"cs\" style=\"margin-bottom:14px\">Copy blueprint, sales copy, emails, and projections to clipboard.<\/div>\n        <button class=\"btn btn-dark btn-full\" onclick=\"exportAll()\">Copy Full Package<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<\/main>\n<\/div><!-- \/layout -->\n\n<div id=\"toast\"><\/div>\n\n<script>\n\/* \u2550\u2550 BYOK \u2550\u2550 *\/\nvar BYOK_PROVIDERS={\n  anthropic:{label:'Claude \u2014 Anthropic',ph:'sk-ant-api...',model:'claude-sonnet-4-20250514'},\n  openai:{label:'GPT-4o \u2014 OpenAI',ph:'sk-proj-...',model:'gpt-4o'},\n  google:{label:'Gemini 1.5 Flash \u2014 Google',ph:'AIzaSy...',model:'gemini-1.5-flash'},\n  xai:{label:'Grok-2 \u2014 xAI',ph:'xai-...',model:'grok-2-latest'},\n  mistral:{label:'Mistral Large',ph:'your-key...',model:'mistral-large-latest'},\n  deepseek:{label:'DeepSeek Chat',ph:'sk-...',model:'deepseek-chat'},\n  cohere:{label:'Command R+ \u2014 Cohere',ph:'your-key...',model:'command-r-plus'},\n  groq:{label:'Llama 3.3 70B \u2014 Groq',ph:'gsk_...',model:'llama-3.3-70b-versatile'},\n  together:{label:'Llama 3.3 \u2014 Together AI',ph:'your-key...',model:'meta-llama\/Llama-3.3-70B-Instruct-Turbo'},\n  fireworks:{label:'Llama 3.1 405B \u2014 Fireworks',ph:'fw-...',model:'accounts\/fireworks\/models\/llama-v3p1-405b-instruct'},\n  perplexity:{label:'Sonar Pro \u2014 Perplexity',ph:'pplx-...',model:'sonar-pro'}\n};\n\nfunction gwProviderChange(){\n  var p=document.getElementById('gw-provider').value;\n  var inp=document.getElementById('gw-key');\n  if(inp)inp.placeholder=BYOK_PROVIDERS[p].ph;\n}\nfunction gwConnect(){\n  var key=(document.getElementById('gw-key').value||'').trim();\n  var provider=document.getElementById('gw-provider').value;\n  if(!key){document.getElementById('gw-key').style.borderColor='#E05252';setTimeout(function(){document.getElementById('gw-key').style.borderColor='';},1200);return;}\n  sessionStorage.setItem('ortive_key',key);\n  sessionStorage.setItem('ortive_provider',provider);\n  showConnected(provider);\n  toast(BYOK_PROVIDERS[provider].label+' connected.');\n}\nfunction gwReset(){\n  sessionStorage.removeItem('ortive_key');\n  sessionStorage.removeItem('ortive_provider');\n  document.getElementById('gw-key').value='';\n  document.getElementById('byok-dis').classList.remove('hide');\n  document.getElementById('byok-con').classList.remove('show');\n}\nfunction showConnected(provider){\n  document.getElementById('byok-name').textContent=BYOK_PROVIDERS[provider].label;\n  document.getElementById('byok-dis').classList.add('hide');\n  document.getElementById('byok-con').classList.add('show');\n}\n\n\/* \u2550\u2550 STATE \u2550\u2550 *\/\nvar SHEETS='https:\/\/script.google.com\/macros\/s\/AKfycbyIaKOXR5FZqN2CPPugCHXQXOpsdUgftucEfQl7XqbYygHiKy48wNvzVzo9WKGB1jsbsg\/exec';\nvar USES_KEY='ortive_uses_v2';\nvar MAX_USES=3;\n\nfunction getUses(){return parseInt(localStorage.getItem(USES_KEY)||'0');}\nfunction incrementUses(){localStorage.setItem(USES_KEY,getUses()+1);}\nfunction checkCap(){if(getUses()>=MAX_USES){openCapPopup();return false;}return true;}\nfunction openCapPopup(){var ov=document.getElementById('cap-overlay');if(ov)ov.classList.remove('hidden');}\nfunction closeCapPopup(){var ov=document.getElementById('cap-overlay');if(ov)ov.classList.add('hidden');}\nfunction submitCapEmail(){\n  var em=(document.getElementById('cap-email')||{}).value||'';\n  if(!em||!em.includes('@'))return;\n  var btn=document.querySelector('.cap-form button');if(btn){btn.textContent='Sending\u2026';btn.disabled=true;}\n  fetch(SHEETS,{method:'POST',mode:'no-cors',headers:{'Content-Type':'application\/json'},body:JSON.stringify({email:em,source:'ortive-studio-en',ts:new Date().toISOString()})})\n  .finally(function(){\n    var f=document.querySelector('.cap-form');if(f)f.style.display='none';\n    var s=document.getElementById('cap-success');if(s)s.style.display='block';\n    var n=document.querySelector('.cap-note');if(n)n.style.display='none';\n  });\n}\nvar S={\n  type:null,typeName:'',typeDesc:'',typeColor:'',typeBg:'',typeIcon:'',\n  modeChip:'',name:'',desc:'',\n  caps:{},\n  rules:['Always verify user identity before sharing personalized data.','Escalate to a human agent after two expressions of frustration.','Surface pricing offer when buying intent is detected.'],\n  channels:{'Phone \/ Voice':false,'Chat Widget':true,'WhatsApp':true,'SMS':false,'Email':true,'REST API':false},\n  blueprint:null,bpTabs:[],deployRaw:'',\n  offerData:null,lpData:null,outreachData:null,pricingModel:'Subscription'\n};\n\n\/* \u2550\u2550 PRODUCT TYPES \u2550\u2550 *\/\nvar TYPES=[\n  {id:'agent',name:'AI Agent',color:'#13120D',bg:'#E8E2D5',desc:'Autonomous AI that qualifies, books, and follows up 24\/7.',icon:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"1\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"currentColor\" stroke=\"none\"\/><\/svg>',chips:['Lead Qualification','Customer Support','Appointment Booking','Sales Outreach','Patient Onboarding','Data Collection','Internal Ops','Custom'],chiplabel:'Agent Type',extra:[{id:'channel',label:'Delivery Channel',type:'select',opts:['WhatsApp','Voice \/ Phone','Chat Widget','SMS','Email','Slack \/ Teams','API','Multi-channel']},{id:'role',label:'Agent Role',placeholder:'e.g. Qualify inbound leads and book demos'},{id:'buyer',label:'Who Buys This?',placeholder:'e.g. B2B SaaS founders, $50k\u2013$500k MRR'}]},\n  {id:'saas',name:'SaaS App',color:'#13120D',bg:'#E8E2D5',desc:'Web platform customers log into and pay monthly.',icon:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"1\"\/><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"\/><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"\/><\/svg>',chips:['CRM \/ Sales','Marketing','Productivity','Analytics','HR \/ People Ops','Finance \/ Billing','DevOps \/ Infra','Custom'],chiplabel:'SaaS Category',extra:[{id:'comp',label:'Primary Competitor',placeholder:'e.g. HubSpot, Salesforce'},{id:'startprice',label:'Target Starting Price',placeholder:'e.g. $99\/mo per seat'},{id:'icp',label:'Ideal Customer Profile',placeholder:'e.g. RevOps teams at Series A\u2013B startups'}]},\n  {id:'chatbot',name:'Chatbot',color:'#13120D',bg:'#E8E2D5',desc:'Conversational widget embedded in a website or app.',icon:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"\/><\/svg>',chips:['Lead Capture','FAQ Bot','Support Bot','Onboarding Guide','Product Recommendation','Booking Bot','Survey Bot','Custom'],chiplabel:'Chatbot Purpose',extra:[{id:'platform',label:'Embedded On',type:'select',opts:['Website','Web App','Mobile App','Messenger','Slack','WhatsApp','Multiple']},{id:'user',label:'End User',placeholder:'e.g. SaaS free trial users'}]},\n  {id:'api',name:'REST API',color:'#13120D',bg:'#E8E2D5',desc:'Headless AI endpoint developers integrate into products.',icon:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"16 18 22 12 16 6\"\/><polyline points=\"8 6 2 12 8 18\"\/><\/svg>',chips:['Resume Scoring','Sentiment Analysis','Content Moderation','Entity Extraction','Classification','Translation','Image Analysis','Custom'],chiplabel:'API Function',extra:[{id:'output',label:'Response Format',type:'select',opts:['JSON','JSON + Confidence Score','Structured Schema','Plain text','Webhook event']},{id:'devbuyer',label:'Who Builds With This?',placeholder:'e.g. HR platform developers, e-commerce teams'}]},\n  {id:'automation',name:'Automation Flow',color:'#13120D',bg:'#E8E2D5',desc:'AI workflow that triggers actions across your entire stack.',icon:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 2a3 3 0 1 0 0 6m7-3a3 3 0 1 0 0 6M5 9a3 3 0 1 0 0 6m7 3v-3m-3.5-3.5 2 2m5-2-2 2\"\/><\/svg>',chips:['Invoice Processing','Lead Routing','Contract Review','Inventory Alerts','Social Scheduling','Onboarding Flow','Report Generation','Custom'],chiplabel:'Automation Type',extra:[{id:'trigger',label:'Primary Trigger',placeholder:'e.g. New form submission, inbound email, nightly schedule'},{id:'stack',label:'Tools in Your Stack',placeholder:'e.g. HubSpot, Slack, Google Sheets, Notion'}]},\n  {id:'mobile',name:'Mobile App',color:'#13120D',bg:'#E8E2D5',desc:'Native or PWA mobile experience powered by AI.',icon:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"1\"\/><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"\/><\/svg>',chips:['Fitness \/ Wellness','Language Learning','Finance \/ Budget','Health Monitoring','Productivity','Education','Dating \/ Social','Custom'],chiplabel:'App Category',extra:[{id:'platform',label:'Platform',type:'select',opts:['iOS + Android','iOS only','Android only','Progressive Web App (PWA)']},{id:'muser',label:'Target User',placeholder:'e.g. Solo founders, SMB teams, Gen Z'}]},\n  {id:'plugin',name:'Plugin \/ Extension',color:'#13120D',bg:'#E8E2D5',desc:'Browser extension or CMS plugin adding AI to existing tools.',icon:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 2v4M4 12H2M6.34 6.34 4.93 4.93M17.66 6.34l1.41-1.41M22 12h-2M12 18v4M6.34 17.66l-1.41 1.41M17.66 17.66l1.41 1.41\"\/><\/svg>',chips:['Chrome Extension','WordPress Plugin','Shopify App','Figma Plugin','Notion Integration','VS Code Extension','Zapier App','Custom'],chiplabel:'Plugin Platform',extra:[{id:'hostapp',label:'Host Application',placeholder:'e.g. Chrome, WordPress, Shopify'},{id:'pluguser',label:'Who Uses This?',placeholder:'e.g. Copywriters, e-commerce store owners'}]},\n  {id:'copilot',name:'AI Copilot',color:'#13120D',bg:'#E8E2D5',desc:'AI assistant embedded inside another product to guide users.',icon:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 2a7 7 0 0 1 7 7c0 3.87-4 7-7 9-3-2-7-5.13-7-9a7 7 0 0 1 7-7z\"\/><circle cx=\"12\" cy=\"9\" r=\"2\"\/><\/svg>',chips:['CRM Copilot','Writing Assistant','Code Review','Data Analysis','Design Feedback','Legal Review','Finance Advisory','Custom'],chiplabel:'Copilot Function',extra:[{id:'host',label:'Host Product \/ Platform',placeholder:'e.g. Notion, Figma, Airtable, your own SaaS'},{id:'guidance',label:'What It Guides Users To Do',placeholder:'e.g. Write better outreach, fix code bugs, find data insights'}]}\n];\n\nvar CAPS={\n  'AI Core':['LLM Reasoning','Knowledge Base','Long-term Memory','RAG Pipeline','Fine-tuning','Embeddings Search'],\n  'Communication':['Chat Widget','Voice (Phone)','WhatsApp','Email Automation','SMS','Social DMs'],\n  'Data & Logic':['Lead Scoring','Decision Trees','Data Extraction','Classification','Summarization','Translation'],\n  'Actions':['Calendar Booking','CRM Write','Invoice Sending','Payment Collection','Document Generation','Database Write'],\n  'Integration':['Zapier \/ Make','Webhooks','REST API Calls','OAuth Flow','Stripe Billing','Google Workspace'],\n  'Infrastructure':['User Auth','Multi-tenancy','Usage Analytics','Uptime Monitoring','Rate Limiting','CDN \/ Edge']\n};\n\n\/* \u2550\u2550 MOBILE \u2550\u2550 *\/\nfunction openSide(){document.getElementById('sidebar').classList.add('open');document.getElementById('mob-ov').classList.add('on');document.body.style.overflow='hidden'}\nfunction closeSide(){document.getElementById('sidebar').classList.remove('open');document.getElementById('mob-ov').classList.remove('on');document.body.style.overflow=''}\n\n\/* \u2550\u2550 NAV \u2550\u2550 *\/\nvar STEP_LABELS={b1:'Build \u00b7 Step 1',b2:'Build \u00b7 Step 2',b3:'Build \u00b7 Step 3',b4:'Build \u00b7 Step 4',b5:'Build \u00b7 Step 5',m1:'Monetize \u00b7 A',m2:'Monetize \u00b7 B',m3:'Monetize \u00b7 C',m4:'Monetize \u00b7 D',m5:'Monetize \u00b7 E'};\nfunction nav(v,el){\n  document.querySelectorAll('.view').forEach(function(x){x.classList.remove('on')});\n  document.querySelectorAll('.nav-item').forEach(function(x){x.classList.remove('on')});\n  var vEl=document.getElementById('v-'+v);if(vEl){vEl.classList.add('on');vEl.style.animation='none';void vEl.offsetWidth;vEl.style.animation='up .3s ease both'}\n  var nEl=el||document.querySelector('.nav-item[data-v=\"'+v+'\"]');if(nEl)nEl.classList.add('on');\n  var ms=document.getElementById('mast-step');if(ms&&STEP_LABELS[v])ms.innerHTML=STEP_LABELS[v].replace('\u00b7','<span>\u00b7<\/span>');\n  var ml=document.getElementById('mob-label');if(ml&&STEP_LABELS[v])ml.textContent=STEP_LABELS[v];\n  closeSide();\n  if(v==='b2')setupB2();\n  if(v==='b3'){buildCapGrid();if(Object.values(S.caps).some(Boolean)){mark('b3');sessionStorage.setItem('os_done_b3','1');}}\n  if(v==='b4')buildWorkflow();\n  if(v==='b5')setupB5();\n  if(v==='m1')setupM1();\n  if(v==='m5'){var _ps=document.getElementById('m-price-slider');var _rp=document.getElementById('rev-pr');if(_ps&&_rp)_rp.textContent=_ps.value;calcRev();buildGTM();}\n  window.scrollTo(0,0);\n}\n\n\/* \u2550\u2550 B1 \u2550\u2550 *\/\nfunction buildTypeGrid(){\n  var g=document.getElementById('type-grid');if(!g)return;\n  TYPES.forEach(function(t){\n    var c=document.createElement('div');c.className='ptype'+(S.type===t.id?' sel':'');\n    c.innerHTML='<div class=\"ptype-icon\">'+t.icon.replace('<svg','<svg width=\"18\" height=\"18\" stroke=\"#13120D\"')+'<\/div><div class=\"ptype-name\">'+t.name+'<\/div><div class=\"ptype-desc\">'+t.desc+'<\/div>';\n    c.onclick=function(){S.type=t.id;S.typeName=t.name;S.typeDesc=t.desc;S.typeColor=t.color;S.typeBg=t.bg;S.typeIcon=t.icon;document.querySelectorAll('.ptype').forEach(function(x){x.classList.remove('sel')});c.classList.add('sel');document.getElementById('btn-next-type').disabled=false;mark('b1');sessionStorage.setItem('os_done_b1','1');};\n    g.appendChild(c);\n  });\n}\n\n\/* \u2550\u2550 B2 \u2550\u2550 *\/\nfunction setupB2(){\n  if(!S.type)return;\n  var t=TYPES.find(function(x){return x.id===S.type});if(!t)return;\n  var ic=document.getElementById('b2-type-icon');if(ic){ic.innerHTML=t.icon.replace('<svg','<svg width=\"16\" height=\"16\" stroke=\"#13120D\"')}\n  var lb=document.getElementById('b2-type-lbl');if(lb)lb.textContent=t.name;\n  var db=document.getElementById('b2-type-desc');if(db)db.textContent=t.desc;\n  var mc=document.getElementById('b2-mode-chips');\n  if(mc){mc.innerHTML='<div class=\"lbl\">'+t.chiplabel+'<\/div><div class=\"chip-group\" id=\"mode-chips-inner\"><\/div>';var ci=document.getElementById('mode-chips-inner');t.chips.forEach(function(chip){var btn=document.createElement('button');btn.className='chip'+(S.modeChip===chip?' on':'');btn.innerHTML='<svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>'+chip;btn.onclick=function(){document.querySelectorAll('#mode-chips-inner .chip').forEach(function(x){x.classList.remove('on')});btn.classList.add('on');S.modeChip=chip;};ci.appendChild(btn);});}\n  var df=document.getElementById('b2-fields');if(!df)return;df.innerHTML='';\n  df.innerHTML+='<div class=\"lbl\" style=\"margin-top:16px\">Product name<\/div><input type=\"text\" id=\"b2-name\" placeholder=\"e.g. DentaFlow AI\" style=\"margin-bottom:20px\"\/>';\n  t.extra.forEach(function(f){var id='b2-'+f.id;df.innerHTML+='<div class=\"lbl\">'+f.label+'<\/div>';if(f.type==='select'){var opts=(f.opts||[]).map(function(o){return'<option>'+o+'<\/option>'}).join('');df.innerHTML+='<select id=\"'+id+'\" style=\"margin-bottom:20px\">'+opts+'<\/select>';}else{df.innerHTML+='<input type=\"text\" id=\"'+id+'\" placeholder=\"'+(f.placeholder||'')+'\" style=\"margin-bottom:20px\"\/>';}});\n  df.innerHTML+='<div class=\"lbl\">Core problem &amp; what it solves<\/div><textarea id=\"b2-desc\" rows=\"3\" placeholder=\"e.g. SDRs take 4+ hours to respond. 60% of leads go cold before first contact.\"><\/textarea>';\n}\n\nasync function genBlueprint(){\n  if(!checkCap())return;\n  var t=TYPES.find(function(x){return x.id===S.type});\n  var nm=(document.getElementById('b2-name')||{}).value||'';\n  var desc=(document.getElementById('b2-desc')||{}).value||'';\n  if(!desc){toast('Describe your product first.');return}\n  S.name=nm||S.typeName;S.desc=desc;\n  var extras=[];if(t)t.extra.forEach(function(f){var el=document.getElementById('b2-'+f.id);if(el&&el.value)extras.push(f.label+': '+el.value)});\n  var btn=document.getElementById('btn-gen-bp'),out=document.getElementById('b2-out');\n  btn.disabled=true;btn.innerHTML='<span class=\"spin\"><\/span> Casting\u2026';\n  out.innerHTML=skelHTML();\n  var isAgent=S.type==='agent',isSaas=S.type==='saas';\n  var agentExtra=isAgent?',\"systemPrompt\":\"full 200-word system prompt\",\"opening\":\"opening message + 3 qualification questions\",\"objections\":\"top 3 objections with verbatim responses\",\"handoff\":\"escalation and close sequence\"':'';\n  var saasExtra=isSaas?',\"icpDetail\":{\"firmographics\":\"...\",\"psychographics\":\"...\",\"buyingTriggers\":[\"t1\",\"t2\",\"t3\"]},\"competitors\":[{\"name\":\"c1\",\"weakness\":\"w1\",\"edge\":\"e1\"},{\"name\":\"c2\",\"weakness\":\"w2\",\"edge\":\"e2\"}],\"pricingTiers\":[{\"name\":\"Starter\",\"price\":\"$X\/mo\",\"for\":\"who\",\"features\":[\"f1\",\"f2\",\"f3\"]},{\"name\":\"Growth\",\"price\":\"$X\/mo\",\"for\":\"who\",\"features\":[\"f1\",\"f2\",\"f3\",\"f4\"],\"recommended\":true},{\"name\":\"Enterprise\",\"price\":\"$X\/mo\",\"for\":\"who\",\"features\":[\"f1\",\"f2\",\"f3\",\"f4\",\"f5\"]}],\"coldEmail\":{\"subject\":\"subject line\",\"body\":\"cold email body 100 words [FIRST NAME] [COMPANY]\"}':'';\n  var prompt='You are an expert AI product architect. Generate a detailed product blueprint.\\n\\nType: '+S.typeName+'\\nMode: '+(S.modeChip||'General')+'\\nName: '+S.name+'\\nDescription: '+desc+'\\nExtra context: '+extras.join(' | ')+'\\n\\nReturn ONLY valid JSON. Output a single compact JSON object. No markdown, no explanation. Start with { end with }:\\n{\"productName\":\"...\",\"tagline\":\"...\",\"elevator\":\"2-sentence pitch\",\"coreProblem\":\"...\",\"mvpFeatures\":[\"f1\",\"f2\",\"f3\",\"f4\",\"f5\",\"f6\"],\"v2Features\":[\"f1\",\"f2\",\"f3\"],\"techStack\":{\"primary\":\"...\",\"ai\":\"...\",\"database\":\"...\",\"auth\":\"...\",\"hosting\":\"...\",\"integrations\":\"...\"},\"stackRationale\":\"...\",\"icp\":\"...\",\"revenueModel\":\"...\",\"revenueRange\":\"...\"'+agentExtra+saasExtra+',\"launchSteps\":[{\"title\":\"phase\",\"detail\":\"what\"},{\"title\":\"phase\",\"detail\":\"what\"},{\"title\":\"phase\",\"detail\":\"what\"},{\"title\":\"phase\",\"detail\":\"what\"}],\"risks\":[\"r1\",\"r2\",\"r3\"]}';\n  try{\n    var _bpTok=isSaas?4000:isAgent?3200:2400;\n    var res=await apiFetch(prompt,_bpTok);\n    S.blueprint=res;incrementUses();mark('b2');sessionStorage.setItem('os_done_b2','1');\n    renderBlueprint(res);\n  }catch(e){out.innerHTML='<div style=\"padding:22px\"><div class=\"inset\" style=\"border-color:rgba(224,82,82,.4);background:rgba(224,82,82,.06)\"><p style=\"font-family:Geist Mono,monospace;font-size:11px;color:#C04040;letter-spacing:.04em\">Error: '+e.message+'<\/p><\/div><\/div>';}\n  btn.disabled=false;btn.innerHTML='Cast Blueprint&nbsp;<span style=\"font-family:Instrument Serif,serif;font-size:18px;font-style:normal\">\u2192<\/span>';\n}\n\nfunction renderBlueprint(r){\n  var out=document.getElementById('b2-out');\n  var isAgent=S.type==='agent',isSaas=S.type==='saas';\n  var tabs=isAgent?['Architecture','Scripts','Workflow']:isSaas?['Positioning','Pricing Model','Go-To-Market']:['Blueprint','Tech Stack','Launch Plan'];\n  S.bpTabs=tabs;\n  var tabHtml='<div class=\"out-tabs\" id=\"bp-tabs\">';\n  tabs.forEach(function(t,i){tabHtml+='<button class=\"out-tab'+(i===0?' on':'')+'\" onclick=\"switchBPTab('+i+',this)\">'+t+'<\/button>';});\n  tabHtml+='<div class=\"out-tab-push\"><\/div><button class=\"dl-btn\" onclick=\"downloadBP()\">\u2193 Save<\/button><\/div><div id=\"bp-panes\">';\n  var p0='',p1='',p2='';\n  if(isAgent){\n    p0+=rsec('Agent Identity','<p class=\"body\">'+r.elevator+'<\/p>');var st=r.techStack||{};p0+=rsec('Stack',listHtml([st.primary,st.ai,st.integrations].filter(Boolean)));p0+=rsec('Core Capabilities',listHtml(r.mvpFeatures));p0+=rsec('Guardrails',listHtml(r.risks));\n    if(r.systemPrompt)p1+=codeBlock('System Prompt',r.systemPrompt);if(r.opening)p1+=codeBlock('Opening Message + Qualifiers',r.opening);if(r.objections)p1+=codeBlock('Objection Handling',r.objections);if(r.handoff)p1+=codeBlock('Handoff & Close',r.handoff);\n    var steps=['User triggers interaction','AI processes input & context','Knowledge base lookup','Core decision logic','Action executed','Response delivered to user','Event logged to CRM','Follow-up queued'];\n    p2+=rsec('8-Step Execution Flow',steps.map(function(s,i){return'<div class=\"flow-step\"><div class=\"flow-n\">'+(i+1<10?'0'+(i+1):i+1)+'<\/div><div class=\"flow-txt\">'+s+'<\/div><\/div>';}).join(''));\n    p2+=rsec('Integrations',listHtml(['CRM (HubSpot \/ Salesforce)','Calendar (Calendly \/ Cal.com)','Helpdesk (Intercom \/ Zendesk)','Zapier \/ Make']));\n  } else if(isSaas){\n    p0+=rsec('Positioning','<p style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:20px;color:#13120D;margin-bottom:6px\">'+r.productName+'<\/p><p class=\"body\" style=\"font-style:italic;margin-bottom:10px\">\"'+r.tagline+'\"<\/p><p class=\"body\">'+r.elevator+'<\/p>');\n    p0+=rsec('Core Problem','<p class=\"body\">'+r.coreProblem+'<\/p>');\n    if(r.icpDetail){p0+=rsec('ICP Deep-Dive','<p class=\"body\"><b>Firmographics:<\/b> '+r.icpDetail.firmographics+'<\/p><p class=\"body\" style=\"margin-top:6px\"><b>Mindset:<\/b> '+r.icpDetail.psychographics+'<\/p>'+listHtml(r.icpDetail.buyingTriggers,'Buying triggers'));}\n    if(r.competitors){p0+=rsec('Competitive Landscape',r.competitors.map(function(c){return'<div style=\"margin-bottom:10px\"><p class=\"body\" style=\"font-weight:600\">'+c.name+'<\/p><p class=\"body\" style=\"margin-top:3px;color:#E05252\">Weakness: '+c.weakness+'<\/p><p class=\"body\" style=\"margin-top:3px;color:#3A8A50\">Edge: '+c.edge+'<\/p><\/div>';}).join(''));}\n    if(r.pricingTiers){var bg3=['#E8E2D5','#13120D','#3E6B58'],fg3=['#13120D','#F5F1E9','#fff'],sub3=['#7A7266','rgba(247,247,244,.5)','rgba(255,255,255,.6)'];p1+='<div class=\"rsec-lbl\" style=\"margin-bottom:10px\">Pricing Tiers<\/div><div class=\"tier-grid\">'+r.pricingTiers.map(function(t,i){return'<div class=\"tier-card\" style=\"background:'+bg3[i]+'\">'+(t.recommended?'<div style=\"font-family:Geist Mono,monospace;font-size:8px;color:'+fg3[i]+';opacity:.5;text-transform:uppercase;letter-spacing:.1em;margin-bottom:6px\">Recommended<\/div>':'')+'<div style=\"font-family:Geist Mono,monospace;font-size:9px;color:'+sub3[i]+';text-transform:uppercase;letter-spacing:.1em;margin-bottom:4px\">'+t.name+'<\/div><div style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:28px;color:'+fg3[i]+';margin-bottom:4px\">'+t.price+'<\/div><div style=\"font-size:11px;color:'+sub3[i]+';margin-bottom:10px\">'+t.for+'<\/div><ul style=\"list-style:none\">'+(t.features||[]).map(function(f){return'<li style=\"font-size:11.5px;color:'+fg3[i]+';opacity:.8;padding:2px 0 2px 12px;position:relative\"><span style=\"position:absolute;left:0;top:8px;color:#3E6B58;font-size:7px\">\u25c6<\/span>'+f+'<\/li>';}).join('')+'<\/ul><\/div>';}).join('')+'<\/div>';}\n    if(r.coldEmail)p2+=codeBlock('Cold Email \u2014 '+r.coldEmail.subject,r.coldEmail.body);if(r.launchSteps){p2+=rsec('Launch Plan',r.launchSteps.map(function(s,i){return'<div class=\"flow-step\"><div class=\"flow-n\">'+(i+1)+'<\/div><div class=\"flow-txt\"><b>'+s.title+'<\/b><br>'+s.detail+'<\/div><\/div>';}).join(''));}\n    p2+=rsec('Key Metrics',listHtml(['MRR growth','CAC vs LTV','Monthly churn rate','Activation rate']));\n  } else {\n    p0+=rsec('Overview','<p style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:20px;color:#13120D;margin-bottom:6px\">'+r.productName+'<\/p><p class=\"body\" style=\"font-style:italic;margin-bottom:10px\">\"'+r.tagline+'\"<\/p><p class=\"body\">'+r.elevator+'<\/p>');p0+=rsec('Core Problem','<p class=\"body\">'+r.coreProblem+'<\/p>');p0+=rsec('MVP Features',listHtml(r.mvpFeatures));p0+=rsec('V2 Features',listHtml(r.v2Features));\n    var stk=r.techStack||{};var stkK={primary:'Primary',ai:'AI \/ LLM',database:'Database',auth:'Auth',hosting:'Hosting',integrations:'Integrations'};\n    p1+='<div style=\"display:grid;grid-template-columns:1fr 1fr;gap:0;border:1px solid #13120D;margin-bottom:12px\">';\n    Object.keys(stkK).forEach(function(k){if(stk[k])p1+='<div style=\"background:#13120D;padding:12px;border-right:1px solid rgba(247,247,244,.1);border-bottom:1px solid rgba(247,247,244,.1)\"><div style=\"font-family:Geist Mono,monospace;font-size:8px;color:rgba(247,247,244,.3);text-transform:uppercase;letter-spacing:.1em;margin-bottom:3px\">'+stkK[k]+'<\/div><div style=\"font-size:12px;color:rgba(247,247,244,.82)\">'+stk[k]+'<\/div><\/div>';});\n    p1+='<\/div>';if(r.stackRationale)p1+=rsec('Why This Stack','<p class=\"body\">'+r.stackRationale+'<\/p>');\n    if(r.launchSteps)p2+=rsec('Launch Roadmap',r.launchSteps.map(function(s,i){return'<div class=\"flow-step\"><div class=\"flow-n\">'+(i+1)+'<\/div><div class=\"flow-txt\"><b>'+s.title+'<\/b><br>'+s.detail+'<\/div><\/div>';}).join(''));if(r.risks)p2+=rsec('Risks',listHtml(r.risks));\n  }\n  tabHtml+=[p0,p1,p2].map(function(p,i){return'<div class=\"out-pane'+(i===0?' on':'')+'\" id=\"bpp-'+i+'\"><div style=\"padding:4px\">'+p+'<\/div><\/div>';}).join('')+'<\/div>';\n  out.innerHTML=tabHtml;\n}\nfunction switchBPTab(i,el){document.querySelectorAll('#bp-tabs .out-tab').forEach(function(t){t.classList.remove('on')});document.querySelectorAll('#bp-panes .out-pane').forEach(function(p,j){p.classList.toggle('on',j===i)});if(el)el.classList.add('on');}\nfunction downloadBP(){var lines=['ORTIVE STUDIO \u2014 BLUEPRINT','Product: '+S.name,'Type: '+S.typeName,'Generated: '+new Date().toLocaleDateString(),''];document.querySelectorAll('#bp-panes .out-pane').forEach(function(p,i){if(p.innerText.trim()){lines.push('--- '+(S.bpTabs[i]||'Section '+(i+1)).toUpperCase()+' ---','',p.innerText.trim(),'');}});var blob=new Blob([lines.join('\\n')],{type:'text\/plain'});var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='ortive-blueprint.txt';document.body.appendChild(a);a.click();document.body.removeChild(a);}\n\n\/* \u2550\u2550 B3 \u2550\u2550 *\/\nfunction buildCapGrid(){\n  var g=document.getElementById('cap-grid');if(!g)return;g.innerHTML='';\n  Object.keys(CAPS).forEach(function(cat){\n    var card=document.createElement('div');card.className='card-sm';\n    var h='<div style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:14px;color:#13120D;margin-bottom:12px\">'+cat+'<\/div>';\n    CAPS[cat].forEach(function(item){var k=cat+':'+item,on=!!S.caps[k];var uid='c_'+k.replace(\/[^a-z0-9]\/gi,'_');h+='<div class=\"cap-row\"><span class=\"cap-label\" style=\"color:'+(on?'#13120D':'#7A7266')+'\" id=\"cl_'+uid+'\">'+item+'<\/span><div class=\"tgl\" id=\"'+uid+'\" style=\"background:'+(on?'#3E6B58':'rgba(10,10,11,.2)')+'\" onclick=\"toggleCap(\\''+cat+'\\',\\''+item+'\\')\"><div class=\"tgl-k\" style=\"left:'+(on?'17px':'2px')+'\"><\/div><\/div><\/div>';});\n    card.innerHTML=h;g.appendChild(card);\n  });updateCapBadge();\n}\nfunction toggleCap(cat,item){var k=cat+':'+item;S.caps[k]=!S.caps[k];var uid='c_'+k.replace(\/[^a-z0-9]\/gi,'_');var t=document.getElementById(uid),l=document.getElementById('cl_'+uid);if(t){t.style.background=S.caps[k]?'#3E6B58':'rgba(10,10,11,.2)';t.querySelector('.tgl-k').style.left=S.caps[k]?'17px':'2px'}if(l)l.style.color=S.caps[k]?'#13120D':'#7A7266';updateCapBadge();if(Object.values(S.caps).some(Boolean))sessionStorage.setItem('os_done_b3','1');}\nfunction updateCapBadge(){var n=Object.values(S.caps).filter(Boolean).length;var el=document.getElementById('cap-badge');if(el)el.textContent=n+' active';}\n\n\/* \u2550\u2550 B4 \u2550\u2550 *\/\nvar WF=['User triggers interaction','AI processes input and context','Knowledge base or data lookup','Core logic and decision tree','Action executed (booking, CRM update, message)','Response delivered to user','Event logged to database \/ CRM','Follow-up or notification dispatched'];\nfunction buildWorkflow(){\n  var el=document.getElementById('wf-steps');if(el){el.innerHTML='';WF.forEach(function(s,i){el.innerHTML+='<div class=\"flow-step\" style=\"animation:up .3s '+i*.04+'s both\"><div class=\"flow-n\">'+(i+1<10?'0'+(i+1):i+1)+'<\/div><div class=\"flow-txt\">'+s+'<\/div><\/div>';});}\n  var ch=document.getElementById('wf-channels');if(ch){ch.innerHTML='';Object.keys(S.channels).forEach(function(name){var on=S.channels[name];var row=document.createElement('div');row.style.cssText='display:flex;justify-content:space-between;align-items:center;padding:7px 0;border-bottom:1px solid rgba(10,10,11,.08)';row.innerHTML='<span style=\"font-size:12.5px;color:#1E1B15\">'+name+'<\/span>';var t=document.createElement('div');t.className='tgl';t.style.background=on?'#3E6B58':'rgba(10,10,11,.2)';t.innerHTML='<div class=\"tgl-k\" style=\"left:'+(on?'17px':'2px')+'\"><\/div>';t.onclick=function(){S.channels[name]=!S.channels[name];t.querySelector('.tgl-k').style.left=S.channels[name]?'17px':'2px';t.style.background=S.channels[name]?'#3E6B58':'rgba(10,10,11,.2)';};row.appendChild(t);ch.appendChild(row);});}\n  renderRules();mark('b4');sessionStorage.setItem('os_done_b4','1');\n}\nfunction renderRules(){var el=document.getElementById('wf-rules');if(!el)return;el.innerHTML='';S.rules.forEach(function(r,i){var row=document.createElement('div');row.className='rule-r';row.innerHTML='<div class=\"rule-ic\"><svg width=\"8\" height=\"8\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#3E6B58\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div><div class=\"rule-txt\">'+r+'<\/div>';var del=document.createElement('button');del.style.cssText='background:none;border:none;cursor:pointer;color:#A09880;padding:3px;flex-shrink:0;font-size:14px';del.textContent='\u00d7';del.onclick=function(){S.rules.splice(i,1);renderRules();};row.appendChild(del);el.appendChild(row);});}\nfunction addRule(){var inp=document.getElementById('rule-inp');if(!inp||!inp.value.trim())return;S.rules.push(inp.value.trim());inp.value='';renderRules();}\n\n\/* \u2550\u2550 B5 \u2550\u2550 *\/\nfunction setupB5(){\n  var el=document.getElementById('b5-summary');if(!el)return;\n  var caps=Object.keys(S.caps).filter(function(k){return S.caps[k]}).map(function(k){return k.split(':')[1]});\n  el.innerHTML='';\n  [['Product',S.name||'Unnamed'],['Type',S.typeName||'\u2014'],['Mode',S.modeChip||'\u2014'],['Capabilities',caps.length+' active'],['Rules',S.rules.length+' configured']].forEach(function(r){el.innerHTML+='<div style=\"display:flex;justify-content:space-between;font-size:12px;padding:5px 0;border-bottom:1px solid rgba(62,107,88,.2)\"><span style=\"color:#7A7266;font-family:Geist Mono,monospace;font-size:9.5px;text-transform:uppercase;letter-spacing:.1em\">'+r[0]+'<\/span><span style=\"font-weight:500;color:#13120D;font-family:Instrument Serif,serif;font-style:italic;font-size:14px\">'+r[1]+'<\/span><\/div>';});\n}\nasync function genDeploy(){\n  if(!checkCap())return;\n  var isSaas=S.type==='saas';\n  var caps=Object.keys(S.caps).filter(function(k){return S.caps[k]}).map(function(k){return k.split(':')[1]}).join(', ')||'General';\n  var chs=Object.keys(S.channels).filter(function(c){return S.channels[c]}).join(', ')||'Web';\n  var btn=document.getElementById('btn-gen-deploy'),out=document.getElementById('b5-out');\n  btn.disabled=true;btn.innerHTML='<span class=\"spin-d\"><\/span> Generating\u2026';\n  out.innerHTML=skelHTML(true);\n  var prompt='Senior AI product engineer. Generate a precise, actionable deployment manual.\\n\\nProduct: '+S.name+'\\nType: '+S.typeName+' \/ Mode: '+S.modeChip+'\\nDescription: '+S.desc+'\\nCapabilities: '+caps+'\\nChannels: '+chs+'\\nRules: '+S.rules.join('; ')+'\\n\\nEvery tool, price, and step must be real and specific.\\n\\nReturn ONLY valid JSON. No markdown, no explanation. Start with { end with }:\\n{\"productName\":\"...\",\"monthlyCost\":\"e.g. $80\u2013$220\/mo\",\"techStack\":[{\"category\":\"Frontend\",\"tool\":\"...\",\"why\":\"...\",\"cost\":\"...\"},{\"category\":\"Backend\",\"tool\":\"...\",\"why\":\"...\",\"cost\":\"...\"},{\"category\":\"AI \/ LLM\",\"tool\":\"...\",\"why\":\"...\",\"cost\":\"...\"},{\"category\":\"Database\",\"tool\":\"...\",\"why\":\"...\",\"cost\":\"...\"},{\"category\":\"Auth\",\"tool\":\"...\",\"why\":\"...\",\"cost\":\"...\"},{\"category\":\"Payments\",\"tool\":\"...\",\"why\":\"...\",\"cost\":\"...\"},{\"category\":\"Hosting\",\"tool\":\"...\",\"why\":\"...\",\"cost\":\"...\"},{\"category\":\"Monitoring\",\"tool\":\"...\",\"why\":\"...\",\"cost\":\"...\"}],\"phases\":[{\"title\":\"Phase 1 \u2014 Foundation (Wk 1\u20132)\",\"steps\":[\"...\",\"...\",\"...\",\"...\"]},{\"title\":\"Phase 2 \u2014 Core Build (Wk 3\u20134)\",\"steps\":[\"...\",\"...\",\"...\",\"...\"]},{\"title\":\"Phase 3 \u2014 AI Integration (Wk 5\u20136)\",\"steps\":[\"...\",\"...\",\"...\",\"...\"]},{\"title\":\"Phase 4 \u2014 Launch (Wk 7\u20138)\",\"steps\":[\"...\",\"...\",\"...\",\"...\"]}],\"checklist\":[\"...\",\"...\",\"...\",\"...\",\"...\",\"...\",\"...\"],\"warnings\":[\"...\",\"...\",\"...\"]}';\n  try{\n    var _dpTok=S.type==='agent'?3500:isSaas?3200:2600;var res=await apiFetch(prompt,_dpTok);S.deployRaw=JSON.stringify(res);incrementUses();\n    var h='<div style=\"padding:24px\">';\n    h+='<div style=\"display:flex;align-items:baseline;justify-content:space-between;margin-bottom:22px;padding-bottom:16px;border-bottom:1px solid #13120D\"><div style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:22px;color:#13120D\">'+res.productName+'<\/div><span class=\"badge bg\">~'+res.monthlyCost+'<\/span><\/div>';\n    h+='<div class=\"lbl\" style=\"margin-bottom:10px\">Tech Stack<\/div>';\n    (res.techStack||[]).forEach(function(t){h+='<div style=\"display:flex;justify-content:space-between;align-items:flex-start;padding:10px 0;border-bottom:1px solid rgba(10,10,11,.08)\"><div><div style=\"font-family:Geist Mono,monospace;font-size:8.5px;color:#A09880;text-transform:uppercase;letter-spacing:.1em;margin-bottom:2px\">'+t.category+'<\/div><div style=\"font-weight:500;font-size:13.5px;color:#13120D\">'+t.tool+'<\/div><p style=\"font-size:12px;color:#7A7266;margin-top:3px\">'+t.why+'<\/p><\/div><span style=\"font-family:Geist Mono,monospace;font-size:11px;color:#3E6B58;white-space:nowrap;margin-left:16px\">'+t.cost+'<\/span><\/div>';});\n    h+='<div class=\"lbl\" style=\"margin-top:20px;margin-bottom:10px\">Build Phases<\/div>';\n    (res.phases||[]).forEach(function(p){h+='<div style=\"margin-bottom:12px\"><div style=\"font-family:Geist Mono,monospace;font-size:9px;text-transform:uppercase;letter-spacing:.12em;color:#3E6B58;margin-bottom:8px\">'+p.title+'<\/div><div class=\"inset\">'+(p.steps||[]).map(function(s,i){return'<div style=\"display:flex;gap:10px;margin-bottom:6px\"><div style=\"width:16px;height:16px;background:#13120D;display:grid;place-items:center;flex-shrink:0;font-family:Geist Mono,monospace;font-size:8px;color:rgba(247,247,244,.6)\">'+(i+1)+'<\/div><span style=\"font-size:12.5px;color:#1E1B15\">'+s+'<\/span><\/div>';}).join('')+'<\/div><\/div>';});\n    h+='<div class=\"lbl\" style=\"margin-top:20px;margin-bottom:10px\">Launch Checklist<\/div><div class=\"inset\" style=\"margin-bottom:14px\">'+(res.checklist||[]).map(function(c){return'<div style=\"display:flex;gap:9px;margin-bottom:7px\"><div style=\"width:14px;height:14px;border:1px solid rgba(10,10,11,.3);flex-shrink:0;margin-top:1px\"><\/div><span style=\"font-size:12.5px;color:#1E1B15\">'+c+'<\/span><\/div>';}).join('')+'<\/div>';\n    if(res.warnings&&res.warnings.length){h+='<div class=\"lbl\" style=\"margin-bottom:8px\">Warnings<\/div><div class=\"inset-accent\">'+(res.warnings||[]).map(function(w){return'<div style=\"display:flex;gap:8px;margin-bottom:7px\"><span style=\"color:#3E6B58;font-size:13px;flex-shrink:0\">\u25c6<\/span><span style=\"font-size:12px;color:#1E1B15\">'+w+'<\/span><\/div>';}).join('')+'<\/div>';}\n    h+='<\/div>';out.innerHTML=h;var cb=document.getElementById('btn-copy-deploy');if(cb)cb.disabled=false;sessionStorage.setItem('os_done_b5','1');mark('b5');\n  }catch(e){out.innerHTML='<div style=\"padding:22px\"><div class=\"inset\" style=\"border-color:rgba(224,82,82,.4);background:rgba(224,82,82,.06)\"><p style=\"font-family:Geist Mono,monospace;font-size:11px;color:#C04040;letter-spacing:.04em\">Error: '+e.message+'<\/p><\/div><\/div>';}\n  btn.disabled=false;btn.innerHTML='Generate Manual&nbsp;<span style=\"font-family:Instrument Serif,serif;font-size:18px;font-style:normal\">\u2192<\/span>';\n}\nfunction copyDeploy(){if(!S.deployRaw)return;try{var j=JSON.parse(S.deployRaw),lines=['=== DEPLOYMENT MANUAL: '+j.productName+' ===','Cost: '+j.monthlyCost,''];(j.techStack||[]).forEach(function(t){lines.push(t.category+': '+t.tool+' ('+t.cost+')\\n  '+t.why,'');});(j.phases||[]).forEach(function(p){lines.push('',p.title);(p.steps||[]).forEach(function(s,i){lines.push('  '+(i+1)+'. '+s)});});lines.push('','--- LAUNCH CHECKLIST ---');(j.checklist||[]).forEach(function(c){lines.push('[ ] '+c)});navigator.clipboard.writeText(lines.join('\\n')).then(function(){toast('Manual copied.')});}catch(e){toast('Copy failed.');}}\nfunction downloadLP(){if(!S.lpData)return;var lp=S.lpData,p=['=== LANDING PAGE COPY ===','Product: '+S.name,''];if(lp.hero)p.push('--- HERO ---',lp.hero.headline||'',lp.hero.sub||'','');if(lp.problem)p.push('--- PROBLEM ---',lp.problem.title||'',lp.problem.body||'');(lp.problem&&lp.problem.pains||[]).forEach(function(x){p.push('  - '+x)});p.push('');if(lp.solution)p.push('--- SOLUTION ---',lp.solution.title||'',lp.solution.body||'','');(lp.features||[]).forEach(function(f,i){if(i===0)p.push('--- FEATURES ---');p.push(f.title+': '+f.desc)});p.push('');if(lp.proof){p.push('--- SOCIAL PROOF ---',lp.proof.headline||'');(lp.proof.testimonials||[]).forEach(function(t){p.push('\"'+t.quote+'\" - '+t.name+', '+t.role)})};p.push('');(lp.faq||[]).forEach(function(f,i){if(i===0)p.push('--- FAQ ---');p.push('Q: '+f.q,'A: '+f.a,'')});if(lp.cta)p.push('--- CTA ---',lp.cta.headline||'',lp.cta.sub||'','Button: '+(lp.cta.button||''));var blob=new Blob([p.join('\\n')],{type:'text\/plain'});var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download=(S.name||'landing').replace(\/\\s+\/g,'-').toLowerCase()+'-landing-page.txt';document.body.appendChild(a);a.click();document.body.removeChild(a);toast('Landing page saved.');}\nfunction downloadOutreach(){if(!S.outreachData)return;var p=['=== OUTREACH SEQUENCE ===','Product: '+S.name,''];(S.outreachData.emails||[]).forEach(function(e){p.push('--- '+e.label+' ---','Subject: '+e.subject,'',e.body,'')});var blob=new Blob([p.join('\\n')],{type:'text\/plain'});var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download=(S.name||'outreach').replace(\/\\s+\/g,'-').toLowerCase()+'-outreach.txt';document.body.appendChild(a);a.click();document.body.removeChild(a);toast('Outreach saved.');}\n\n\/* \u2550\u2550 MONETIZE \u2550\u2550 *\/\nvar PRICING_MODELS=['Subscription','One-time','Usage-based','Freemium + Paid','Retainer'];\nfunction setupM1(){\n  if(S.blueprint){var n=S.blueprint.productName||S.name;var nm=document.getElementById('m1-name');if(nm)nm.textContent=n;var tp=document.getElementById('m1-type');if(tp)tp.textContent=S.typeName;var ic=S.blueprint.icp;if(ic){var cu=document.getElementById('m-customer');if(cu&&!cu.dataset.edited)cu.value=ic;}}\n  var pb=document.getElementById('m-pricing-btns');if(pb&&!pb.dataset.built){pb.dataset.built='1';PRICING_MODELS.forEach(function(m){var b=document.createElement('button');b.className='chip'+(m===S.pricingModel?' on':'');b.textContent=m;b.onclick=function(){S.pricingModel=m;pb.querySelectorAll('.chip').forEach(function(x){x.classList.remove('on')});b.classList.add('on');var mm=document.getElementById('m1-model');if(mm)mm.textContent=m;};pb.appendChild(b);});}\n  var ps=document.getElementById('m-price-slider');if(ps){ps.oninput=function(){var v=this.value;['m-price-disp','m1-price','rev-pr'].forEach(function(id){var e=document.getElementById(id);if(e)e.textContent=v;});};}\n  var cu=document.getElementById('m-customer');if(cu){cu.oninput=function(){this.dataset.edited='1';var d=document.getElementById('m1-target');if(d)d.textContent=this.value;};}\n  mark('m1');sessionStorage.setItem('os_done_m1','1');\n}\nfunction getCtx(){return{name:S.name||'Unnamed',type:S.typeName,industry:(document.getElementById('m-industry')||{}).value||'General',problem:(document.getElementById('m-problem')||{}).value||'',customer:(document.getElementById('m-customer')||{}).value||'',diff:(document.getElementById('m-diff')||{}).value||'',price:(document.getElementById('m-price-slider')||{}).value||97,model:S.pricingModel};}\nasync function genOffer(){\n  if(!checkCap())return;\n  var ctx=getCtx();var btn=document.getElementById('btn-gen-offer'),out=document.getElementById('m2-out');\n  btn.disabled=true;btn.innerHTML='<span class=\"spin\"><\/span> Generating\u2026';out.innerHTML=skelHTML();\n  var bpCtx=S.blueprint?(S.blueprint.elevator||''):'';\n  var prompt='Expert AI product marketing copywriter. Generate a complete sales package.\\n\\nProduct: '+ctx.name+' ('+ctx.type+')\\nIndustry: '+ctx.industry+'\\nProblem: '+ctx.problem+'\\nPrice: $'+ctx.price+'\/mo ('+ctx.model+')\\nCustomer: '+ctx.customer+'\\nDifferentiator: '+ctx.diff+'\\n'+(bpCtx?'Blueprint context: '+bpCtx:'')+'\\n\\nReturn ONLY valid JSON. No markdown. Start with { end with }:\\n{\"productName\":\"...\",\"tagline\":\"...\",\"heroHeadline\":\"...\",\"subHeadline\":\"...\",\"bullets\":[\"...\",\"...\",\"...\",\"...\",\"...\"],\"socialProof\":\"one credibility line\",\"cta\":\"CTA button text\",\"urgency\":\"urgency or scarcity line\",\"tiers\":[{\"name\":\"Starter\",\"price\":\"$X\/mo\",\"for\":\"...\",\"features\":[\"f1\",\"f2\",\"f3\"]},{\"name\":\"Growth\",\"price\":\"$X\/mo\",\"for\":\"...\",\"features\":[\"f1\",\"f2\",\"f3\",\"f4\"],\"pop\":true},{\"name\":\"Enterprise\",\"price\":\"$X\/mo\",\"for\":\"...\",\"features\":[\"f1\",\"f2\",\"f3\",\"f4\",\"f5\"]}]}';\n  try{\n    var r=await apiFetch(prompt,2000);S.offerData=r;incrementUses();mark('m2');sessionStorage.setItem('os_done_m2','1');\n    var bg3=['#E8E2D5','#13120D','#3E6B58'],fg3=['#13120D','#F5F1E9','#fff'],sub3=['#7A7266','rgba(247,247,244,.5)','rgba(255,255,255,.65)'];\n    out.innerHTML='<div style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:26px;color:#13120D;margin-bottom:4px\">'+r.productName+'<\/div><p class=\"body\" style=\"font-style:italic;color:#3E6B58;margin-bottom:18px\">\"'+r.tagline+'\"<\/p><div class=\"inset\" style=\"margin-bottom:14px\"><div style=\"font-family:Instrument Serif,serif;font-weight:400;font-size:19px;color:#13120D;margin-bottom:5px\">'+r.heroHeadline+'<\/div><p class=\"body\" style=\"margin-bottom:14px\">'+r.subHeadline+'<\/p><ul style=\"list-style:none\">'+(r.bullets||[]).map(function(b){return'<li style=\"display:flex;gap:8px;margin-bottom:6px;font-size:13px;color:#1E1B15\"><span style=\"color:#3E6B58;font-size:8px;margin-top:5px\">\u25c6<\/span>'+b+'<\/li>';}).join('')+'<\/ul><\/div><div class=\"inset-accent\" style=\"margin-bottom:12px\"><p class=\"body\" style=\"font-size:12px\">'+r.socialProof+'<\/p><\/div><div style=\"display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px\"><div style=\"background:#13120D;color:#F5F1E9;font-family:Geist Mono,monospace;font-size:10px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;padding:10px 18px\">'+r.cta+'<\/div><div style=\"background:#E8E2D5;border:1px solid rgba(10,10,11,.15);font-size:12px;color:#7A7266;padding:10px 13px\">'+r.urgency+'<\/div><\/div><div class=\"lbl\" style=\"margin-bottom:10px\">Pricing Tiers<\/div><div class=\"tier-grid\">'+(r.tiers||[]).map(function(t,i){return'<div class=\"tier-card\" style=\"background:'+bg3[i]+'\">'+(t.pop?'<div style=\"font-family:Geist Mono,monospace;font-size:7.5px;color:'+fg3[i]+';opacity:.5;text-transform:uppercase;letter-spacing:.1em;margin-bottom:5px\">Recommended<\/div>':'')+'<div style=\"font-family:Geist Mono,monospace;font-size:9px;color:'+sub3[i]+';margin-bottom:4px;text-transform:uppercase;letter-spacing:.08em\">'+t.name+'<\/div><div style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:26px;color:'+fg3[i]+';margin-bottom:4px\">'+t.price+'<\/div><div style=\"font-size:10.5px;color:'+sub3[i]+';margin-bottom:10px\">'+t.for+'<\/div><ul style=\"list-style:none\">'+(t.features||[]).map(function(f){return'<li style=\"font-size:11px;color:'+fg3[i]+';opacity:.8;padding:2px 0 2px 10px;position:relative\"><span style=\"position:absolute;left:0;top:8px;color:#3E6B58;font-size:6px\">\u25c6<\/span>'+f+'<\/li>';}).join('')+'<\/ul><\/div>';}).join('')+'<\/div>';\n  }catch(e){out.innerHTML='<div class=\"inset\" style=\"border-color:rgba(224,82,82,.4);background:rgba(224,82,82,.06)\"><p style=\"font-family:Geist Mono,monospace;font-size:11px;color:#C04040;letter-spacing:.04em\">Error: '+e.message+'<\/p><\/div>';}\n  btn.disabled=false;btn.innerHTML='Regenerate&nbsp;<span style=\"font-family:Instrument Serif,serif;font-size:18px;font-style:normal\">\u2192<\/span>';\n}\nasync function genLP(){\n  if(!checkCap())return;\n  var ctx=getCtx();var nm=S.offerData?S.offerData.productName:S.name;\n  var btn=document.getElementById('btn-gen-lp'),out=document.getElementById('m3-out');\n  btn.disabled=true;btn.innerHTML='<span class=\"spin\"><\/span> Generating\u2026';out.innerHTML=skelHTML();\n  var prompt='Expert landing page copywriter. Write a complete sales page for:\\nProduct: '+nm+' ('+ctx.type+')\\nIndustry: '+ctx.industry+'\\nProblem: '+ctx.problem+'\\nPrice: $'+ctx.price+'\/mo\\nCustomer: '+ctx.customer+'\\nDifferentiator: '+ctx.diff+'\\n\\nReturn ONLY valid JSON. No markdown. Start with { end with }:\\n{\"hero\":{\"headline\":\"...\",\"sub\":\"...\"},\"problem\":{\"title\":\"...\",\"body\":\"...\",\"pains\":[\"...\",\"...\",\"...\"]},\"solution\":{\"title\":\"...\",\"body\":\"...\"},\"features\":[{\"title\":\"...\",\"desc\":\"...\"},{\"title\":\"...\",\"desc\":\"...\"},{\"title\":\"...\",\"desc\":\"...\"},{\"title\":\"...\",\"desc\":\"...\"}],\"proof\":{\"headline\":\"...\",\"testimonials\":[{\"name\":\"...\",\"role\":\"...\",\"quote\":\"...\"},{\"name\":\"...\",\"role\":\"...\",\"quote\":\"...\"}]},\"faq\":[{\"q\":\"...\",\"a\":\"...\"},{\"q\":\"...\",\"a\":\"...\"},{\"q\":\"...\",\"a\":\"...\"},{\"q\":\"...\",\"a\":\"...\"}],\"cta\":{\"headline\":\"...\",\"sub\":\"...\",\"button\":\"...\"}}';\n  try{\n    var r=await apiFetch(prompt,2800);S.lpData=r;incrementUses();mark('m3');sessionStorage.setItem('os_done_m3','1');\n    var h='<div class=\"between\" style=\"margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid rgba(10,10,11,.12)\"><span class=\"lbl\" style=\"margin-bottom:0\">Landing Page Copy<\/span><button class=\"btn btn-ghost btn-sm\" onclick=\"downloadLP()\">\u2193 Save .txt<\/button><\/div>';\n    h+='<div class=\"lbl\" style=\"margin-bottom:8px\">Hero<\/div><div class=\"inset\" style=\"margin-bottom:14px\"><div style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:22px;color:#13120D;margin-bottom:5px\">'+r.hero.headline+'<\/div><p class=\"body\">'+r.hero.sub+'<\/p><\/div>';\n    h+='<div class=\"lbl\" style=\"margin-bottom:8px\">Problem<\/div><div class=\"inset\" style=\"margin-bottom:14px\"><div style=\"font-weight:600;font-size:14px;color:#13120D;margin-bottom:5px\">'+r.problem.title+'<\/div><p class=\"body\" style=\"margin-bottom:10px\">'+r.problem.body+'<\/p>'+(r.problem.pains||[]).map(function(p){return'<div style=\"display:flex;gap:7px;margin-bottom:5px;font-size:12.5px;color:#C04040\"><span>\u00d7<\/span>'+p+'<\/div>';}).join('')+'<\/div>';\n    h+='<div class=\"lbl\" style=\"margin-bottom:8px\">Solution<\/div><div class=\"inset\" style=\"margin-bottom:14px\"><div style=\"font-weight:600;font-size:14px;color:#13120D;margin-bottom:5px\">'+r.solution.title+'<\/div><p class=\"body\">'+r.solution.body+'<\/p><\/div>';\n    h+='<div class=\"lbl\" style=\"margin-bottom:8px\">Features<\/div><div class=\"g2\" style=\"gap:10px;margin-bottom:14px\">'+(r.features||[]).map(function(f){return'<div class=\"inset\"><div style=\"font-weight:600;font-size:12.5px;color:#13120D;margin-bottom:3px\">'+f.title+'<\/div><p class=\"body\" style=\"font-size:12px\">'+f.desc+'<\/p><\/div>';}).join('')+'<\/div>';\n    h+='<div class=\"lbl\" style=\"margin-bottom:8px\">Social Proof<\/div><div class=\"inset\" style=\"margin-bottom:14px\"><div style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:16px;color:#13120D;margin-bottom:10px\">'+r.proof.headline+'<\/div>'+(r.proof.testimonials||[]).map(function(t){return'<div style=\"border:1px solid rgba(10,10,11,.12);padding:12px;margin-bottom:8px\"><p class=\"body\" style=\"font-style:italic;font-size:12px;margin-bottom:5px\">\"'+t.quote+'\"<\/p><div style=\"font-family:Geist Mono,monospace;font-size:9.5px;color:#7A7266;text-transform:uppercase;letter-spacing:.08em\">'+t.name+' \u00b7 '+t.role+'<\/div><\/div>';}).join('')+'<\/div>';\n    h+='<div class=\"lbl\" style=\"margin-bottom:8px\">FAQ<\/div>'+(r.faq||[]).map(function(f){return'<div style=\"border-bottom:1px solid rgba(10,10,11,.08);padding:10px 0\"><div style=\"font-weight:500;font-size:13px;color:#13120D;margin-bottom:4px\">'+f.q+'<\/div><p class=\"body\" style=\"font-size:12px\">'+f.a+'<\/p><\/div>';}).join('');\n    h+='<div class=\"lbl\" style=\"margin-top:16px;margin-bottom:8px\">CTA<\/div><div class=\"inset-accent\"><div style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:17px;color:#13120D;margin-bottom:5px\">'+r.cta.headline+'<\/div><p class=\"body\" style=\"font-size:12px;margin-bottom:12px\">'+r.cta.sub+'<\/p><div style=\"background:#13120D;color:#F5F1E9;font-family:Geist Mono,monospace;font-size:10px;letter-spacing:.12em;text-transform:uppercase;padding:10px 18px;display:inline-block\">'+r.cta.button+' \u2192<\/div><\/div>';\n    out.innerHTML=h;\n  }catch(e){out.innerHTML='<div class=\"inset\" style=\"border-color:rgba(224,82,82,.4);background:rgba(224,82,82,.06)\"><p style=\"font-family:Geist Mono,monospace;font-size:11px;color:#C04040;letter-spacing:.04em\">Error: '+e.message+'<\/p><\/div>';}\n  btn.disabled=false;btn.innerHTML='Regenerate&nbsp;<span style=\"font-family:Instrument Serif,serif;font-size:18px;font-style:normal\">\u2192<\/span>';\n}\nasync function genOutreach(){\n  var ctx=getCtx();var nm=S.offerData?S.offerData.productName:S.name;\n  var btn=document.getElementById('btn-gen-out'),out=document.getElementById('m4-out');\n  btn.disabled=true;btn.innerHTML='<span class=\"spin\"><\/span> Writing emails\u2026';\n  out.innerHTML='<div class=\"card\"><div class=\"empty\"><span class=\"spin-d\"><\/span><span>Writing 3 emails\u2026<\/span><\/div><\/div>';\n  var prompt='Expert B2B cold outreach copywriter. Write a 3-email sequence for:\\nProduct: '+nm+' ('+ctx.type+')\\nIndustry: '+ctx.industry+'\\nProblem: '+ctx.problem+'\\nPrice: $'+ctx.price+'\/mo\\nCustomer: '+ctx.customer+'\\nDifferentiator: '+ctx.diff+'\\n\\nReturn ONLY valid JSON. No markdown. Start with { end with }:\\n{\"emails\":[{\"label\":\"Email 1 \u2014 Introduction\",\"subject\":\"...\",\"preview\":\"...\",\"body\":\"intro 100 words [FIRST NAME] [COMPANY]\"},{\"label\":\"Email 2 \u2014 Value Follow-up\",\"subject\":\"...\",\"preview\":\"...\",\"body\":\"follow-up 80 words\"},{\"label\":\"Email 3 \u2014 Break-up\",\"subject\":\"...\",\"preview\":\"...\",\"body\":\"break-up 60 words\"}]}';\n  try{\n    var r=await apiFetch(prompt,2400);S.outreachData=r;incrementUses();mark('m4');sessionStorage.setItem('os_done_m4','1');\n    out.innerHTML='<div class=\"between\" style=\"margin-bottom:8px\"><span class=\"lbl\" style=\"margin-bottom:0\">3-Email Sequence<\/span><button class=\"btn btn-ghost btn-sm\" onclick=\"downloadOutreach()\">\u2193 Save .txt<\/button><\/div>';\n    (r.emails||[]).forEach(function(e,i){var card=document.createElement('div');card.className='card';card.style.cssText='margin-bottom:12px;animation:up .3s '+i*.09+'s both';var uid='e_'+Math.random().toString(36).slice(2,6);card.innerHTML='<div class=\"between\" style=\"margin-bottom:10px\"><span class=\"badge bi\">'+e.label+'<\/span><button class=\"btn btn-ghost btn-sm\" onclick=\"cpText(\\''+uid+'\\')\">Copy<\/button><\/div><div style=\"font-weight:500;font-size:13px;color:#13120D;margin-bottom:2px\">Subject: '+e.subject+'<\/div><div style=\"font-family:Geist Mono,monospace;font-size:10px;color:#A09880;margin-bottom:10px;letter-spacing:.04em\">'+e.preview+'<\/div><div style=\"background:#E8E2D5;border:1px solid rgba(10,10,11,.1);padding:14px\"><pre id=\"'+uid+'\" style=\"font-family:Geist,sans-serif;font-size:13px;color:#1E1B15;white-space:pre-wrap;line-height:1.68\">'+e.body+'<\/pre><\/div>';out.appendChild(card);});\n  }catch(e){out.innerHTML='<div class=\"card\"><div class=\"inset\" style=\"border-color:rgba(224,82,82,.4);background:rgba(224,82,82,.06)\"><p style=\"font-family:Geist Mono,monospace;font-size:11px;color:#C04040;letter-spacing:.04em\">Error: '+e.message+'<\/p><\/div><\/div>';}\n  btn.disabled=false;btn.innerHTML='Regenerate Sequence&nbsp;<span style=\"font-family:Instrument Serif,serif;font-size:18px;font-style:normal\">\u2192<\/span>';\n}\nfunction calcRev(){\n  var pr=parseInt(document.getElementById('m-price-slider').value)||97;\n  var c3=parseInt(document.getElementById('rc3').value)||8;var c6=parseInt(document.getElementById('rc6').value)||30;var c12=parseInt(document.getElementById('rc12').value)||80;var ch=parseInt(document.getElementById('rch').value)||5;\n  document.getElementById('rev-pr').textContent=pr;\n  var m3=c3*pr,m6=c6*pr,m12=c12*pr,arr=m12*12,net=Math.round(c12*(1-ch\/100)),nmrr=net*pr;\n  var el=document.getElementById('rev-out');if(!el)return;\n  el.innerHTML='<div style=\"display:grid;grid-template-columns:repeat(3,1fr);gap:0;border:1px solid #13120D;margin-bottom:14px\">'+[['Month 3','$'+m3.toLocaleString(),c3+' customers'],['Month 6','$'+m6.toLocaleString(),c6+' customers'],['Month 12','$'+m12.toLocaleString(),c12+' customers']].map(function(s,i){return'<div style=\"padding:14px 12px;border-right:'+(i<2?'1px solid rgba(10,10,11,.15)':'none')+'\"><div style=\"font-family:Geist Mono,monospace;font-size:8.5px;text-transform:uppercase;letter-spacing:.1em;color:#7A7266;margin-bottom:6px\">'+s[0]+'<\/div><div style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:24px;color:#13120D\">'+s[1]+'<\/div><div style=\"font-size:11px;color:#A09880;margin-top:2px\">'+s[2]+'<\/div><\/div>';}).join('')+'<\/div><div style=\"border:1px solid rgba(10,10,11,.12);padding:14px\"><div style=\"display:flex;justify-content:space-between;margin-bottom:8px\"><span style=\"font-size:13px;color:#7A7266\">Projected ARR<\/span><span style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:20px;color:#13120D\">$'+arr.toLocaleString()+'<\/span><\/div><div style=\"display:flex;justify-content:space-between;margin-bottom:8px\"><span style=\"font-size:13px;color:#7A7266\">Net MRR after '+ch+'% churn<\/span><span style=\"font-family:Instrument Serif,serif;font-style:italic;font-size:16px;color:#3E6B58\">$'+nmrr.toLocaleString()+'\/mo<\/span><\/div><div style=\"display:flex;justify-content:space-between\"><span style=\"font-size:13px;color:#7A7266\">Net customers (Mo 12)<\/span><span style=\"font-weight:600;font-size:13px;color:#13120D\">'+net+'<\/span><\/div><\/div>';\n}\nfunction buildGTM(){\n  var el=document.getElementById('gtm-list');if(!el)return;el.innerHTML='';\n  [{t:'Select product type & mode',d:!!(S.type&&S.modeChip)||!!sessionStorage.getItem('os_done_b1')},{t:'Generate product blueprint',d:!!S.blueprint||!!sessionStorage.getItem('os_done_b2')},{t:'Configure capabilities',d:Object.values(S.caps).some(Boolean)||!!sessionStorage.getItem('os_done_b3')},{t:'Define offer & pricing',d:!!S.offerData||!!sessionStorage.getItem('os_done_m1')},{t:'Generate sales package',d:!!S.offerData||!!sessionStorage.getItem('os_done_m2')},{t:'Generate landing page copy',d:!!S.lpData||!!sessionStorage.getItem('os_done_m3')},{t:'Generate outreach sequence',d:!!S.outreachData||!!sessionStorage.getItem('os_done_m4')},{t:'Set up Stripe payment link',d:false},{t:'Publish landing page',d:false},{t:'Send first 50 outreach emails',d:false}].forEach(function(item){\n    el.innerHTML+='<div style=\"display:flex;align-items:center;gap:9px;padding:7px 0;border-bottom:1px solid rgba(196,123,58,.2)\"><div style=\"width:14px;height:14px;border:'+(item.d?'1px solid #3E6B58':'1px solid rgba(62,107,88,.35)')+';background:'+(item.d?'rgba(196,123,58,.12)':'transparent')+';display:grid;place-items:center;flex-shrink:0\">'+(item.d?'<span style=\"color:#3E6B58;font-size:8px\">\u2713<\/span>':'')+'<\/div><span style=\"font-size:12.5px;color:'+(item.d?'#13120D':'#7A7266')+'\">'+item.t+'<\/span><\/div>';\n  });\n}\nfunction exportAll(){\n  var p=[],ctx=getCtx();p.push('=== ORTIVE STUDIO - FULL SESSION ===','Product: '+S.name,'Type: '+S.typeName+' \/ Mode: '+S.modeChip,'Date: '+new Date().toLocaleDateString(),'');\n  if(S.blueprint){var b=S.blueprint;p.push('--- BLUEPRINT ---','Name: '+(b.productName||S.name),'Tagline: '+(b.tagline||''),'Elevator: '+(b.elevator||''),'ICP: '+(b.icp||''),'Revenue: '+(b.revenueRange||''),'');}\n  if(S.deployRaw){try{var dj=JSON.parse(S.deployRaw);p.push('--- DEPLOYMENT MANUAL ---','Cost: '+dj.monthlyCost,'');(dj.techStack||[]).forEach(function(t){p.push(t.category+': '+t.tool+' ('+t.cost+') - '+t.why)});p.push('');(dj.phases||[]).forEach(function(ph){p.push('',ph.title);(ph.steps||[]).forEach(function(s,i){p.push('  '+(i+1)+'. '+s)})});p.push('');}catch(e){}}\n  p.push('--- OFFER ---','Industry: '+ctx.industry,'Problem: '+ctx.problem,'Customer: '+ctx.customer,'Price: $'+ctx.price+'\/mo ('+ctx.model+')','');\n  if(S.offerData){var od=S.offerData;p.push('--- SALES PACKAGE ---','Product: '+(od.productName||S.name),'Tagline: '+(od.tagline||''),'Hero: '+(od.heroHeadline||''));(od.bullets||[]).forEach(function(bl){p.push('- '+bl)});p.push('');}\n  if(S.lpData){var lp=S.lpData;p.push('--- LANDING PAGE ---');if(lp.hero)p.push('HERO:',lp.hero.headline||'',lp.hero.sub||'','');if(lp.cta)p.push('CTA:',lp.cta.headline||'',lp.cta.button||'','');}\n  if(S.outreachData){p.push('--- OUTREACH ---');(S.outreachData.emails||[]).forEach(function(e){p.push('',e.label,'Subject: '+e.subject,e.body,'')});}\n  var pr=parseInt((document.getElementById('m-price-slider')||{}).value)||97;var rc12=parseInt((document.getElementById('rc12')||{}).value)||80;p.push('--- REVENUE ---','Price: $'+pr+'\/mo','Month 12: '+rc12+' customers = $'+(rc12*pr)+'\/mo','ARR: $'+(rc12*pr*12));\n  var txt=p.join('\\n');navigator.clipboard.writeText(txt).catch(function(){});var blob=new Blob([txt],{type:'text\/plain'});var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download=(S.name||'session').replace(\/\\s+\/g,'-').toLowerCase()+'-ortive-session.txt';document.body.appendChild(a);a.click();document.body.removeChild(a);toast('Full session saved.');\n}\n\n\/* \u2550\u2550 UNIFIED apiFetch \u2550\u2550 *\/\nasync function apiFetch(prompt,maxT){\n  var key=sessionStorage.getItem('ortive_key');\n  var provider=sessionStorage.getItem('ortive_provider')||'anthropic';\n  if(!key)throw new Error('No API key connected. Please paste your key in the Connect bar at the top.');\n  var text=await _llmCall(provider,key,prompt,maxT);\n  return JSON.parse(text.replace(\/```json|```\/g,'').trim());\n}\nasync function _llmCall(provider,key,prompt,maxT){\n  var cfg=BYOK_PROVIDERS[provider];var res,data;\n  if(provider==='anthropic'){res=await fetch('https:\/\/api.anthropic.com\/v1\/messages',{method:'POST',headers:{'Content-Type':'application\/json','x-api-key':key,'anthropic-version':'2023-06-01','anthropic-dangerous-direct-browser-access':'true'},body:JSON.stringify({model:cfg.model,max_tokens:maxT,messages:[{role:'user',content:prompt}]})});data=await res.json();if(!res.ok)throw new Error(data.error?data.error.message:'Anthropic error '+res.status);return(data.content||[]).map(function(b){return b.text||''}).join('');}\n  if(provider==='google'){var url='https:\/\/generativelanguage.googleapis.com\/v1beta\/models\/'+cfg.model+':generateContent?key='+key;res=await fetch(url,{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({contents:[{role:'user',parts:[{text:prompt}]}]})});data=await res.json();if(!res.ok||data.error)throw new Error(data.error?data.error.message:'Google error '+res.status);return data.candidates[0].content.parts[0].text;}\n  if(provider==='cohere'){res=await fetch('https:\/\/api.cohere.com\/v1\/chat',{method:'POST',headers:{'Authorization':'Bearer '+key,'Content-Type':'application\/json'},body:JSON.stringify({model:cfg.model,max_tokens:maxT,message:prompt})});data=await res.json();if(!res.ok||data.message)throw new Error(data.message||'Cohere error '+res.status);return data.text;}\n  var endpoints={openai:'https:\/\/api.openai.com\/v1\/chat\/completions',xai:'https:\/\/api.x.ai\/v1\/chat\/completions',mistral:'https:\/\/api.mistral.ai\/v1\/chat\/completions',deepseek:'https:\/\/api.deepseek.com\/v1\/chat\/completions',groq:'https:\/\/api.groq.com\/openai\/v1\/chat\/completions',together:'https:\/\/api.together.xyz\/v1\/chat\/completions',fireworks:'https:\/\/api.fireworks.ai\/inference\/v1\/chat\/completions',perplexity:'https:\/\/api.perplexity.ai\/chat\/completions'};\n  res=await fetch(endpoints[provider],{method:'POST',headers:{'Authorization':'Bearer '+key,'Content-Type':'application\/json'},body:JSON.stringify({model:cfg.model,max_tokens:maxT,messages:[{role:'user',content:prompt}]})});\n  data=await res.json();if(!res.ok||data.error)throw new Error(data.error?data.error.message:cfg.label+' error '+res.status);return data.choices[0].message.content;\n}\n\n\/* \u2550\u2550 HELPERS \u2550\u2550 *\/\nfunction skelHTML(tall){var h='<div style=\"padding:20px\">';for(var i=0;i<(tall?8:5);i++)h+='<div class=\"skel\" style=\"height:'+(i===0?14:10)+'px;width:'+(60+Math.random()*30|0)+'%;margin-bottom:'+(i===0?14:8)+'px\"><\/div>';return h+'<\/div>';}\nfunction rsec(label,body){return'<div class=\"rsec\"><div class=\"rsec-lbl\">'+label+'<\/div>'+body+'<\/div>';}\nfunction listHtml(items,label){if(!Array.isArray(items)||!items.length)return'';var h=label?'<div class=\"rsec-lbl\">'+label+'<\/div>':'';h+='<ul>';items.forEach(function(i){h+='<li>'+i+'<\/li>';});h+='<\/ul>';return h;}\nfunction codeBlock(label,text){var id='c_'+Math.random().toString(36).slice(2,7);return'<div class=\"code-wrap\"><div class=\"code-top\"><span class=\"code-lbl\">'+label+'<\/span><button class=\"copy-btn\" onclick=\"cpText(\\''+id+'\\')\">Copy<\/button><\/div><pre class=\"code-pre\" id=\"'+id+'\">'+text+'<\/pre><\/div>';}\nfunction cpText(id){var el=document.getElementById(id);if(!el)return;navigator.clipboard.writeText(el.textContent).then(function(){toast('Copied.')});}\nfunction mark(step){var el=document.getElementById('nn-'+step);if(el){el.innerHTML='<svg width=\"8\" height=\"8\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>';el.parentElement.classList.add('done');}}\nfunction toast(msg){var t=document.getElementById('toast');if(!t)return;t.textContent=msg;t.style.transform='translateY(0)';t.style.opacity='1';setTimeout(function(){t.style.transform='translateY(60px)';t.style.opacity='0';},2600);}\n\n\/* \u2550\u2550 INIT \u2550\u2550 *\/\n(function init(){\n  var savedKey=sessionStorage.getItem('ortive_key');\n  var savedProvider=sessionStorage.getItem('ortive_provider')||'anthropic';\n  if(savedKey&&BYOK_PROVIDERS[savedProvider]){\n    showConnected(savedProvider);\n    var sel=document.getElementById('gw-provider');if(sel)sel.value=savedProvider;\n  }\n  buildTypeGrid();calcRev();buildGTM();\n  var ps=document.getElementById('m-price-slider');if(ps)ps.oninput=function(){var v=this.value;['m-price-disp','m1-price','rev-pr'].forEach(function(id){var e=document.getElementById(id);if(e)e.textContent=v;});};\n})();\n<\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Design, blueprint, and monetize AI products \u2014 agents, SaaS apps, APIs, chatbots \u2014 with a guided AI studio. Define your product, generate a deployment manual with real tech stack and costs, then create your full sales package, landing page copy, and outreach sequence. One tool, idea to revenue.<\/p>\n","protected":false},"author":1,"featured_media":15879,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_glsr_average":0,"_glsr_ranking":0,"_glsr_reviews":0,"footnotes":""},"class_list":["post-15681","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ortive \u2014 AI Product Studio | Build &amp; Monetize AI Products - Ange Ingabire |E-commerce &amp; AI Business Consultant<\/title>\n<meta name=\"description\" content=\"Design, blueprint, and monetize AI products \u2014 agents, SaaS apps, APIs, chatbots \u2014 with a guided AI studio. Define your product, generate a deployment manual with real tech stack and costs, then create your full sales package, landing page copy, and outreach sequence. One tool, idea to revenue.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ortive \u2014 AI Product Studio | Build &amp; Monetize AI Products - Ange Ingabire |E-commerce &amp; AI Business Consultant\" \/>\n<meta property=\"og:description\" content=\"Design, blueprint, and monetize AI products \u2014 agents, SaaS apps, APIs, chatbots \u2014 with a guided AI studio. Define your product, generate a deployment manual with real tech stack and costs, then create your full sales package, landing page copy, and outreach sequence. One tool, idea to revenue.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/\" \/>\n<meta property=\"og:site_name\" content=\"Ange Ingabire |E-commerce &amp; AI Business Consultant\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-17T00:20:29+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/angeingabire.com\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_iopeo4iopeo4iope.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1408\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/angeingabire.com\\\/index.php\\\/ortive-ai-product-studio-build-monetize-ai-products\\\/\",\"url\":\"https:\\\/\\\/angeingabire.com\\\/index.php\\\/ortive-ai-product-studio-build-monetize-ai-products\\\/\",\"name\":\"Ortive \u2014 AI Product Studio | Build & Monetize AI Products - Ange Ingabire |E-commerce &amp; AI Business Consultant\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/angeingabire.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/angeingabire.com\\\/index.php\\\/ortive-ai-product-studio-build-monetize-ai-products\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/angeingabire.com\\\/index.php\\\/ortive-ai-product-studio-build-monetize-ai-products\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/angeingabire.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/Gemini_Generated_Image_iopeo4iopeo4iope.png\",\"datePublished\":\"2026-03-25T13:09:54+00:00\",\"dateModified\":\"2026-05-17T00:20:29+00:00\",\"description\":\"Design, blueprint, and monetize AI products \u2014 agents, SaaS apps, APIs, chatbots \u2014 with a guided AI studio. Define your product, generate a deployment manual with real tech stack and costs, then create your full sales package, landing page copy, and outreach sequence. One tool, idea to revenue.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/angeingabire.com\\\/index.php\\\/ortive-ai-product-studio-build-monetize-ai-products\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/angeingabire.com\\\/index.php\\\/ortive-ai-product-studio-build-monetize-ai-products\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/angeingabire.com\\\/index.php\\\/ortive-ai-product-studio-build-monetize-ai-products\\\/#primaryimage\",\"url\":\"https:\\\/\\\/angeingabire.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/Gemini_Generated_Image_iopeo4iopeo4iope.png\",\"contentUrl\":\"https:\\\/\\\/angeingabire.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/Gemini_Generated_Image_iopeo4iopeo4iope.png\",\"width\":1408,\"height\":768,\"caption\":\"Ortive \u2014 The AI Product Studio | Build & Monetize AI Products\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/angeingabire.com\\\/index.php\\\/ortive-ai-product-studio-build-monetize-ai-products\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/angeingabire.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ortive \u2014 AI Product Studio | Build &#038; Monetize AI Products\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/angeingabire.com\\\/#website\",\"url\":\"https:\\\/\\\/angeingabire.com\\\/\",\"name\":\"Ange Ingabire |E-commerce &amp; AI Business Consultant\",\"description\":\"E-commerce &amp; AI Business Solutions\",\"publisher\":{\"@id\":\"https:\\\/\\\/angeingabire.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/angeingabire.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/angeingabire.com\\\/#organization\",\"name\":\"Ange Ingabire\",\"url\":\"https:\\\/\\\/angeingabire.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/angeingabire.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/angeingabire.com\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/7.png\",\"contentUrl\":\"https:\\\/\\\/angeingabire.com\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/7.png\",\"width\":1080,\"height\":1080,\"caption\":\"Ange Ingabire\"},\"image\":{\"@id\":\"https:\\\/\\\/angeingabire.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.pinterest.com\\\/ange_ingabire\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/ange-ingabire-327893236\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ortive \u2014 AI Product Studio | Build & Monetize AI Products - Ange Ingabire |E-commerce &amp; AI Business Consultant","description":"Design, blueprint, and monetize AI products \u2014 agents, SaaS apps, APIs, chatbots \u2014 with a guided AI studio. Define your product, generate a deployment manual with real tech stack and costs, then create your full sales package, landing page copy, and outreach sequence. One tool, idea to revenue.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/","og_locale":"en_GB","og_type":"article","og_title":"Ortive \u2014 AI Product Studio | Build & Monetize AI Products - Ange Ingabire |E-commerce &amp; AI Business Consultant","og_description":"Design, blueprint, and monetize AI products \u2014 agents, SaaS apps, APIs, chatbots \u2014 with a guided AI studio. Define your product, generate a deployment manual with real tech stack and costs, then create your full sales package, landing page copy, and outreach sequence. One tool, idea to revenue.","og_url":"https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/","og_site_name":"Ange Ingabire |E-commerce &amp; AI Business Consultant","article_modified_time":"2026-05-17T00:20:29+00:00","og_image":[{"width":1408,"height":768,"url":"http:\/\/angeingabire.com\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_iopeo4iopeo4iope.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/","url":"https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/","name":"Ortive \u2014 AI Product Studio | Build & Monetize AI Products - Ange Ingabire |E-commerce &amp; AI Business Consultant","isPartOf":{"@id":"https:\/\/angeingabire.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/#primaryimage"},"image":{"@id":"https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/#primaryimage"},"thumbnailUrl":"https:\/\/angeingabire.com\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_iopeo4iopeo4iope.png","datePublished":"2026-03-25T13:09:54+00:00","dateModified":"2026-05-17T00:20:29+00:00","description":"Design, blueprint, and monetize AI products \u2014 agents, SaaS apps, APIs, chatbots \u2014 with a guided AI studio. Define your product, generate a deployment manual with real tech stack and costs, then create your full sales package, landing page copy, and outreach sequence. One tool, idea to revenue.","breadcrumb":{"@id":"https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/#primaryimage","url":"https:\/\/angeingabire.com\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_iopeo4iopeo4iope.png","contentUrl":"https:\/\/angeingabire.com\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_iopeo4iopeo4iope.png","width":1408,"height":768,"caption":"Ortive \u2014 The AI Product Studio | Build & Monetize AI Products"},{"@type":"BreadcrumbList","@id":"https:\/\/angeingabire.com\/index.php\/ortive-ai-product-studio-build-monetize-ai-products\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/angeingabire.com\/"},{"@type":"ListItem","position":2,"name":"Ortive \u2014 AI Product Studio | Build &#038; Monetize AI Products"}]},{"@type":"WebSite","@id":"https:\/\/angeingabire.com\/#website","url":"https:\/\/angeingabire.com\/","name":"Ange Ingabire |E-commerce &amp; AI Business Consultant","description":"E-commerce &amp; AI Business Solutions","publisher":{"@id":"https:\/\/angeingabire.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/angeingabire.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/angeingabire.com\/#organization","name":"Ange Ingabire","url":"https:\/\/angeingabire.com\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/angeingabire.com\/#\/schema\/logo\/image\/","url":"https:\/\/angeingabire.com\/wp-content\/uploads\/2023\/06\/7.png","contentUrl":"https:\/\/angeingabire.com\/wp-content\/uploads\/2023\/06\/7.png","width":1080,"height":1080,"caption":"Ange Ingabire"},"image":{"@id":"https:\/\/angeingabire.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.pinterest.com\/ange_ingabire\/","https:\/\/www.linkedin.com\/in\/ange-ingabire-327893236\/"]}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/angeingabire.com\/index.php\/wp-json\/wp\/v2\/pages\/15681","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/angeingabire.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/angeingabire.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/angeingabire.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/angeingabire.com\/index.php\/wp-json\/wp\/v2\/comments?post=15681"}],"version-history":[{"count":46,"href":"https:\/\/angeingabire.com\/index.php\/wp-json\/wp\/v2\/pages\/15681\/revisions"}],"predecessor-version":[{"id":16046,"href":"https:\/\/angeingabire.com\/index.php\/wp-json\/wp\/v2\/pages\/15681\/revisions\/16046"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/angeingabire.com\/index.php\/wp-json\/wp\/v2\/media\/15879"}],"wp:attachment":[{"href":"https:\/\/angeingabire.com\/index.php\/wp-json\/wp\/v2\/media?parent=15681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}