{"product_id":"search-visualizer-bundle","title":"Search Engine + Visualizer Bundle","description":"\u003c!-- PROJECT THEO — Search Engine + Stack Visualizer Bundle Product Page --\u003e\n\u003c!-- HANDLE: \/products\/search-visualizer-bundle --\u003e\n\u003c!-- PRICE: $15.99\/month. $18.98 bought separately. --\u003e\n\u003c!-- WORKER GRANTS: search, visualizer --\u003e\n\u003c!-- COPY CHANGES IN THIS VERSION. No CSS, no layout, no script changes.\n       1. \"Full Access: All Three Tools\" now names the three tools.\n       2. The Annual row tag drops its em dash.\n       3. The Stack Visualizer included list said \"reconstitution calculator.\" The\n          calculator is FREE in the visualizer (calculator mode is ungated; only the\n          two-compound gate is paid), so listing it as a paid inclusion was wrong and\n          it left out the protocol reference PDF, which is a real member feature. The\n          line now matches the Stack Visualizer page's own member column. --\u003e\n\u003c!-- SEO: the page title and meta description are NOT set by this file. They live in\n     Admin \u003e Products \u003e [Bundle] \u003e Search engine listing \u003e Edit. Paste them from\n     PT_Product_Page_SEO_Fields_1524_07_15_2026.md. The bundle's meta is currently EMPTY.\n     This comment does not fill it. --\u003e\n\u003c!-- Paste into Shopify: Admin \u003e Products \u003e [Bundle] \u003e Description \u003e Edit HTML \u003e Full replacement \u003e Save --\u003e\n\u003c!-- The Seal subscription widget and Subscribe button render ABOVE this description automatically. --\u003e\n\u003c!-- CLICKABLE PRICING ROWS: every row is a link to that product EXCEPT this page's own\n     row, which carries the \"Subscribe above\" tag instead. Do not link a row to its own URL. --\u003e\n\u003c!-- NAMING: this page says \"Search Engine\" throughout, not \"Search App.\" The Seal plan\n     name and plan description are the only surfaces still using \"Search App.\" They are\n     display strings; the Worker keys entitlement on line_items[].product_id, not on any\n     title, so renaming them cannot break an unlock. Do NOT change the handle. --\u003e\n\n\u003cstyle\u003e\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;1,400\u0026family=Jost:wght@300;400;500;600\u0026display=swap');\n\n  .product__title, .product-single__title, h1.product__title { display: none !important; }\n  .pt-smin-section { display: none !important; }\n\n  .pro-wrap {\n    max-width: 720px;\n    margin: 0 auto;\n    padding: 0 24px 48px;\n    font-family: 'Jost', sans-serif;\n    font-weight: 300;\n    font-size: 15px;\n    line-height: 1.75;\n    color: #c8c0b0;\n  }\n  .pro-wrap * { box-sizing: border-box; margin: 0; padding: 0; }\n\n  \/* Preview block *\/\n  .pro-search-preview {\n    margin-bottom: 40px;\n    padding: 28px 24px 24px;\n    background: #222220;\n    border: 1px solid rgba(181,169,138,0.28);\n    border-radius: 4px;\n    position: relative;\n    overflow: hidden;\n  }\n  .pro-search-preview::before {\n    content: '';\n    position: absolute;\n    top: 0; left: 0; right: 0;\n    height: 2px;\n    background: linear-gradient(90deg, transparent, #b5a98a, transparent);\n    opacity: 0.5;\n  }\n  .pro-search-preview__label { font-size: 10px; font-weight: 600; letter-spacing: 0.15em; text-transform: uppercase; color: #b5a98a; margin-bottom: 10px; }\n  .pro-search-preview__title { font-family: 'Cormorant Garamond', serif; font-size: 22px; font-weight: 400; color: #e8e0d0; line-height: 1.3; margin-bottom: 8px; }\n  .pro-search-preview__subtext { font-size: 13px; font-weight: 300; color: #bfb8a8; line-height: 1.65; margin-bottom: 20px; }\n\n  \/* Two step workflow preview *\/\n  .pt-flow { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }\n  .pt-flow-panel {\n    padding: 14px 13px;\n    background: rgba(255,255,255,0.03);\n    border: 1px solid rgba(181,169,138,0.18);\n    border-radius: 4px;\n  }\n  .pt-flow-panel__head { display: flex; align-items: center; gap: 7px; margin-bottom: 12px; }\n  .pt-flow-panel__num { font-family: 'Cormorant Garamond', serif; font-size: 20px; line-height: 1; color: #b5a98a; flex-shrink: 0; }\n  .pt-flow-panel__name { font-size: 9px; font-weight: 500; letter-spacing: 0.18em; text-transform: uppercase; color: #8a8478; }\n  .pt-flow-panel__q { font-size: 12px; color: #bfb8a8; font-style: italic; margin-bottom: 10px; line-height: 1.5; }\n  .pt-flow-panel__a { font-size: 12px; color: #e8e0d0; line-height: 1.6; }\n\n  .pt-mini-row { margin-bottom: 9px; }\n  .pt-mini-row-name { font-size: 9px; letter-spacing: 0.1em; text-transform: uppercase; color: #8a8478; margin-bottom: 4px; }\n  .pt-mini-track { background: rgba(181,169,138,0.08); border-radius: 2px; height: 6px; overflow: hidden; }\n  .pt-mini-bar { height: 100%; border-radius: 2px; background: linear-gradient(90deg, #b5a98a, rgba(181,169,138,0.4)); }\n  .pt-mini-flag {\n    margin-top: 10px;\n    padding: 8px 10px;\n    background: rgba(181,169,138,0.06);\n    border: 1px solid rgba(181,169,138,0.2);\n    border-radius: 3px;\n    font-size: 11px;\n    color: #bfb8a8;\n    line-height: 1.5;\n  }\n  .pt-mini-flag strong { color: #e8e0d0; font-weight: 500; }\n  .pt-flow-caption { font-size: 11px; color: #8a8478; font-style: italic; margin-top: 14px; line-height: 1.5; text-align: center; }\n\n  \/* Member state under the preview *\/\n  .pro-preview-upgrade { display: none; margin-top: 16px; padding: 0 2px; text-align: center; }\n  .pro-preview-upgrade.active { display: block; }\n  .pro-preview-upgrade__text { font-size: 12px; color: #bfb8a8; line-height: 1.5; margin-bottom: 8px; }\n  .pro-preview-upgrade__note { font-size: 10px; color: #8a8478; }\n  .pro-preview-nudge {\n    display: none;\n    margin-top: 16px;\n    padding: 14px 16px;\n    background: rgba(181,169,138,0.06);\n    border: 1px solid rgba(181,169,138,0.22);\n    border-radius: 4px;\n  }\n  .pro-preview-nudge.active { display: block; }\n  .pro-preview-nudge__label { font-size: 9px; font-weight: 500; letter-spacing: 0.2em; text-transform: uppercase; color: #b5a98a; margin-bottom: 6px; }\n  .pro-preview-nudge__text { font-size: 12px; font-weight: 300; color: #bfb8a8; line-height: 1.5; margin-bottom: 12px; }\n  .pro-preview-nudge__links { display: flex; flex-wrap: wrap; gap: 8px; }\n  .pro-preview-nudge__link {\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n    padding: 8px 12px;\n    background: rgba(181,169,138,0.1);\n    border: 1px solid rgba(181,169,138,0.28);\n    border-radius: 3px;\n    font-size: 11px;\n    font-weight: 500;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: #e8e0d0;\n    text-decoration: none;\n    transition: background 0.15s ease;\n  }\n  .pro-preview-nudge__link:hover { background: rgba(181,169,138,0.2); }\n  .pro-search-preview__disclaimer { margin-top: 16px; font-size: 10px; color: #6e6a64; text-align: center; opacity: 0.7; }\n\n  \/* Page structure *\/\n  .pro-title-block { margin-bottom: 32px; padding-top: 8px; }\n  .pro-title-block .pro-label { font-size: 10px; font-weight: 600; letter-spacing: 0.15em; text-transform: uppercase; color: #b5a98a; margin-bottom: 10px; }\n  .pro-title-block h1 { font-family: 'Cormorant Garamond', serif; font-size: 32px; font-weight: 400; color: #e8e0d0; line-height: 1.3; margin-bottom: 0; display: block !important; }\n  .pro-hook { border-left: 3px solid #b5a98a; padding-left: 20px; margin-bottom: 40px; }\n  .pro-hook p { font-family: 'Cormorant Garamond', serif; font-size: 22px; line-height: 1.5; color: #e8e0d0; }\n  .pro-wrap p { margin-bottom: 16px; color: #c8c0b0; }\n  .pro-label { font-size: 10px; font-weight: 600; letter-spacing: 0.15em; text-transform: uppercase; color: #b5a98a; margin-bottom: 10px; }\n  .pro-section-head { font-family: 'Cormorant Garamond', serif; font-size: 24px; color: #e8e0d0; margin-bottom: 16px; margin-top: 8px; font-weight: 400; }\n  .pro-divider { border: none; border-top: 1px solid #3a3a32; margin: 36px 0; }\n  .pro-feature-row { margin-bottom: 32px; }\n  .pro-feature-label { font-size: 10px; font-weight: 600; letter-spacing: 0.15em; text-transform: uppercase; color: #b5a98a; margin-bottom: 6px; }\n  .pro-feature-title { font-family: 'Cormorant Garamond', serif; font-size: 20px; color: #e8e0d0; margin-bottom: 8px; font-weight: 400; }\n  .pro-feature-desc { color: #c8c0b0; margin-bottom: 0; }\n\n  \/* Two tool grid *\/\n  .pro-included-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0; margin: 24px 0 36px; }\n  .pro-included-col { padding: 20px; background: #1a1a18; }\n  .pro-included-col + .pro-included-col { background: #222220; border-left: 2px solid #b5a98a; }\n  .pro-included-head { font-size: 10px; font-weight: 600; letter-spacing: 0.15em; text-transform: uppercase; color: #b5a98a; margin-bottom: 6px; }\n  .pro-included-name { font-family: 'Cormorant Garamond', serif; font-size: 19px; color: #e8e0d0; font-weight: 400; margin-bottom: 12px; }\n  .pro-included-item { font-size: 13px; color: #e8e0d0; line-height: 1.6; margin-bottom: 9px; }\n  .pro-included-price { margin-top: 14px; padding-top: 12px; border-top: 1px solid rgba(181,169,138,0.15); font-size: 11px; color: #8a8478; }\n\n  \/* Pricing block *\/\n  .pro-pricing-block { margin: 36px 0; background: #1a1a18; border: 1px solid rgba(181,169,138,0.22); border-radius: 4px; overflow: hidden; }\n  .pro-pricing-row {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-start;\n    padding: 20px 24px;\n    border-bottom: 1px solid rgba(181,169,138,0.12);\n    gap: 16px;\n    text-decoration: none;\n    color: inherit;\n  }\n  .pro-pricing-row:last-child { border-bottom: none; }\n  .pro-pricing-row.featured { background: #222220; }\n  .pro-pricing-row--link { cursor: pointer; transition: background 0.15s ease; }\n  .pro-pricing-row--link:hover { background: #262622; }\n  .pro-pricing-row.is-current { background: rgba(181,169,138,0.05); border-left: 2px solid #b5a98a; }\n  .pro-pricing-row-left { flex: 1; }\n  .pro-pricing-row-tag { font-size: 9px; font-weight: 600; letter-spacing: 0.18em; text-transform: uppercase; color: #b5a98a; margin-bottom: 5px; }\n  .pro-pricing-row-name { font-family: 'Cormorant Garamond', serif; font-size: 18px; color: #e8e0d0; font-weight: 400; margin-bottom: 6px; }\n  .pro-pricing-row-desc { font-size: 12px; color: #8a8478; line-height: 1.55; }\n  .pro-pricing-row-price { text-align: right; white-space: nowrap; flex-shrink: 0; }\n  .pro-pricing-row-amount { font-family: 'Cormorant Garamond', serif; font-size: 22px; color: #e8e0d0; font-weight: 400; display: block; }\n  .pro-pricing-row-period { font-size: 10px; color: #8a8478; }\n  .pro-pricing-row-save { display: inline-block; margin-top: 4px; font-size: 9px; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: #b5a98a; background: rgba(181,169,138,0.1); padding: 2px 7px; border-radius: 2px; }\n  .pro-pricing-row-here { display: block; margin-top: 6px; font-size: 9px; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: #b5a98a; }\n  .pro-pricing-row-go { display: block; margin-top: 6px; font-size: 9px; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: #b5a98a; }\n  .pro-pricing-row--link:hover .pro-pricing-row-go { color: #e8e0d0; }\n\n  \/* Other tools *\/\n  .pro-tools-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin: 24px 0 8px; }\n  .pro-tool-card {\n    display: block;\n    padding: 18px 20px;\n    background: #1e1e1c;\n    border: 1px solid rgba(181,169,138,0.35);\n    border-radius: 4px;\n    text-decoration: none;\n    cursor: pointer;\n    transition: border-color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease;\n    box-shadow: 0 1px 4px rgba(0,0,0,0.3);\n  }\n  .pro-tool-card:hover { border-color: #b5a98a; background: #262622; box-shadow: 0 2px 8px rgba(0,0,0,0.4); }\n  .pro-tool-card-label { font-size: 9px; font-weight: 600; letter-spacing: 0.18em; text-transform: uppercase; color: #b5a98a; margin-bottom: 6px; }\n  .pro-tool-card-name { font-family: 'Cormorant Garamond', serif; font-size: 17px; color: #e8e0d0; font-weight: 400; margin-bottom: 5px; }\n  .pro-tool-card-price { font-size: 11px; color: #9a9488; }\n  .pro-tool-card-arrow { font-size: 11px; font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase; color: #b5a98a; margin-top: 12px; display: flex; align-items: center; gap: 5px; }\n  .pro-tool-card-arrow::after { content: '\\2192'; transition: transform 0.15s ease; }\n  .pro-tool-card:hover .pro-tool-card-arrow::after { transform: translateX(3px); }\n\n  .pro-disclaimer { text-align: center; font-size: 11px; color: #666; margin-top: 36px; line-height: 1.6; }\n\n  @media (max-width: 700px) {\n    .pro-tools-grid { grid-template-columns: 1fr 1fr; }\n  }\n  @media (max-width: 520px) {\n    .pt-flow { grid-template-columns: 1fr; }\n    .pro-included-grid { grid-template-columns: 1fr; }\n    .pro-included-col + .pro-included-col { border-left: none; border-top: 2px solid #b5a98a; }\n    .pro-tools-grid { grid-template-columns: 1fr; }\n    .pro-hook p { font-size: 19px; }\n    .pro-title-block h1 { font-size: 26px; }\n    .pro-pricing-row { flex-direction: column; gap: 12px; }\n    .pro-pricing-row-price { text-align: left; }\n  }\n\u003c\/style\u003e\n\n\u003cdiv class=\"pro-wrap\"\u003e\n\n  \u003c!-- Preview --\u003e\n  \u003cdiv class=\"pro-search-preview\"\u003e\n    \u003cdiv class=\"pro-search-preview__label\"\u003eSearch Engine + Stack Visualizer\u003c\/div\u003e\n    \u003cdiv class=\"pro-search-preview__title\"\u003eAsk the question. Then check the answer against your actual stack.\u003c\/div\u003e\n    \u003cp class=\"pro-search-preview__subtext\"\u003eThese are the two tools you use every week. One answers what a compound does. The other shows what happens when you add it to what you are already running.\u003c\/p\u003e\n\n    \u003cdiv class=\"pt-flow\"\u003e\n      \u003cdiv class=\"pt-flow-panel\"\u003e\n        \u003cdiv class=\"pt-flow-panel__head\"\u003e\n          \u003cspan class=\"pt-flow-panel__num\"\u003e1\u003c\/span\u003e\n          \u003cspan class=\"pt-flow-panel__name\"\u003eSearch Engine\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003cp class=\"pt-flow-panel__q\"\u003e\"Can I run ipamorelin while I am on retatrutide?\"\u003c\/p\u003e\n        \u003cp class=\"pt-flow-panel__a\"\u003eThey act on different receptors, so there is no direct competition. Ipamorelin needs a fasted window to produce a clean growth hormone pulse. Retatrutide slows digestion, which stretches how long food stays in your system, so the fasted window you think you have may not be there.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"pt-flow-panel\"\u003e\n        \u003cdiv class=\"pt-flow-panel__head\"\u003e\n          \u003cspan class=\"pt-flow-panel__num\"\u003e2\u003c\/span\u003e\n          \u003cspan class=\"pt-flow-panel__name\"\u003eStack Visualizer\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"pt-mini-row\"\u003e\n          \u003cdiv class=\"pt-mini-row-name\"\u003eRetatrutide, 148hr\u003c\/div\u003e\n          \u003cdiv class=\"pt-mini-track\"\u003e\u003cdiv class=\"pt-mini-bar\" style=\"width:100%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"pt-mini-row\"\u003e\n          \u003cdiv class=\"pt-mini-row-name\"\u003eIpamorelin, 2hr\u003c\/div\u003e\n          \u003cdiv class=\"pt-mini-track\"\u003e\u003cdiv class=\"pt-mini-bar\" style=\"width:32%; opacity:0.7\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"pt-mini-flag\"\u003e\n          \u003cstrong\u003eNo receptor conflict.\u003c\/strong\u003e Timing flag: allow 3 hours minimum after the last meal before the ipamorelin injection.\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cp class=\"pt-flow-caption\"\u003eExample only. Your compounds, your curves, and your flags are generated from what you enter.\u003c\/p\u003e\n\n    \u003cdiv class=\"pro-preview-upgrade\" id=\"ptPreviewUpgrade\"\u003e\n      \u003cp class=\"pro-preview-upgrade__text\"\u003eBoth tools have a free layer. The engine gives a few questions before it stops. The visualizer analyzes one compound but not a stack. The bundle removes both limits.\u003c\/p\u003e\n      \u003cp class=\"pro-preview-upgrade__note\"\u003eSubscribe above to unlock both.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pro-preview-nudge\" id=\"ptPreviewNudge\"\u003e\n      \u003cdiv class=\"pro-preview-nudge__label\"\u003eYou already have access\u003c\/div\u003e\n      \u003cdiv class=\"pro-preview-nudge__text\"\u003eYour subscription covers both tools. Open either one.\u003c\/div\u003e\n      \u003cdiv class=\"pro-preview-nudge__links\"\u003e\n        \u003ca class=\"pro-preview-nudge__link\" id=\"ptNudgeSearch\" href=\"#\" target=\"_blank\" rel=\"noopener\"\u003eOpen the Search Engine\u003c\/a\u003e\n        \u003ca class=\"pro-preview-nudge__link\" id=\"ptNudgeVis\" href=\"#\" target=\"_blank\" rel=\"noopener\"\u003eOpen the Stack Visualizer\u003c\/a\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cp class=\"pro-search-preview__disclaimer\"\u003eFor educational and research purposes only. Not medical advice.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Title --\u003e\n  \u003cdiv class=\"pro-title-block\"\u003e\n    \u003cdiv class=\"pro-label\"\u003ePeptide Research Bundle\u003c\/div\u003e\n    \u003ch1\u003eSearch Engine + Stack Visualizer\u003c\/h1\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Hook --\u003e\n  \u003cdiv class=\"pro-hook\"\u003e\n    \u003cp\u003eOne tool answers the question. The other checks the answer against the stack you are actually running.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cp\u003eEvery peptide question a researcher asks has two halves. The first is what the compound does on its own, which is what the search engine answers. The second is what happens when it goes on top of everything else already in the protocol, which is what the visualizer shows. Answering the first half without the second is how a stack that looks fine on paper produces a result nobody expected.\u003c\/p\u003e\n\n  \u003cp\u003eThis bundle puts both tools on one subscription. Ask any compound question and get a research-focused answer in seconds. Then map every compound in your stack onto one timeline and see where the half-lives overlap, where two compounds land on the same receptor, and which injection day lowers the peak. $15.99 a month for both, against $18.98 to subscribe to them separately.\u003c\/p\u003e\n\n  \u003chr class=\"pro-divider\"\u003e\n\n  \u003c!-- What is inside --\u003e\n  \u003cdiv class=\"pro-label\"\u003eWhat is in the bundle\u003c\/div\u003e\n  \u003cdiv class=\"pro-section-head\"\u003eBoth tools, at their full member level.\u003c\/div\u003e\n\n  \u003cdiv class=\"pro-included-grid\"\u003e\n    \u003cdiv class=\"pro-included-col\"\u003e\n      \u003cdiv class=\"pro-included-head\"\u003eIncluded in full\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-name\"\u003eResearch Search Engine\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-item\"\u003eUnlimited questions, no daily cap\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-item\"\u003eExtended answers when the question warrants it\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-item\"\u003eFull search history across sessions\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-item\"\u003eAnswer export to a branded document\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-item\"\u003eThreaded follow-up without losing context\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-price\"\u003e$5.99 a month on its own\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pro-included-col\"\u003e\n      \u003cdiv class=\"pro-included-head\"\u003eIncluded in full\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-name\"\u003eStack Visualizer\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-item\"\u003eUp to 8 compounds on one shared timeline\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-item\"\u003eReceptor overlap curves across the full stack\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-item\"\u003eConflict map with receptor, timing, and pairing flags\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-item\"\u003eInjection day optimization\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-item\"\u003e7 day schedule, calendar export, and protocol reference PDF\u003c\/div\u003e\n      \u003cdiv class=\"pro-included-price\"\u003e$12.99 a month on its own\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cp\u003eNothing is trimmed. Both tools run at the same member level they run at when bought individually. The bundle is the same access on one subscription instead of two.\u003c\/p\u003e\n\n  \u003chr class=\"pro-divider\"\u003e\n\n  \u003c!-- Pricing --\u003e\n  \u003cdiv class=\"pro-label\"\u003ePricing\u003c\/div\u003e\n  \u003cdiv class=\"pro-section-head\"\u003eThe bundle, or the year.\u003c\/div\u003e\n\n  \u003cdiv class=\"pro-pricing-block\"\u003e\n\n    \u003c!-- THIS PAGE'S PRODUCT. Not a link. --\u003e\n    \u003cdiv class=\"pro-pricing-row is-current\"\u003e\n      \u003cdiv class=\"pro-pricing-row-left\"\u003e\n        \u003cdiv class=\"pro-pricing-row-tag\"\u003eBundle\u003c\/div\u003e\n        \u003cdiv class=\"pro-pricing-row-name\"\u003eSearch Engine + Stack Visualizer\u003c\/div\u003e\n        \u003cdiv class=\"pro-pricing-row-desc\"\u003eBoth tools at full member level on one subscription. $18.98 bought separately. Cancel anytime.\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"pro-pricing-row-price\"\u003e\n        \u003cspan class=\"pro-pricing-row-amount\"\u003e$15.99\u003c\/span\u003e\n        \u003cspan class=\"pro-pricing-row-period\"\u003eper month\u003c\/span\u003e\n        \u003cspan class=\"pro-pricing-row-save\"\u003eSave $2.99\/mo\u003c\/span\u003e\n        \u003cspan class=\"pro-pricing-row-here\"\u003eSubscribe above\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003ca class=\"pro-pricing-row pro-pricing-row--link featured\" href=\"https:\/\/project-theo.com\/products\/full-access\"\u003e\n      \u003cdiv class=\"pro-pricing-row-left\"\u003e\n        \u003cdiv class=\"pro-pricing-row-tag\"\u003eAnnual, Best Value\u003c\/div\u003e\n        \u003cdiv class=\"pro-pricing-row-name\"\u003eFull Access: Search Engine, Stack Visualizer, Protocol Builder\u003c\/div\u003e\n        \u003cdiv class=\"pro-pricing-row-desc\"\u003eA year of this bundle is $191.88. Full Access is $199.99. That is $8.11 more for the year, and the Protocol Builder is included. The Builder is $479.88 a year on its own. The full guide library comes with it.\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"pro-pricing-row-price\"\u003e\n        \u003cspan class=\"pro-pricing-row-amount\"\u003e$199.99\u003c\/span\u003e\n        \u003cspan class=\"pro-pricing-row-period\"\u003eper year\u003c\/span\u003e\n        \u003cspan class=\"pro-pricing-row-save\"\u003e$8.11 more\u003c\/span\u003e\n        \u003cspan class=\"pro-pricing-row-go\"\u003eView\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/a\u003e\n\n  \u003c\/div\u003e\n\n  \u003cp style=\"font-size:13px; color:#8a8478;\"\u003eThat is the honest math and it is worth saying plainly. If you are going to run this bundle for a year anyway, the annual costs $8.11 more and hands you a $479.88 tool. The only reason to stay monthly is if you are not sure yet.\u003c\/p\u003e\n\n  \u003chr class=\"pro-divider\"\u003e\n\n  \u003c!-- Why these two --\u003e\n  \u003cdiv class=\"pro-label\"\u003eWhy these two together\u003c\/div\u003e\n  \u003cdiv class=\"pro-section-head\"\u003eThese are the tools you use every week.\u003c\/div\u003e\n\n  \u003cdiv class=\"pro-feature-row\"\u003e\n    \u003cdiv class=\"pro-feature-label\"\u003eThe Question and the Check\u003c\/div\u003e\n    \u003cdiv class=\"pro-feature-title\"\u003eResearch is not one step.\u003c\/div\u003e\n    \u003cp class=\"pro-feature-desc\"\u003eYou read something, you have a question, you get an answer. Then the real question shows up, which is whether that answer holds for your protocol specifically. The search engine handles the first part. The visualizer handles the second. Running one without the other leaves half the picture missing.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"pro-feature-row\"\u003e\n    \u003cdiv class=\"pro-feature-label\"\u003eOngoing, Not One Time\u003c\/div\u003e\n    \u003cdiv class=\"pro-feature-title\"\u003eBuilt for the research that keeps going.\u003c\/div\u003e\n    \u003cp class=\"pro-feature-desc\"\u003eThe Protocol Builder is a build. You run it, you get the protocol, you follow it. These two are different. Questions come up every week, and every time you change a compound or a dose the stack picture changes with it. That is why these two are bundled and the Builder is not.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"pro-feature-row\"\u003e\n    \u003cdiv class=\"pro-feature-label\"\u003eOne Subscription, One Email\u003c\/div\u003e\n    \u003cdiv class=\"pro-feature-title\"\u003eBoth tools unlock on the same address.\u003c\/div\u003e\n    \u003cp class=\"pro-feature-desc\"\u003eThe bundle records one membership against your email, and both tools read it. There is nothing to activate separately and no second code to keep track of.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003chr class=\"pro-divider\"\u003e\n\n  \u003c!-- Other tools --\u003e\n  \u003cdiv class=\"pro-label\"\u003eOther Research Tools\u003c\/div\u003e\n  \u003cdiv class=\"pro-section-head\"\u003eIf you only want one piece, or if you want everything.\u003c\/div\u003e\n\n  \u003cdiv class=\"pro-tools-grid\"\u003e\n    \u003ca class=\"pro-tool-card\" href=\"https:\/\/project-theo.com\/products\/pro\"\u003e\n      \u003cdiv class=\"pro-tool-card-label\"\u003eStandalone\u003c\/div\u003e\n      \u003cdiv class=\"pro-tool-card-name\"\u003eResearch Search Engine\u003c\/div\u003e\n      \u003cdiv class=\"pro-tool-card-price\"\u003e$5.99 \/ month\u003c\/div\u003e\n      \u003cdiv class=\"pro-tool-card-arrow\"\u003eThe engine on its own\u003c\/div\u003e\n    \u003c\/a\u003e\n    \u003ca class=\"pro-tool-card\" href=\"https:\/\/project-theo.com\/products\/stack-visualizer-tool\"\u003e\n      \u003cdiv class=\"pro-tool-card-label\"\u003eStandalone\u003c\/div\u003e\n      \u003cdiv class=\"pro-tool-card-name\"\u003eStack Visualizer\u003c\/div\u003e\n      \u003cdiv class=\"pro-tool-card-price\"\u003e$12.99 \/ month\u003c\/div\u003e\n      \u003cdiv class=\"pro-tool-card-arrow\"\u003eThe visualizer on its own\u003c\/div\u003e\n    \u003c\/a\u003e\n    \u003ca class=\"pro-tool-card\" href=\"https:\/\/project-theo.com\/products\/protocol-builder-tool\"\u003e\n      \u003cdiv class=\"pro-tool-card-label\"\u003eResearch Tool\u003c\/div\u003e\n      \u003cdiv class=\"pro-tool-card-name\"\u003eProtocol Builder\u003c\/div\u003e\n      \u003cdiv class=\"pro-tool-card-price\"\u003e$39.99 \/ month\u003c\/div\u003e\n      \u003cdiv class=\"pro-tool-card-arrow\"\u003eBuild a week by week protocol\u003c\/div\u003e\n    \u003c\/a\u003e\n  \u003c\/div\u003e\n\n  \u003chr class=\"pro-divider\"\u003e\n\n  \u003cp class=\"pro-disclaimer\"\u003eFor educational and research purposes only | Not medical advice | Not for human use guidance | Project Theo\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function() {\n  'use strict';\n  \/\/ Reads the shared pt_sub_email this browser already stores, asks the Worker what\n  \/\/ that email is entitled to, and shows the member nudge only if it covers BOTH tools\n  \/\/ this bundle grants. A search-only subscriber gets the upgrade note, not the nudge.\n  var WORKER  = 'https:\/\/pt-search.odd-snowflake-2e43.workers.dev';\n  var SUB_KEY = 'pt_sub_email';\n  var GRANTS  = ['search', 'visualizer'];   \/\/ what THIS product unlocks\n\n  \/\/ RESOLVED (was checklist 4.3): pages\/search-app is the live one. It is what the\n  \/\/ homepage, the blog search card, the minimal search bar, both diagnostic tools, and\n  \/\/ the payment connection reference all point at. search.project-theo.com is the Vercel\n  \/\/ deployment and appears only in the subscription management page's JS. The visualizer\n  \/\/ handle below is confirmed against t2 in the Worker's reference index.\n  var SEARCH_URL = 'https:\/\/project-theo.com\/pages\/search-app';\n  var VIS_URL    = 'https:\/\/project-theo.com\/pages\/protocol-intelligence-tool';\n\n  var upgrade = document.getElementById('ptPreviewUpgrade');\n  var nudge   = document.getElementById('ptPreviewNudge');\n  function showUpgrade() { if (upgrade) upgrade.classList.add('active'); }\n\n  var email = '';\n  try { email = (localStorage.getItem(SUB_KEY) || '').trim(); } catch (e) {}\n  if (!email) { showUpgrade(); return; }\n\n  fetch(WORKER + '\/check-subscription?email=' + encodeURIComponent(email))\n    .then(function(r) { return r.ok ? r.json() : null; })\n    .then(function(d) {\n      var tools = (d \u0026\u0026 Array.isArray(d.tools)) ? d.tools : [];\n      var entitled = (d \u0026\u0026 d.tier === 'full') || GRANTS.every(function(t) { return tools.indexOf(t) !== -1; });\n      if (entitled \u0026\u0026 nudge) {\n        var s = document.getElementById('ptNudgeSearch');\n        var v = document.getElementById('ptNudgeVis');\n        \/\/ The two tools read different params. Search reads member, the visualizer\n        \/\/ reads member_email. Verified against both apps. Not a typo, not a bug.\n        if (s) s.href = SEARCH_URL + '?member=' + encodeURIComponent(email);\n        if (v) v.href = VIS_URL + '?member_email=' + encodeURIComponent(email);\n        nudge.classList.add('active');\n      } else {\n        showUpgrade();\n      }\n    })\n    .catch(showUpgrade);\n})();\n\u003c\/script\u003e","brand":"PROJECT THEO","offers":[{"title":"Default Title","offer_id":43794095538235,"sku":null,"price":15.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0657\/5102\/3675\/files\/rn-image_picker_lib_temp_4ffdde96-5641-42c6-9af3-14d55a4324f6.png?v=1784221324","url":"https:\/\/project-theo.com\/products\/search-visualizer-bundle","provider":"PROJECT THEO","version":"1.0","type":"link"}