{"id":9075,"date":"2025-12-02T15:32:52","date_gmt":"2025-12-02T06:32:52","guid":{"rendered":"https:\/\/rakkokeyword.com\/techo\/?p=9075"},"modified":"2026-01-30T10:45:14","modified_gmt":"2026-01-30T01:45:14","slug":"tool-stp-analysis-maker","status":"publish","type":"post","link":"https:\/\/rakkokeyword.com\/techo\/tool-stp-analysis-maker\/","title":{"rendered":"STP\u5206\u6790\u56f3\u8868\u4f5c\u6210\u30c4\u30fc\u30eb"},"content":{"rendered":"\n<div id=\"stp-tool-wrapper\" class=\"stp-tool-wrapper\">\n    <style>\n        \/* --- CSS Reset & Base --- *\/\n        #stp-tool-wrapper {\n            width: 100%;\n            max-width: 100%;\n            box-sizing: border-box;\n            font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n            color: #333;\n            line-height: 1.6;\n            background-color: #fff;\n        }\n        #stp-tool-wrapper * { box-sizing: border-box; }\n        \n        \/* WordPress\u306e\u30ea\u30b9\u30c8\u30b9\u30bf\u30a4\u30eb\u3092\u30ea\u30bb\u30c3\u30c8 *\/\n        #stp-tool-wrapper ul,\n        #stp-tool-wrapper li {\n            list-style: none !important;\n            list-style-type: none !important;\n            margin: 0 !important;\n            padding: 0 !important;\n        }\n        #stp-tool-wrapper ul::before,\n        #stp-tool-wrapper li::marker {\n            display: none !important;\n            content: none !important;\n        }\n\n        \/* --- Layout --- *\/\n        .stp-container {\n            max-width: 1200px;\n            margin: 0 auto;\n        }\n\n        \/* --- Top Controls --- *\/\n        .stp-top-controls {\n            display: flex;\n            gap: 15px;\n            margin-bottom: 20px;\n            flex-wrap: wrap;\n            align-items: center;\n            background: #f8f9fa;\n            padding: 15px;\n            border-radius: 8px;\n        }\n        .stp-control-group {\n            display: flex;\n            align-items: center;\n            gap: 10px;\n        }\n        .stp-control-label {\n            font-weight: bold;\n            font-size: 14px;\n            color: #13284B;\n            white-space: nowrap;\n        }\n        .stp-title-input {\n            padding: 8px 12px;\n            border: 1px solid #ddd;\n            border-radius: 4px;\n            font-size: 16px;\n            font-weight: bold;\n            min-width: 200px;\n        }\n        .stp-preset-select {\n            padding: 8px 12px;\n            border: 1px solid #ddd;\n            border-radius: 4px;\n            font-size: 14px;\n            min-width: 200px;\n            background: #fff;\n        }\n\n        \/* --- Preview Container --- *\/\n        .stp-preview-container {\n            background: #fff;\n            padding: 20px;\n            border-radius: 8px;\n        }\n\n        .stp-chart-title {\n            text-align: center;\n            font-size: 24px;\n            font-weight: bold;\n            margin: 0 0 30px 0;\n            color: #333;\n        }\n\n        \/* --- Section Titles --- *\/\n        .stp-section {\n            margin-bottom: 40px;\n        }\n        .stp-section-header {\n            display: flex;\n            align-items: center;\n            gap: 10px;\n            margin-bottom: 20px;\n            padding-bottom: 10px;\n            border-bottom: 3px solid #007cba;\n        }\n        .stp-section-number {\n            width: 36px;\n            height: 36px;\n            background: #007cba;\n            color: white;\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-weight: bold;\n            font-size: 18px;\n            flex-shrink: 0;\n        }\n        .stp-section-title {\n            font-size: 20px;\n            font-weight: bold;\n            color: #13284B;\n        }\n        .stp-section-subtitle {\n            font-size: 13px;\n            color: #666;\n            margin-left: auto;\n        }\n\n        \/* --- Field Editor --- *\/\n        .stp-field-editor {\n            background: #f8f9fa;\n            padding: 12px;\n            border-radius: 6px;\n            margin-bottom: 15px;\n        }\n        .stp-field-editor-label {\n            font-weight: 600;\n            font-size: 13px;\n            color: #13284B;\n            margin-bottom: 8px;\n        }\n        .stp-field-list {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 8px;\n        }\n        .stp-field-item {\n            display: inline-flex;\n            align-items: center;\n            background: white;\n            padding: 6px 10px;\n            border-radius: 4px;\n            border: 1px solid #ddd;\n            font-size: 13px;\n            gap: 6px;\n            cursor: pointer;\n            transition: all 0.2s;\n        }\n        .stp-field-item:hover {\n            border-color: #007cba;\n            box-shadow: 0 2px 6px rgba(0, 124, 186, 0.15);\n        }\n        .stp-field-item-label {\n            font-weight: 500;\n            cursor: text;\n        }\n        .stp-field-item-label[contenteditable=\"true\"] {\n            background: #fffbea;\n            outline: 2px solid #007cba;\n            padding: 2px 4px;\n            border-radius: 2px;\n        }\n        .stp-field-item-delete {\n            color: #999;\n            cursor: pointer;\n            font-size: 16px;\n            line-height: 1;\n            margin-left: 4px;\n            opacity: 0;\n            transition: opacity 0.2s;\n        }\n        .stp-field-item:hover .stp-field-item-delete {\n            opacity: 1;\n        }\n        .stp-field-item-delete:hover {\n            color: #d93025;\n        }\n        .stp-field-add {\n            display: inline-flex;\n            align-items: center;\n            background: #007cba;\n            color: white;\n            padding: 6px 12px;\n            border-radius: 4px;\n            font-size: 13px;\n            font-weight: 500;\n            cursor: pointer;\n            transition: all 0.2s;\n            user-select: none;\n        }\n        .stp-field-add:hover {\n            background: #005a8e;\n        }\n        .stp-field-add::before {\n            content: \"\u2795 \";\n            margin-right: 4px;\n        }\n\n        \/* Hide field editor when capturing *\/\n        .stp-capturing .stp-field-editor {\n            display: none !important;\n        }\n\n        \/* --- Segmentation Cards --- *\/\n        .stp-segments-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n            gap: 15px;\n            margin-bottom: 15px;\n        }\n        \n        .stp-segment-card {\n            border: 2px solid #ddd;\n            border-radius: 8px;\n            padding: 15px;\n            background: #fff;\n            transition: all 0.2s;\n            position: relative;\n        }\n        .stp-segment-card:hover {\n            border-color: #007cba;\n            box-shadow: 0 4px 12px rgba(0, 124, 186, 0.15);\n        }\n        \n        \/* Targeting card styles *\/\n        .stp-targeting-card {\n            border: 2px solid #ddd;\n            border-radius: 8px;\n            padding: 15px;\n            background: #fff;\n            transition: all 0.2s;\n            cursor: pointer;\n            position: relative;\n        }\n        .stp-targeting-card:hover {\n            border-color: #007cba;\n            box-shadow: 0 4px 12px rgba(0, 124, 186, 0.15);\n        }\n        .stp-targeting-card.selected {\n            border-color: #007cba;\n            background: #f0f7fb;\n            box-shadow: 0 4px 12px rgba(0, 124, 186, 0.2);\n        }\n        .theme-standard .stp-targeting-card.selected {\n            border-color: #007cba;\n            background: #f0f7fb;\n        }\n        \n        .stp-segment-header {\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            margin-bottom: 12px;\n        }\n        .stp-segment-name {\n            font-weight: bold;\n            font-size: 16px;\n            color: #13284B;\n            flex: 1;\n            cursor: text;\n            padding: 4px 8px;\n            border-radius: 4px;\n            transition: background 0.2s;\n        }\n        .stp-segment-name:hover {\n            background: rgba(0, 124, 186, 0.05);\n        }\n        .stp-targeting-card .stp-segment-name {\n            cursor: default;\n        }\n        .stp-targeting-card .stp-segment-name:hover {\n            background: transparent;\n        }\n        .stp-segment-name[contenteditable=\"true\"] {\n            background: #fffbea;\n            outline: 2px solid #007cba;\n        }\n        \n        .stp-segment-actions {\n            display: flex;\n            gap: 5px;\n        }\n        .stp-segment-checkbox {\n            width: 20px;\n            height: 20px;\n            cursor: pointer;\n        }\n        .stp-segment-delete {\n            color: #999;\n            cursor: pointer;\n            font-size: 20px;\n            line-height: 1;\n            padding: 0 5px;\n            opacity: 0;\n            transition: opacity 0.2s;\n        }\n        .stp-segment-card:hover .stp-segment-delete {\n            opacity: 1;\n        }\n        .stp-segment-delete:hover {\n            color: #d93025;\n        }\n        \n        .stp-segment-details {\n            font-size: 13px;\n            line-height: 1.6;\n            color: #555;\n        }\n        .stp-segment-detail-row {\n            display: flex;\n            margin-bottom: 6px;\n            align-items: flex-start;\n        }\n        .stp-segment-label {\n            font-weight: 600;\n            color: #666;\n            min-width: 60px;\n            flex-shrink: 0;\n        }\n        .stp-segment-value {\n            flex: 1;\n            cursor: text;\n            padding: 2px 4px;\n            border-radius: 2px;\n            transition: background 0.2s;\n        }\n        .stp-segment-value:hover {\n            background: rgba(0, 124, 186, 0.05);\n        }\n        .stp-targeting-card .stp-segment-value {\n            cursor: default;\n        }\n        .stp-targeting-card .stp-segment-value:hover {\n            background: transparent;\n        }\n        .stp-segment-value[contenteditable=\"true\"] {\n            background: #fffbea;\n            outline: 2px solid #007cba;\n        }\n        \n        .stp-add-segment {\n            padding: 20px;\n            background: #f0f7fb;\n            border: 2px dashed #007cba;\n            border-radius: 8px;\n            text-align: center;\n            color: #007cba;\n            cursor: pointer;\n            font-size: 14px;\n            font-weight: 600;\n            transition: all 0.2s;\n        }\n        .stp-add-segment:hover {\n            background: #007cba;\n            color: white;\n            border-style: solid;\n        }\n\n        \/* --- Targeting Summary --- *\/\n        .stp-targeting-summary {\n            background: linear-gradient(135deg, #f0f7fb 0%, #e8f4f8 100%);\n            border: 2px solid #007cba;\n            border-radius: 8px;\n            padding: 20px;\n            margin-bottom: 20px;\n        }\n        .stp-targeting-title {\n            font-weight: bold;\n            font-size: 16px;\n            color: #13284B;\n            margin-bottom: 15px;\n            display: flex;\n            align-items: center;\n            gap: 8px;\n        }\n        .stp-targeting-title::before {\n            content: \"\ud83c\udfaf\";\n            font-size: 20px;\n        }\n        .stp-targeting-list {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 10px;\n        }\n        .stp-targeting-item {\n            background: white;\n            padding: 8px 16px;\n            border-radius: 20px;\n            font-size: 14px;\n            font-weight: 600;\n            color: #007cba;\n            border: 2px solid #007cba;\n            display: flex;\n            align-items: center;\n            gap: 8px;\n        }\n        .stp-targeting-item::before {\n            content: \"\u2713\";\n            font-weight: bold;\n        }\n        .stp-targeting-empty {\n            color: #999;\n            font-style: italic;\n            font-size: 14px;\n        }\n\n        \/* --- Positioning Map --- *\/\n        .stp-positioning-map {\n            position: relative;\n            width: 100%;\n            max-width: 700px;\n            margin: 0 auto;\n            aspect-ratio: 1;\n            background: #fff;\n            border: 2px solid #333;\n        }\n        \n        .stp-positioning-axis-x,\n        .stp-positioning-axis-y {\n            position: absolute;\n            background: #333;\n        }\n        .stp-positioning-axis-x {\n            left: 0;\n            right: 0;\n            top: 50%;\n            height: 2px;\n            transform: translateY(-1px);\n        }\n        .stp-positioning-axis-y {\n            top: 0;\n            bottom: 0;\n            left: 50%;\n            width: 2px;\n            transform: translateX(-1px);\n        }\n        \n        .stp-positioning-label {\n            position: absolute;\n            font-size: 13px;\n            font-weight: 600;\n            color: #333;\n            white-space: nowrap;\n            background: white;\n            padding: 4px 8px;\n            border-radius: 4px;\n            cursor: text;\n            transition: background 0.2s;\n        }\n        .stp-positioning-label:hover {\n            background: #fffbea;\n        }\n        .stp-positioning-label[contenteditable=\"true\"] {\n            background: #fffbea;\n            outline: 2px solid #007cba;\n        }\n        .stp-positioning-label.top {\n            top: 10px;\n            left: 50%;\n            transform: translateX(-50%);\n        }\n        .stp-positioning-label.bottom {\n            bottom: 10px;\n            left: 50%;\n            transform: translateX(-50%);\n        }\n        .stp-positioning-label.left {\n            left: 10px;\n            top: 50%;\n            transform: translateY(-50%);\n        }\n        .stp-positioning-label.right {\n            right: 10px;\n            top: 50%;\n            transform: translateY(-50%);\n        }\n        \n        .stp-positioning-point {\n            position: absolute;\n            transform: translate(-50%, -50%);\n            cursor: move;\n            user-select: none;\n        }\n        .stp-positioning-point-inner {\n            width: 80px;\n            padding: 8px 12px;\n            background: #007cba;\n            color: white;\n            border-radius: 20px;\n            text-align: center;\n            font-size: 12px;\n            font-weight: 600;\n            box-shadow: 0 2px 8px rgba(0, 124, 186, 0.4);\n            transition: all 0.2s;\n            position: relative;\n        }\n        .stp-positioning-point:hover .stp-positioning-point-inner {\n            transform: scale(1.1);\n            box-shadow: 0 4px 12px rgba(0, 124, 186, 0.6);\n        }\n        .stp-positioning-point.is-self .stp-positioning-point-inner {\n            background: #13284B;\n            width: 100px;\n            font-size: 13px;\n            font-weight: bold;\n            box-shadow: 0 3px 10px rgba(19, 40, 75, 0.5);\n        }\n        \n        \/* Theme colors for positioning *\/\n        .theme-pop .stp-positioning-point-inner {\n            background: #ff9900;\n            box-shadow: 0 2px 8px rgba(255, 153, 0, 0.4);\n        }\n        .theme-pop .stp-positioning-point:hover .stp-positioning-point-inner {\n            box-shadow: 0 4px 12px rgba(255, 153, 0, 0.6);\n        }\n        .theme-pop .stp-positioning-point.is-self .stp-positioning-point-inner {\n            background: #e67e00;\n            box-shadow: 0 3px 10px rgba(230, 126, 0, 0.5);\n        }\n        \n        .theme-mono .stp-positioning-point-inner {\n            background: #666;\n            box-shadow: 0 2px 8px rgba(102, 102, 102, 0.4);\n        }\n        .theme-mono .stp-positioning-point:hover .stp-positioning-point-inner {\n            box-shadow: 0 4px 12px rgba(102, 102, 102, 0.6);\n        }\n        .theme-mono .stp-positioning-point.is-self .stp-positioning-point-inner {\n            background: #000;\n            box-shadow: 0 3px 10px rgba(0, 0, 0, 0.5);\n        }\n        .stp-positioning-point-name {\n            cursor: text;\n        }\n        .stp-positioning-point-delete {\n            position: absolute;\n            top: -8px;\n            right: -8px;\n            width: 20px;\n            height: 20px;\n            background: #d93025;\n            color: white;\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 14px;\n            cursor: pointer;\n            opacity: 0;\n            transition: opacity 0.2s;\n        }\n        .stp-positioning-point:hover .stp-positioning-point-delete {\n            opacity: 1;\n        }\n        \n        .stp-add-competitor {\n            margin-top: 20px;\n            padding: 12px;\n            background: #f0f7fb;\n            border: 2px dashed #007cba;\n            border-radius: 8px;\n            text-align: center;\n            color: #007cba;\n            cursor: pointer;\n            font-size: 14px;\n            font-weight: 600;\n            transition: all 0.2s;\n        }\n        .stp-add-competitor:hover {\n            background: #007cba;\n            color: white;\n            border-style: solid;\n        }\n\n        \/* Capturing state *\/\n        .stp-capturing .stp-add-segment,\n        .stp-capturing .stp-add-competitor {\n            display: none !important;\n        }\n        .stp-capturing .stp-segment-delete,\n        .stp-capturing .stp-segment-checkbox,\n        .stp-capturing .stp-targeting-checkbox,\n        .stp-capturing .stp-positioning-point-delete {\n            display: none !important;\n        }\n\n        \/* Landscape layout for output *\/\n        .stp-landscape-layout {\n            display: flex !important;\n            gap: 12px !important;\n            align-items: flex-start !important;\n        }\n        .stp-capturing .stp-chart-title {\n            font-size: 18px !important;\n            margin-bottom: 15px !important;\n        }\n        .stp-landscape-layout .stp-left-column {\n            display: flex !important;\n            gap: 12px !important;\n            flex: 0 0 48% !important;\n            max-width: 48% !important;\n        }\n        .stp-landscape-layout .stp-segmentation-section {\n            flex: 1 !important;\n            min-width: 0 !important;\n        }\n        .stp-landscape-layout .stp-targeting-section {\n            flex: 1 !important;\n            min-width: 0 !important;\n        }\n        .stp-landscape-layout .stp-right-column {\n            flex: 0 0 50% !important;\n            max-width: 50% !important;\n            display: flex !important;\n            align-items: flex-start !important;\n            justify-content: center !important;\n        }\n        .stp-landscape-layout .stp-positioning-section {\n            width: 100% !important;\n        }\n        .stp-landscape-layout .stp-section {\n            margin-bottom: 0 !important;\n        }\n        .stp-landscape-layout .stp-section-header {\n            margin-bottom: 12px !important;\n            padding-bottom: 8px !important;\n        }\n        .stp-landscape-layout .stp-section-number {\n            width: 28px !important;\n            height: 28px !important;\n            font-size: 14px !important;\n        }\n        .stp-landscape-layout .stp-section-title {\n            font-size: 13px !important;\n        }\n        .stp-landscape-layout .stp-section-subtitle {\n            font-size: 10px !important;\n            display: none !important;\n        }\n        .stp-landscape-layout .stp-segments-grid {\n            grid-template-columns: 1fr !important;\n            gap: 6px !important;\n            margin-bottom: 0 !important;\n        }\n        .stp-landscape-layout .stp-segment-card,\n        .stp-landscape-layout .stp-targeting-card {\n            padding: 8px !important;\n            border-width: 1px !important;\n        }\n        .stp-landscape-layout .stp-segment-header {\n            margin-bottom: 6px !important;\n        }\n        .stp-landscape-layout .stp-segment-name {\n            font-size: 12px !important;\n            font-weight: 600 !important;\n        }\n        .stp-landscape-layout .stp-segment-details {\n            font-size: 10px !important;\n            line-height: 1.4 !important;\n        }\n        .stp-landscape-layout .stp-segment-detail-row {\n            margin-bottom: 3px !important;\n        }\n        .stp-landscape-layout .stp-segment-label {\n            min-width: 45px !important;\n            font-size: 10px !important;\n        }\n        .stp-landscape-layout .stp-segment-checkbox,\n        .stp-landscape-layout .stp-targeting-checkbox {\n            width: 16px !important;\n            height: 16px !important;\n        }\n        .stp-landscape-layout .stp-positioning-map {\n            max-width: 100% !important;\n            width: 100% !important;\n            margin: 0 !important;\n        }\n        .stp-landscape-layout .stp-positioning-section {\n            width: 100%;\n        }\n        .stp-landscape-layout .stp-positioning-label {\n            font-size: 11px !important;\n            padding: 3px 6px !important;\n        }\n        .stp-landscape-layout .stp-positioning-point-inner {\n            padding: 6px 10px !important;\n            font-size: 11px !important;\n        }\n        .stp-landscape-layout .stp-positioning-point.is-self .stp-positioning-point-inner {\n            padding: 7px 12px !important;\n            font-size: 12px !important;\n        }\n\n        \/* --- Actions --- *\/\n        .stp-actions {\n            display: flex;\n            gap: 15px;\n            flex-wrap: wrap;\n            justify-content: center;\n            margin-top: 30px;\n        }\n        .stp-btn {\n            display: inline-flex;\n            align-items: center;\n            justify-content: center;\n            height: 48px;\n            padding: 0 30px;\n            font-size: 15px;\n            font-weight: bold;\n            border-radius: 4px;\n            cursor: pointer;\n            border: none;\n            transition: all 0.2s;\n        }\n        .stp-btn-primary {\n            background-color: #13284B;\n            color: #fff;\n        }\n        .stp-btn-primary:hover {\n            background-color: #1f3a66;\n        }\n\n        \/* --- Theme Selection --- *\/\n        .stp-theme-selection {\n            margin-top: 20px;\n            padding: 20px;\n            background: #f8f9fa;\n            border-radius: 6px;\n            border: 1px solid #eee;\n        }\n        .stp-design-title {\n            font-weight: bold;\n            font-size: 16px;\n            color: #13284B;\n            margin-bottom: 15px;\n            padding-bottom: 10px;\n            border-bottom: 2px solid #ddd;\n        }\n        .stp-design-row {\n            display: flex;\n            align-items: center;\n            margin-bottom: 12px;\n            flex-wrap: wrap;\n            gap: 10px;\n        }\n        .stp-design-label {\n            font-weight: bold;\n            font-size: 14px;\n            color: #13284B;\n            min-width: 120px;\n        }\n        .stp-design-options {\n            display: flex;\n            gap: 15px;\n            flex-wrap: wrap;\n            flex: 1;\n        }\n        .stp-theme-selection label {\n            cursor: pointer;\n            font-size: 14px;\n            display: flex;\n            align-items: center;\n            gap: 5px;\n        }\n        .stp-theme-selection label input {\n            margin: 0;\n        }\n        \n        \/* Font Size Slider *\/\n        .stp-slider-container {\n            display: flex;\n            align-items: center;\n            gap: 10px;\n            flex: 1;\n            min-width: 200px;\n        }\n        .stp-font-slider {\n            flex: 1;\n            max-width: 200px;\n            height: 6px;\n            -webkit-appearance: none;\n            appearance: none;\n            background: #ddd;\n            border-radius: 3px;\n            outline: none;\n        }\n        .stp-font-slider::-webkit-slider-thumb {\n            -webkit-appearance: none;\n            appearance: none;\n            width: 18px;\n            height: 18px;\n            background: #007cba;\n            border-radius: 50%;\n            cursor: pointer;\n        }\n        .stp-font-slider::-moz-range-thumb {\n            width: 18px;\n            height: 18px;\n            background: #007cba;\n            border-radius: 50%;\n            cursor: pointer;\n            border: none;\n        }\n        .stp-font-size-value {\n            font-size: 13px;\n            color: #666;\n            min-width: 40px;\n            text-align: right;\n        }\n\n        \/* Themes *\/\n        .theme-standard .stp-section-header {\n            border-bottom-color: #007cba;\n        }\n        .theme-standard .stp-section-number {\n            background: #007cba;\n        }\n        .theme-pop .stp-section-header {\n            border-bottom-color: #ff9900;\n        }\n        .theme-pop .stp-section-number {\n            background: #ff9900;\n        }\n        .theme-pop .stp-targeting-card.selected {\n            border-color: #ff9900;\n            background: #fff8e1;\n        }\n        .theme-pop .stp-segment-card.selected {\n            border-color: #ff9900;\n            background: #fff8e1;\n        }\n        .theme-pop .stp-targeting-summary {\n            background: linear-gradient(135deg, #fff8e1 0%, #ffe0b2 100%);\n            border-color: #ff9900;\n        }\n        .theme-pop .stp-targeting-item {\n            color: #d68100;\n            border-color: #d68100;\n        }\n        .theme-mono .stp-section-header {\n            border-bottom-color: #333;\n        }\n        .theme-mono .stp-section-number {\n            background: #333;\n        }\n        .theme-mono .stp-targeting-card.selected {\n            border-color: #333;\n            background: #f5f5f5;\n        }\n        .theme-mono .stp-segment-card.selected {\n            border-color: #333;\n            background: #f5f5f5;\n        }\n        .theme-mono .stp-targeting-summary {\n            background: #f5f5f5;\n            border-color: #333;\n        }\n        .theme-mono .stp-targeting-item {\n            color: #333;\n            border-color: #333;\n        }\n\n        \/* --- Loading --- *\/\n        .stp-loading {\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(255, 255, 255, 0.9);\n            z-index: 9999;\n            display: none;\n            align-items: center;\n            justify-content: center;\n        }\n        .stp-loading.active {\n            display: flex;\n        }\n        .stp-spinner {\n            width: 40px;\n            height: 40px;\n            border: 4px solid #f3f3f3;\n            border-top: 4px solid #13284B;\n            border-radius: 50%;\n            animation: stp-spin 1s linear infinite;\n        }\n        @keyframes stp-spin {\n            0% { transform: rotate(0deg); }\n            100% { transform: rotate(360deg); }\n        }\n\n        \/* --- Guide Popup --- *\/\n        .stp-guide-overlay {\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 0, 0, 0.6);\n            z-index: 10000;\n            display: none;\n            align-items: center;\n            justify-content: center;\n            animation: fadeIn 0.3s;\n        }\n        .stp-guide-overlay.active {\n            display: flex;\n        }\n        .stp-guide-popup {\n            background: white;\n            padding: 30px;\n            border-radius: 12px;\n            max-width: 550px;\n            width: 90%;\n            box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);\n            animation: slideUp 0.3s;\n        }\n        .stp-guide-title {\n            font-size: 20px;\n            font-weight: bold;\n            margin-bottom: 20px;\n            color: #13284B;\n            text-align: center;\n        }\n        .stp-guide-content {\n            font-size: 14px;\n            line-height: 1.8;\n            margin-bottom: 20px;\n            color: #333;\n        }\n        .stp-guide-item {\n            display: flex;\n            align-items: flex-start;\n            margin-bottom: 15px;\n            padding: 10px;\n            background: #f8f9fa;\n            border-radius: 6px;\n        }\n        .stp-guide-icon {\n            flex-shrink: 0;\n            width: 30px;\n            font-size: 18px;\n            margin-right: 12px;\n        }\n        .stp-guide-text {\n            flex: 1;\n        }\n        .stp-guide-button {\n            width: 100%;\n            padding: 12px;\n            background: #13284B;\n            color: white;\n            border: none;\n            border-radius: 6px;\n            font-size: 15px;\n            font-weight: bold;\n            cursor: pointer;\n            transition: background 0.2s;\n        }\n        .stp-guide-button:hover {\n            background: #1f3a66;\n        }\n\n        @keyframes fadeIn {\n            from { opacity: 0; }\n            to { opacity: 1; }\n        }\n        @keyframes slideUp {\n            from { transform: translateY(20px); opacity: 0; }\n            to { transform: translateY(0); opacity: 1; }\n        }\n\n        \/* Hint *\/\n        .stp-hint {\n            text-align: center;\n            font-size: 11px;\n            color: #999;\n            margin-top: 15px;\n            background: #f9f9f9;\n            padding: 8px;\n            border-radius: 20px;\n            cursor: pointer;\n            transition: all 0.2s;\n        }\n        .stp-hint:hover {\n            background: #007cba;\n            color: white;\n        }\n\n        \/* Responsive *\/\n        @media (max-width: 768px) {\n            .stp-segments-grid {\n                grid-template-columns: 1fr;\n            }\n            .stp-positioning-map {\n                aspect-ratio: 0.8;\n            }\n        }\n    <\/style>\n\n    <!-- Guide Popup -->\n    <div id=\"stp_guide_overlay\" class=\"stp-guide-overlay\">\n        <div class=\"stp-guide-popup\">\n            <div class=\"stp-guide-title\">\ud83d\udcca STP\u5206\u6790\u30c4\u30fc\u30eb\u306e\u4f7f\u3044\u65b9<\/div>\n            <div class=\"stp-guide-content\">\n                <div class=\"stp-guide-item\">\n                    <div class=\"stp-guide-icon\">1\ufe0f\u20e3<\/div>\n                    <div class=\"stp-guide-text\">\n                        <strong>Segmentation\uff08\u5e02\u5834\u7d30\u5206\u5316\uff09<\/strong><br>\n                        \u5e02\u5834\u3092\u30bb\u30b0\u30e1\u30f3\u30c8\u306b\u5206\u5272\u3057\u3066\u5b9a\u7fa9\n                    <\/div>\n                <\/div>\n                <div class=\"stp-guide-item\">\n                    <div class=\"stp-guide-icon\">2\ufe0f\u20e3<\/div>\n                    <div class=\"stp-guide-text\">\n                        <strong>Targeting\uff08\u30bf\u30fc\u30b2\u30c3\u30c8\u9078\u5b9a\uff09<\/strong><br>\n                        \u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3067\u72d9\u3046\u3079\u304d\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u9078\u629e\n                    <\/div>\n                <\/div>\n                <div class=\"stp-guide-item\">\n                    <div class=\"stp-guide-icon\">3\ufe0f\u20e3<\/div>\n                    <div class=\"stp-guide-text\">\n                        <strong>Positioning\uff08\u30dd\u30b8\u30b7\u30e7\u30cb\u30f3\u30b0\uff09<\/strong><br>\n                        \u81ea\u793e\u3068\u7af6\u5408\u3092\u30de\u30c3\u30d7\u4e0a\u306b\u30c9\u30e9\u30c3\u30b0\u3067\u914d\u7f6e\n                    <\/div>\n                <\/div>\n                <div class=\"stp-guide-item\">\n                    <div class=\"stp-guide-icon\">\u270f\ufe0f<\/div>\n                    <div class=\"stp-guide-text\">\n                        <strong>\u30c6\u30ad\u30b9\u30c8\u7de8\u96c6<\/strong><br>\n                        \u3059\u3079\u3066\u306e\u30c6\u30ad\u30b9\u30c8\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u7de8\u96c6\u53ef\u80fd\n                    <\/div>\n                <\/div>\n            <\/div>\n            <button class=\"stp-guide-button\" onclick=\"document.getElementById('stp_guide_overlay').classList.remove('active'); localStorage.setItem('stp_guide_shown', 'true');\">\n                \u308f\u304b\u308a\u307e\u3057\u305f\n            <\/button>\n        <\/div>\n    <\/div>\n\n    <div id=\"stp_loading\" class=\"stp-loading\">\n        <div class=\"stp-spinner\"><\/div>\n    <\/div>\n\n    <div class=\"stp-container\">\n        <!-- Top Controls -->\n        <div class=\"stp-top-controls\">\n            <div class=\"stp-control-group\">\n                <label class=\"stp-control-label\">\u30bf\u30a4\u30c8\u30eb:<\/label>\n                <input type=\"text\" id=\"stp_title\" class=\"stp-title-input\" value=\"STP\u5206\u6790\" placeholder=\"\u5206\u6790\u30bf\u30a4\u30c8\u30eb\u3092\u5165\u529b\">\n            <\/div>\n            <div class=\"stp-control-group\">\n                <label class=\"stp-control-label\">\u696d\u754c\u30d7\u30ea\u30bb\u30c3\u30c8:<\/label>\n                <select id=\"stp_preset_select\" class=\"stp-preset-select\">\n                    <option value=\"\">\u8a18\u5165\u4f8b\u3092\u8aad\u307f\u8fbc\u3080<\/option>\n                    <option value=\"cafe_chain\">\u30ab\u30d5\u30a7\u30c1\u30a7\u30fc\u30f3<\/option>\n                    <option value=\"fitness_gym\">\u30d5\u30a3\u30c3\u30c8\u30cd\u30b9\u30b8\u30e0<\/option>\n                    <option value=\"b2b_saas\">BtoB SaaS<\/option>\n                    <option value=\"apparel_brand\">\u30a2\u30d1\u30ec\u30eb\u30d6\u30e9\u30f3\u30c9<\/option>\n                <\/select>\n            <\/div>\n        <\/div>\n\n        <!-- Preview Container -->\n        <div class=\"stp-preview-area\">\n            <div id=\"stp_capture_target\" class=\"stp-preview-container theme-standard\">\n                <div id=\"stp_preview_title\" class=\"stp-chart-title\">STP\u5206\u6790<\/div>\n\n                <div class=\"stp-content-wrapper\">\n                    <div class=\"stp-left-column\">\n                        <!-- Segmentation Section -->\n                        <div class=\"stp-section stp-segmentation-section\">\n                            <div class=\"stp-section-header\">\n                                <div class=\"stp-section-number\">S<\/div>\n                                <div class=\"stp-section-title\">Segmentation\uff08\u5e02\u5834\u7d30\u5206\u5316\uff09<\/div>\n                                <div class=\"stp-section-subtitle\">\u5e02\u5834\u3092\u5206\u5272\u3057\u3001\u30bb\u30b0\u30e1\u30f3\u30c8\u3092\u5b9a\u7fa9<\/div>\n                            <\/div>\n                            <div class=\"stp-field-editor\" id=\"stp_field_editor\">\n                                <div class=\"stp-field-editor-label\">\u5206\u6790\u9805\u76ee\uff1a<\/div>\n                                <div id=\"stp_field_list\" class=\"stp-field-list\"><\/div>\n                            <\/div>\n                            <div id=\"stp_segments_grid\" class=\"stp-segments-grid\"><\/div>\n                            <div class=\"stp-add-segment\" id=\"stp_add_segment\">\u2795 \u30bb\u30b0\u30e1\u30f3\u30c8\u3092\u8ffd\u52a0<\/div>\n                        <\/div>\n\n                        <!-- Targeting Section -->\n                        <div class=\"stp-section stp-targeting-section\">\n                            <div class=\"stp-section-header\">\n                                <div class=\"stp-section-number\">T<\/div>\n                                <div class=\"stp-section-title\">Targeting\uff08\u30bf\u30fc\u30b2\u30c3\u30c8\u9078\u5b9a\uff09<\/div>\n                                <div class=\"stp-section-subtitle\">\u72d9\u3046\u3079\u304d\u30bb\u30b0\u30e1\u30f3\u30c8\u3092\u9078\u629e<\/div>\n                            <\/div>\n                            <div id=\"stp_targeting_grid\" class=\"stp-segments-grid\"><\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"stp-right-column\">\n                        <!-- Positioning Section -->\n                        <div class=\"stp-section stp-positioning-section\">\n                            <div class=\"stp-section-header\">\n                                <div class=\"stp-section-number\">P<\/div>\n                                <div class=\"stp-section-title\">Positioning\uff08\u30dd\u30b8\u30b7\u30e7\u30cb\u30f3\u30b0\uff09<\/div>\n                                <div class=\"stp-section-subtitle\">\u7af6\u5408\u3068\u306e\u7acb\u3061\u4f4d\u7f6e\u3092\u660e\u78ba\u5316<\/div>\n                            <\/div>\n                            <div id=\"stp_positioning_map\" class=\"stp-positioning-map\">\n                                <div class=\"stp-positioning-axis-x\"><\/div>\n                                <div class=\"stp-positioning-axis-y\"><\/div>\n                                <div class=\"stp-positioning-label top\" contenteditable=\"true\" id=\"stp_axis_top\">\u9ad8\u4fa1\u683c<\/div>\n                                <div class=\"stp-positioning-label bottom\" contenteditable=\"true\" id=\"stp_axis_bottom\">\u4f4e\u4fa1\u683c<\/div>\n                                <div class=\"stp-positioning-label left\" contenteditable=\"true\" id=\"stp_axis_left\">\u9ad8\u54c1\u8cea<\/div>\n                                <div class=\"stp-positioning-label right\" contenteditable=\"true\" id=\"stp_axis_right\">\u4f4e\u54c1\u8cea<\/div>\n                                <div id=\"stp_positioning_points\"><\/div>\n                            <\/div>\n                            <div class=\"stp-add-competitor\" id=\"stp_add_competitor\">\u2795 \u7af6\u5408\u3092\u8ffd\u52a0<\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"stp-hint\" id=\"stp_hint\" onclick=\"document.getElementById('stp_guide_overlay').classList.add('active');\">\n                \ud83d\udca1 \u30c6\u30ad\u30b9\u30c8\u3092\u30af\u30ea\u30c3\u30af\u3067\u7de8\u96c6 \/ \u30dd\u30a4\u30f3\u30c8\u3092\u30c9\u30e9\u30c3\u30b0\u3067\u79fb\u52d5 \/ \u4f7f\u3044\u65b9\u30ac\u30a4\u30c9\u3092\u8868\u793a\n            <\/div>\n\n            <!-- Actions -->\n            <div class=\"stp-actions\">\n                <button id=\"stp_btn_dl\" class=\"stp-btn stp-btn-primary\">\u753b\u50cf\u3068\u3057\u3066\u4fdd\u5b58 (PNG)<\/button>\n            <\/div>\n\n            <!-- Theme Selection -->\n            <div class=\"stp-theme-selection\">\n                <div class=\"stp-design-title\">\u30c7\u30b6\u30a4\u30f3<\/div>\n                <div class=\"stp-design-row\">\n                    <div class=\"stp-design-label\">\u30c6\u30fc\u30de\uff1a<\/div>\n                    <div class=\"stp-design-options\">\n                        <label><input type=\"radio\" name=\"stp_theme\" value=\"standard\" checked> \u30d6\u30eb\u30fc<\/label>\n                        <label><input type=\"radio\" name=\"stp_theme\" value=\"pop\"> \u30a4\u30a8\u30ed\u30fc<\/label>\n                        <label><input type=\"radio\" name=\"stp_theme\" value=\"mono\"> \u30e2\u30ce\u30af\u30ed<\/label>\n                    <\/div>\n                <\/div>\n                <div class=\"stp-design-row\">\n                    <div class=\"stp-design-label\">\u30dd\u30b8\u30b7\u30e7\u30f3\u6587\u5b57\u30b5\u30a4\u30ba\uff1a<\/div>\n                    <div class=\"stp-slider-container\">\n                        <input type=\"range\" id=\"stp_font_slider\" class=\"stp-font-slider\" min=\"11\" max=\"16\" value=\"12\" step=\"1\">\n                        <span id=\"stp_font_size_value\" class=\"stp-font-size-value\">12px<\/span>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n    (function() {\n        const PRESETS = {\n            cafe_chain: {\n                title: \"\u5730\u65b9\u90fd\u5e02\u30ab\u30d5\u30a7\u30c1\u30a7\u30fc\u30f3\uff085\u5e97\u8217\u5c55\u958b\uff09\",\n                segmentFields: [\n                    { key: \"size\", label: \"\u898f\u6a21\", placeholder: \"\u5e02\u5834\u306e\u3007%\" },\n                    { key: \"needs\", label: \"\u30cb\u30fc\u30ba\", placeholder: \"\u30cb\u30fc\u30ba\u3092\u8a18\u5165\" },\n                    { key: \"behavior\", label: \"\u5229\u7528\u884c\u52d5\", placeholder: \"\u884c\u52d5\u7279\u6027\u3092\u8a18\u5165\" }\n                ],\n                segments: [\n                    {\n                        name: \"\u5b66\u751f\u5c64\",\n                        fields: {\n                            size: \"\u5e02\u5834\u306e25%\",\n                            needs: \"\u4f4e\u4fa1\u683c\u30fbWi-Fi\u30fb\u52c9\u5f37\u30b9\u30da\u30fc\u30b9\",\n                            behavior: \"\u9577\u6642\u9593\u6ede\u5728\u30fbSNS\u6295\u7a3f\"\n                        },\n                        selected: true\n                    },\n                    {\n                        name: \"\u30d3\u30b8\u30cd\u30b9\u30d1\u30fc\u30bd\u30f3\",\n                        fields: {\n                            size: \"\u5e02\u5834\u306e30%\",\n                            needs: \"\u77ed\u6642\u9593\u5229\u7528\u30fb\u30c6\u30a4\u30af\u30a2\u30a6\u30c8\",\n                            behavior: \"\u671d\u30fb\u663c\u306b\u96c6\u4e2d\u30fb\u6642\u9593\u91cd\u8996\"\n                        },\n                        selected: true\n                    },\n                    {\n                        name: \"\u4e3b\u5a66\u30fb\u30b7\u30cb\u30a2\u5c64\",\n                        fields: {\n                            size: \"\u5e02\u5834\u306e20%\",\n                            needs: \"\u843d\u3061\u7740\u3044\u305f\u7a7a\u9593\u30fb\u9ad8\u54c1\u8cea\",\n                            behavior: \"\u5348\u5f8c\u5229\u7528\u30fb\u53cb\u4eba\u3068\u306e\u4f1a\u8a71\"\n                        },\n                        selected: false\n                    },\n                    {\n                        name: \"\u89b3\u5149\u5ba2\",\n                        fields: {\n                            size: \"\u5e02\u5834\u306e15%\",\n                            needs: \"\u5730\u57df\u3089\u3057\u3055\u30fb\u4f53\u9a13\u4fa1\u5024\",\n                            behavior: \"SNS\u6620\u3048\u91cd\u8996\u30fb\u304a\u571f\u7523\u8cfc\u5165\"\n                        },\n                        selected: false\n                    }\n                ],\n                positioning: {\n                    axisTop: \"\u9ad8\u4fa1\u683c\",\n                    axisBottom: \"\u4f4e\u4fa1\u683c\",\n                    axisLeft: \"\u843d\u3061\u7740\u304d\",\n                    axisRight: \"\u6d3b\u6c17\",\n                    points: [\n                        { name: \"\u81ea\u793e\", x: 40, y: 35, isSelf: true },\n                        { name: \"\u30b9\u30bf\u30d0\", x: 70, y: 25 },\n                        { name: \"\u30c9\u30c8\u30fc\u30eb\", x: 30, y: 55 },\n                        { name: \"\u500b\u4eba\u55ab\u8336\", x: 60, y: 70 }\n                    ]\n                }\n            },\n            fitness_gym: {\n                title: \"24\u6642\u9593\u30d5\u30a3\u30c3\u30c8\u30cd\u30b9\u30b8\u30e0\",\n                segmentFields: [\n                    { key: \"size\", label: \"\u898f\u6a21\", placeholder: \"\u5e02\u5834\u306e\u3007%\" },\n                    { key: \"purpose\", label: \"\u5229\u7528\u76ee\u7684\", placeholder: \"\u76ee\u7684\u3092\u8a18\u5165\" },\n                    { key: \"pattern\", label: \"\u5229\u7528\u30d1\u30bf\u30fc\u30f3\", placeholder: \"\u30d1\u30bf\u30fc\u30f3\u3092\u8a18\u5165\" }\n                ],\n                segments: [\n                    {\n                        name: \"\u82e5\u5e74\u5c64\uff0820-30\u4ee3\uff09\",\n                        fields: {\n                            size: \"\u5e02\u5834\u306e35%\",\n                            purpose: \"\u30dc\u30c7\u30a3\u30e1\u30a4\u30af\u30fbSNS\u6620\u3048\",\n                            pattern: \"\u591c\u9593\u5229\u7528\u30fb\u90312-3\u56de\"\n                        },\n                        selected: true\n                    },\n                    {\n                        name: \"\u50cd\u304f\u5973\u6027\",\n                        fields: {\n                            size: \"\u5e02\u5834\u306e25%\",\n                            purpose: \"\u5065\u5eb7\u7dad\u6301\u30fb\u30b9\u30c8\u30ec\u30b9\u89e3\u6d88\",\n                            pattern: \"\u4ed5\u4e8b\u5e30\u308a\u30fb\u90312-3\u56de\"\n                        },\n                        selected: true\n                    },\n                    {\n                        name: \"\u30b7\u30cb\u30a2\u5c64\",\n                        fields: {\n                            size: \"\u5e02\u5834\u306e20%\",\n                            purpose: \"\u5065\u5eb7\u7dad\u6301\u30fb\u533b\u5e2b\u63a8\u5968\",\n                            pattern: \"\u65e5\u4e2d\u5229\u7528\u30fb\u90314-5\u56de\"\n                        },\n                        selected: false\n                    },\n                    {\n                        name: \"\u30a2\u30b9\u30ea\u30fc\u30c8\u5fd7\u5411\",\n                        fields: {\n                            size: \"\u5e02\u5834\u306e10%\",\n                            purpose: \"\u672c\u683c\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0\",\n                            pattern: \"\u6bce\u65e5\u5229\u7528\u30fb\u9577\u6642\u9593\"\n                        },\n                        selected: false\n                    }\n                ],\n                positioning: {\n                    axisTop: \"\u9ad8\u4fa1\u683c\",\n                    axisBottom: \"\u4f4e\u4fa1\u683c\",\n                    axisLeft: \"\u30b5\u30dd\u30fc\u30c8\u5145\u5b9f\",\n                    axisRight: \"\u30bb\u30eb\u30d5\u578b\",\n                    points: [\n                        { name: \"\u81ea\u793e\", x: 35, y: 35, isSelf: true },\n                        { name: \"RIZAP\", x: 75, y: 20 },\n                        { name: \"\u516c\u5171\u30b8\u30e0\", x: 25, y: 70 },\n                        { name: \"\u30a8\u30cb\u30bf\u30a4\u30e0\", x: 35, y: 60 }\n                    ]\n                }\n            },\n            b2b_saas: {\n                title: \"\u4e2d\u5c0f\u4f01\u696d\u5411\u3051BtoB SaaS\",\n                segmentFields: [\n                    { key: \"company_size\", label: \"\u4f01\u696d\u898f\u6a21\", placeholder: \"\u898f\u6a21\u3092\u8a18\u5165\" },\n                    { key: \"needs\", label: \"\u30cb\u30fc\u30ba\", placeholder: \"\u30cb\u30fc\u30ba\u3092\u8a18\u5165\" },\n                    { key: \"decision\", label: \"\u610f\u601d\u6c7a\u5b9a\", placeholder: \"\u6c7a\u5b9a\u30d7\u30ed\u30bb\u30b9\u3092\u8a18\u5165\" }\n                ],\n                segments: [\n                    {\n                        name: \"\u6210\u9577\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\",\n                        fields: {\n                            company_size: \"\u5f93\u696d\u54e110-50\u540d\",\n                            needs: \"\u62e1\u5f35\u6027\u30fbAPI\u9023\u643a\",\n                            decision: \"\u5373\u65ad\u5373\u6c7a\u30fb\u30c8\u30e9\u30a4\u30a2\u30eb\u91cd\u8996\"\n                        },\n                        selected: true\n                    },\n                    {\n                        name: \"\u4e2d\u5c0f\u4f01\u696d\uff08IT\u5f31\uff09\",\n                        fields: {\n                            company_size: \"\u5f93\u696d\u54e150-200\u540d\",\n                            needs: \"\u7c21\u5358\u64cd\u4f5c\u30fb\u30b5\u30dd\u30fc\u30c8\u5145\u5b9f\",\n                            decision: \"\u614e\u91cd\u691c\u8a0e\u30fb\u4f4e\u4e88\u7b97\"\n                        },\n                        selected: true\n                    },\n                    {\n                        name: \"\u5927\u4f01\u696d\u90e8\u9580\",\n                        fields: {\n                            company_size: \"\u5f93\u696d\u54e1200\u540d\u4ee5\u4e0a\",\n                            needs: \"\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30fb\u5927\u898f\u6a21\u5bfe\u5fdc\",\n                            decision: \"\u9577\u671f\u691c\u8a0e\u30fb\u8907\u6570\u90e8\u9580\u627f\u8a8d\"\n                        },\n                        selected: false\n                    },\n                    {\n                        name: \"\u30d5\u30ea\u30fc\u30e9\u30f3\u30b9\",\n                        fields: {\n                            company_size: \"\u500b\u4eba\u4e8b\u696d\u4e3b\",\n                            needs: \"\u7121\u6599\u30d7\u30e9\u30f3\u30fb\u6700\u5c0f\u6a5f\u80fd\",\n                            decision: \"\u5373\u5ea7\u5c0e\u5165\u30fb\u30b3\u30b9\u30c8\u6700\u91cd\u8996\"\n                        },\n                        selected: false\n                    }\n                ],\n                positioning: {\n                    axisTop: \"\u9ad8\u6a5f\u80fd\",\n                    axisBottom: \"\u30b7\u30f3\u30d7\u30eb\",\n                    axisLeft: \"\u4f4e\u4fa1\u683c\",\n                    axisRight: \"\u9ad8\u4fa1\u683c\",\n                    points: [\n                        { name: \"\u81ea\u793e\", x: 35, y: 40, isSelf: true },\n                        { name: \"kintone\", x: 60, y: 60 },\n                        { name: \"Excel\", x: 20, y: 25 },\n                        { name: \"Salesforce\", x: 75, y: 70 }\n                    ]\n                }\n            },\n            apparel_brand: {\n                title: \"\u90fd\u5185\u30bb\u30ec\u30af\u30c8\u30b7\u30e7\u30c3\u30d7\",\n                segmentFields: [\n                    { key: \"age\", label: \"\u5e74\u9f62\u5c64\", placeholder: \"\u5e74\u9f62\u5c64\u3092\u8a18\u5165\" },\n                    { key: \"price\", label: \"\u4fa1\u683c\u5e2f\", placeholder: \"\u4fa1\u683c\u5e2f\u3092\u8a18\u5165\" },\n                    { key: \"purchase\", label: \"\u8cfc\u8cb7\u884c\u52d5\", placeholder: \"\u8cfc\u8cb7\u884c\u52d5\u3092\u8a18\u5165\" }\n                ],\n                segments: [\n                    {\n                        name: \"Z\u4e16\u4ee3\uff0818-25\u6b73\uff09\",\n                        fields: {\n                            age: \"18-25\u6b73\",\n                            price: \"5\u5343\u5186-2\u4e07\u5186\",\n                            purchase: \"SNS\u6620\u3048\u91cd\u8996\u30fb\u885d\u52d5\u8cb7\u3044\"\n                        },\n                        selected: true\n                    },\n                    {\n                        name: \"\u30df\u30ec\u30cb\u30a2\u30eb\u4e16\u4ee3\",\n                        fields: {\n                            age: \"26-40\u6b73\",\n                            price: \"1\u4e07\u5186-5\u4e07\u5186\",\n                            purchase: \"\u54c1\u8cea\u91cd\u8996\u30fb\u8a08\u753b\u7684\"\n                        },\n                        selected: true\n                    },\n                    {\n                        name: \"40\u4ee3\u4ee5\u4e0a\",\n                        fields: {\n                            age: \"40\u6b73\u4ee5\u4e0a\",\n                            price: \"3\u4e07\u5186\u4ee5\u4e0a\",\n                            purchase: \"\u30b9\u30c6\u30fc\u30bf\u30b9\u91cd\u8996\u30fb\u53b3\u9078\"\n                        },\n                        selected: false\n                    },\n                    {\n                        name: \"\u4fa1\u683c\u91cd\u8996\u5c64\",\n                        fields: {\n                            age: \"\u5168\u5e74\u9f62\",\n                            price: \"3\u5343\u5186-1\u4e07\u5186\",\n                            purchase: \"\u30bb\u30fc\u30eb\u6642\u8cfc\u5165\u30fb\u5b9f\u7528\u6027\"\n                        },\n                        selected: false\n                    }\n                ],\n                positioning: {\n                    axisTop: \"\u9ad8\u4fa1\u683c\",\n                    axisBottom: \"\u4f4e\u4fa1\u683c\",\n                    axisLeft: \"\u30d9\u30fc\u30b7\u30c3\u30af\",\n                    axisRight: \"\u30c8\u30ec\u30f3\u30c9\",\n                    points: [\n                        { name: \"\u81ea\u793e\", x: 60, y: 45, isSelf: true },\n                        { name: \"UNIQLO\", x: 30, y: 30 },\n                        { name: \"ZARA\", x: 40, y: 65 },\n                        { name: \"BEAMS\", x: 70, y: 60 }\n                    ]\n                }\n            }\n        };\n\n        const App = {\n            data: {\n                segmentFields: [\n                    { key: \"size\", label: \"\u898f\u6a21\", placeholder: \"\u5e02\u5834\u306e\u3007%\" },\n                    { key: \"needs\", label: \"\u30cb\u30fc\u30ba\", placeholder: \"\u30cb\u30fc\u30ba\u3092\u8a18\u5165\" },\n                    { key: \"behavior\", label: \"\u884c\u52d5\", placeholder: \"\u884c\u52d5\u7279\u6027\u3092\u8a18\u5165\" }\n                ],\n                segments: [],\n                positioning: {\n                    axisTop: \"\u9ad8\u4fa1\u683c\",\n                    axisBottom: \"\u4f4e\u4fa1\u683c\",\n                    axisLeft: \"\u9ad8\u54c1\u8cea\",\n                    axisRight: \"\u4f4e\u54c1\u8cea\",\n                    points: []\n                }\n            },\n\n            dragState: null,\n\n            init() {\n                this.cacheDOM();\n                this.loadDefaultData();\n                this.bindEvents();\n                this.loadExternalLib();\n                this.render();\n                this.changePositioningFontSize(12); \/\/ Apply initial font size\n                this.showGuideIfFirstTime();\n            },\n\n            cacheDOM() {\n                this.dom = {\n                    title: document.getElementById('stp_title'),\n                    preset: document.getElementById('stp_preset_select'),\n                    previewTitle: document.getElementById('stp_preview_title'),\n                    previewContainer: document.getElementById('stp_capture_target'),\n                    contentWrapper: document.querySelector('.stp-content-wrapper'),\n                    fieldList: document.getElementById('stp_field_list'),\n                    segmentsGrid: document.getElementById('stp_segments_grid'),\n                    addSegment: document.getElementById('stp_add_segment'),\n                    targetingGrid: document.getElementById('stp_targeting_grid'),\n                    positioningMap: document.getElementById('stp_positioning_map'),\n                    positioningPoints: document.getElementById('stp_positioning_points'),\n                    addCompetitor: document.getElementById('stp_add_competitor'),\n                    themes: document.getElementsByName('stp_theme'),\n                    fontSlider: document.getElementById('stp_font_slider'),\n                    fontSizeValue: document.getElementById('stp_font_size_value'),\n                    btnDl: document.getElementById('stp_btn_dl'),\n                    loading: document.getElementById('stp_loading')\n                };\n            },\n\n            loadDefaultData() {\n                const preset = PRESETS.cafe_chain;\n                this.data.segmentFields = preset.segmentFields;\n                this.data.segments = preset.segments;\n                this.data.positioning = preset.positioning;\n                this.dom.title.value = preset.title;\n                this.dom.previewTitle.textContent = preset.title;\n            },\n\n            bindEvents() {\n                \/\/ Title\n                this.dom.title.addEventListener('input', () => {\n                    this.dom.previewTitle.textContent = this.dom.title.value || 'STP\u5206\u6790';\n                });\n\n                \/\/ Preset\n                this.dom.preset.addEventListener('change', (e) => {\n                    if (e.target.value && confirm('\u5165\u529b\u5185\u5bb9\u304c\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f')) {\n                        this.loadPreset(e.target.value);\n                    }\n                    e.target.value = '';\n                });\n\n                \/\/ Themes\n                this.dom.themes.forEach(r => r.addEventListener('change', (e) => {\n                    this.dom.previewContainer.className = `stp-preview-container theme-${e.target.value}`;\n                }));\n\n                \/\/ Font Size Slider\n                this.dom.fontSlider.addEventListener('input', (e) => {\n                    this.changePositioningFontSize(e.target.value);\n                });\n\n                \/\/ Add Segment\n                this.dom.addSegment.addEventListener('click', () => this.addSegment());\n\n                \/\/ Add Competitor\n                this.dom.addCompetitor.addEventListener('click', () => this.addCompetitor());\n\n                \/\/ Download\n                this.dom.btnDl.addEventListener('click', () => this.downloadImage());\n\n                \/\/ Positioning axis labels\n                ['top', 'bottom', 'left', 'right'].forEach(pos => {\n                    const el = document.getElementById(`stp_axis_${pos}`);\n                    this.makeEditable(el, (text) => {\n                        this.data.positioning[`axis${pos.charAt(0).toUpperCase() + pos.slice(1)}`] = text;\n                    });\n                });\n            },\n\n            render() {\n                this.renderFieldEditor();\n                this.renderSegments();\n                this.renderTargeting();\n                this.renderPositioning();\n            },\n\n            renderFieldEditor() {\n                this.dom.fieldList.innerHTML = '';\n                \n                this.data.segmentFields.forEach((field, index) => {\n                    const item = document.createElement('div');\n                    item.className = 'stp-field-item';\n                    item.innerHTML = `\n                        <span class=\"stp-field-item-label\">${field.label}<\/span>\n                        <span class=\"stp-field-item-delete\">\u00d7<\/span>\n                    `;\n                    \n                    \/\/ Label edit\n                    const labelEl = item.querySelector('.stp-field-item-label');\n                    this.makeEditable(labelEl, (text) => {\n                        this.data.segmentFields[index].label = text;\n                        this.render();\n                    });\n                    \n                    \/\/ Delete\n                    const deleteBtn = item.querySelector('.stp-field-item-delete');\n                    deleteBtn.addEventListener('click', (e) => {\n                        e.stopPropagation();\n                        if (this.data.segmentFields.length <= 1) {\n                            alert('\u6700\u4f4e1\u3064\u306e\u5206\u6790\u9805\u76ee\u304c\u5fc5\u8981\u3067\u3059');\n                            return;\n                        }\n                        if (confirm('\u3053\u306e\u5206\u6790\u9805\u76ee\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f\\n\u5404\u30bb\u30b0\u30e1\u30f3\u30c8\u304b\u3089\u3082\u3053\u306e\u9805\u76ee\u304c\u524a\u9664\u3055\u308c\u307e\u3059\u3002')) {\n                            const deletedKey = this.data.segmentFields[index].key;\n                            \/\/ Remove field from segmentFields\n                            this.data.segmentFields.splice(index, 1);\n                            \/\/ Remove field data from all segments\n                            this.data.segments.forEach(seg => {\n                                delete seg.fields[deletedKey];\n                            });\n                            this.render();\n                        }\n                    });\n                    \n                    this.dom.fieldList.appendChild(item);\n                });\n                \n                \/\/ Add field button\n                const addBtn = document.createElement('div');\n                addBtn.className = 'stp-field-add';\n                addBtn.textContent = '\u9805\u76ee\u3092\u8ffd\u52a0';\n                addBtn.addEventListener('click', () => this.addField());\n                this.dom.fieldList.appendChild(addBtn);\n            },\n\n            renderSegments() {\n                this.dom.segmentsGrid.innerHTML = '';\n                \n                this.data.segments.forEach((seg, index) => {\n                    const card = document.createElement('div');\n                    card.className = 'stp-segment-card';\n                    \n                    \/\/ Build detail rows dynamically based on segmentFields\n                    const detailRows = this.data.segmentFields.map(field => `\n                        <div class=\"stp-segment-detail-row\">\n                            <span class=\"stp-segment-label\">${field.label}:<\/span>\n                            <span class=\"stp-segment-value\" data-index=\"${index}\" data-field=\"${field.key}\">${seg.fields[field.key] || ''}<\/span>\n                        <\/div>\n                    `).join('');\n                    \n                    card.innerHTML = `\n                        <div class=\"stp-segment-header\">\n                            <div class=\"stp-segment-name\" data-index=\"${index}\">${seg.name}<\/div>\n                            <div class=\"stp-segment-actions\">\n                                <span class=\"stp-segment-delete\" data-index=\"${index}\">\u00d7<\/span>\n                            <\/div>\n                        <\/div>\n                        <div class=\"stp-segment-details\">\n                            ${detailRows}\n                        <\/div>\n                    `;\n                    \n                    \/\/ Name edit\n                    const nameEl = card.querySelector('.stp-segment-name');\n                    this.makeEditable(nameEl, (text) => {\n                        this.data.segments[index].name = text;\n                        this.renderTargeting();\n                    });\n                    \n                    \/\/ Detail edits\n                    card.querySelectorAll('.stp-segment-value').forEach(el => {\n                        this.makeEditable(el, (text) => {\n                            const field = el.getAttribute('data-field');\n                            this.data.segments[index].fields[field] = text;\n                        });\n                    });\n                    \n                    \/\/ Delete\n                    const deleteBtn = card.querySelector('.stp-segment-delete');\n                    deleteBtn.addEventListener('click', () => {\n                        if (confirm('\u3053\u306e\u30bb\u30b0\u30e1\u30f3\u30c8\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f')) {\n                            this.data.segments.splice(index, 1);\n                            this.render();\n                        }\n                    });\n                    \n                    this.dom.segmentsGrid.appendChild(card);\n                });\n            },\n\n            renderTargeting() {\n                this.dom.targetingGrid.innerHTML = '';\n                \n                this.data.segments.forEach((seg, index) => {\n                    const card = document.createElement('div');\n                    card.className = `stp-targeting-card ${seg.selected ? 'selected' : ''}`;\n                    \n                    \/\/ Build detail rows dynamically based on segmentFields\n                    const detailRows = this.data.segmentFields.map(field => `\n                        <div class=\"stp-segment-detail-row\">\n                            <span class=\"stp-segment-label\">${field.label}:<\/span>\n                            <span class=\"stp-segment-value\">${seg.fields[field.key] || ''}<\/span>\n                        <\/div>\n                    `).join('');\n                    \n                    card.innerHTML = `\n                        <div class=\"stp-segment-header\">\n                            <div class=\"stp-segment-name\">${seg.name}<\/div>\n                            <div class=\"stp-segment-actions\">\n                                <input type=\"checkbox\" class=\"stp-targeting-checkbox\" data-index=\"${index}\" ${seg.selected ? 'checked' : ''}>\n                            <\/div>\n                        <\/div>\n                        <div class=\"stp-segment-details\">\n                            ${detailRows}\n                        <\/div>\n                    `;\n                    \n                    \/\/ Checkbox\n                    const checkbox = card.querySelector('.stp-targeting-checkbox');\n                    checkbox.addEventListener('change', (e) => {\n                        this.data.segments[index].selected = e.target.checked;\n                        this.renderTargeting();\n                    });\n                    \n                    \/\/ Card click to toggle\n                    card.addEventListener('click', (e) => {\n                        \/\/ Don't toggle if clicking the checkbox itself\n                        if (e.target.classList.contains('stp-targeting-checkbox')) {\n                            return;\n                        }\n                        this.data.segments[index].selected = !this.data.segments[index].selected;\n                        checkbox.checked = this.data.segments[index].selected;\n                        this.renderTargeting();\n                    });\n                    \n                    this.dom.targetingGrid.appendChild(card);\n                });\n            },\n\n            renderPositioning() {\n                this.dom.positioningPoints.innerHTML = '';\n                \n                this.data.positioning.points.forEach((point, index) => {\n                    const el = document.createElement('div');\n                    el.className = `stp-positioning-point ${point.isSelf ? 'is-self' : ''}`;\n                    el.style.left = `${point.x}%`;\n                    el.style.top = `${point.y}%`;\n                    el.innerHTML = `\n                        <div class=\"stp-positioning-point-inner\">\n                            <div class=\"stp-positioning-point-name\">${point.name}<\/div>\n                            <div class=\"stp-positioning-point-delete\">\u00d7<\/div>\n                        <\/div>\n                    `;\n                    \n                    \/\/ Make draggable\n                    el.addEventListener('mousedown', (e) => this.startDrag(e, index));\n                    el.addEventListener('touchstart', (e) => this.startDrag(e, index));\n                    \n                    \/\/ Name edit\n                    const nameEl = el.querySelector('.stp-positioning-point-name');\n                    this.makeEditable(nameEl, (text) => {\n                        this.data.positioning.points[index].name = text;\n                    });\n                    \n                    \/\/ Delete\n                    const deleteBtn = el.querySelector('.stp-positioning-point-delete');\n                    deleteBtn.addEventListener('click', (e) => {\n                        e.stopPropagation();\n                        if (confirm('\u3053\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f')) {\n                            this.data.positioning.points.splice(index, 1);\n                            this.renderPositioning();\n                        }\n                    });\n                    \n                    this.dom.positioningPoints.appendChild(el);\n                });\n                \n                \/\/ Apply current font size to newly rendered points\n                const currentSize = this.dom.fontSlider.value;\n                this.changePositioningFontSize(currentSize);\n            },\n\n            startDrag(e, index) {\n                e.preventDefault();\n                const clientX = e.touches ? e.touches[0].clientX : e.clientX;\n                const clientY = e.touches ? e.touches[0].clientY : e.clientY;\n                \n                this.dragState = {\n                    index,\n                    startX: clientX,\n                    startY: clientY,\n                    startPosX: this.data.positioning.points[index].x,\n                    startPosY: this.data.positioning.points[index].y\n                };\n                \n                const moveHandler = (e) => this.onDrag(e);\n                const upHandler = () => {\n                    document.removeEventListener('mousemove', moveHandler);\n                    document.removeEventListener('mouseup', upHandler);\n                    document.removeEventListener('touchmove', moveHandler);\n                    document.removeEventListener('touchend', upHandler);\n                    this.dragState = null;\n                };\n                \n                document.addEventListener('mousemove', moveHandler);\n                document.addEventListener('mouseup', upHandler);\n                document.addEventListener('touchmove', moveHandler);\n                document.addEventListener('touchend', upHandler);\n            },\n\n            onDrag(e) {\n                if (!this.dragState) return;\n                \n                const clientX = e.touches ? e.touches[0].clientX : e.clientX;\n                const clientY = e.touches ? e.touches[0].clientY : e.clientY;\n                \n                const rect = this.dom.positioningMap.getBoundingClientRect();\n                const deltaX = ((clientX - this.dragState.startX) \/ rect.width) * 100;\n                const deltaY = ((clientY - this.dragState.startY) \/ rect.height) * 100;\n                \n                const newX = Math.max(5, Math.min(95, this.dragState.startPosX + deltaX));\n                const newY = Math.max(5, Math.min(95, this.dragState.startPosY + deltaY));\n                \n                this.data.positioning.points[this.dragState.index].x = newX;\n                this.data.positioning.points[this.dragState.index].y = newY;\n                \n                const pointEl = this.dom.positioningPoints.children[this.dragState.index];\n                pointEl.style.left = `${newX}%`;\n                pointEl.style.top = `${newY}%`;\n            },\n\n            addSegment() {\n                \/\/ Create empty fields object based on segmentFields\n                const newFields = {};\n                this.data.segmentFields.forEach(field => {\n                    newFields[field.key] = field.placeholder;\n                });\n                \n                this.data.segments.push({\n                    name: \"\u65b0\u3057\u3044\u30bb\u30b0\u30e1\u30f3\u30c8\",\n                    fields: newFields,\n                    selected: false\n                });\n                this.render();\n            },\n\n            addField() {\n                const fieldNum = this.data.segmentFields.length + 1;\n                const newKey = `field${fieldNum}`;\n                const newField = {\n                    key: newKey,\n                    label: `\u9805\u76ee${fieldNum}`,\n                    placeholder: `\u9805\u76ee${fieldNum}\u3092\u8a18\u5165`\n                };\n                \n                \/\/ Add new field to segmentFields\n                this.data.segmentFields.push(newField);\n                \n                \/\/ Add empty field to all existing segments\n                this.data.segments.forEach(seg => {\n                    seg.fields[newKey] = newField.placeholder;\n                });\n                \n                this.render();\n            },\n\n            addCompetitor() {\n                this.data.positioning.points.push({\n                    name: \"\u65b0\u898f\u7af6\u5408\",\n                    x: 50,\n                    y: 50,\n                    isSelf: false\n                });\n                this.renderPositioning();\n            },\n\n            changePositioningFontSize(size) {\n                this.dom.fontSizeValue.textContent = `${size}px`;\n                \n                \/\/ Calculate scaling ratio based on default size of 12px\n                const baseSize = 12;\n                const ratio = size \/ baseSize;\n                \n                \/\/ Update all positioning points\n                const allPoints = document.querySelectorAll('.stp-positioning-point');\n                allPoints.forEach(point => {\n                    const inner = point.querySelector('.stp-positioning-point-inner');\n                    const isSelf = point.classList.contains('is-self');\n                    \n                    \/\/ Scale font size (self points are 1px larger)\n                    inner.style.fontSize = isSelf ? `${parseInt(size) + 1}px` : `${size}px`;\n                    \n                    \/\/ Scale container dimensions\n                    if (isSelf) {\n                        \/\/ Self point base: width 100px, padding 8px 12px\n                        inner.style.width = `${100 * ratio}px`;\n                        inner.style.padding = `${8 * ratio}px ${12 * ratio}px`;\n                    } else {\n                        \/\/ Competitor point base: width 80px, padding 8px 12px\n                        inner.style.width = `${80 * ratio}px`;\n                        inner.style.padding = `${8 * ratio}px ${12 * ratio}px`;\n                    }\n                });\n            },\n\n            loadPreset(key) {\n                const preset = PRESETS[key];\n                if (!preset) return;\n                \n                this.data.segmentFields = preset.segmentFields;\n                this.data.segments = preset.segments;\n                this.data.positioning = preset.positioning;\n                this.dom.title.value = preset.title;\n                this.dom.previewTitle.textContent = preset.title;\n                \n                \/\/ Update axis labels\n                document.getElementById('stp_axis_top').textContent = preset.positioning.axisTop;\n                document.getElementById('stp_axis_bottom').textContent = preset.positioning.axisBottom;\n                document.getElementById('stp_axis_left').textContent = preset.positioning.axisLeft;\n                document.getElementById('stp_axis_right').textContent = preset.positioning.axisRight;\n                \n                this.render();\n            },\n\n            makeEditable(element, onSave) {\n                element.addEventListener('click', (e) => {\n                    e.stopPropagation();\n                    if (element.contentEditable === 'true') return;\n                    \n                    const originalText = element.textContent;\n                    element.contentEditable = true;\n                    element.focus();\n                    \n                    const range = document.createRange();\n                    range.selectNodeContents(element);\n                    const selection = window.getSelection();\n                    selection.removeAllRanges();\n                    selection.addRange(range);\n                    \n                    const save = () => {\n                        const newText = element.textContent.trim();\n                        if (newText && newText !== originalText) {\n                            onSave(newText);\n                        } else {\n                            element.textContent = originalText;\n                        }\n                        element.contentEditable = false;\n                    };\n                    \n                    element.addEventListener('blur', save, { once: true });\n                    element.addEventListener('keydown', (e) => {\n                        if (e.key === 'Enter') {\n                            e.preventDefault();\n                            element.blur();\n                        }\n                        if (e.key === 'Escape') {\n                            element.textContent = originalText;\n                            element.contentEditable = false;\n                        }\n                    });\n                });\n            },\n\n            loadExternalLib() {\n                if (typeof html2canvas === 'undefined') {\n                    const s = document.createElement('script');\n                    s.src = 'https:\/\/media-api.qcdgv19414.rakkoserver.net\/lib\/html2canvas.min.js';\n                    document.head.appendChild(s);\n                }\n            },\n\n            showGuideIfFirstTime() {\n                const guideShown = localStorage.getItem('stp_guide_shown');\n                if (!guideShown) {\n                    setTimeout(() => {\n                        document.getElementById('stp_guide_overlay').classList.add('active');\n                    }, 500);\n                }\n            },\n\n            downloadImage() {\n                if (typeof html2canvas === 'undefined') {\n                    alert('\u753b\u50cf\u751f\u6210\u6a5f\u80fd\u3092\u6e96\u5099\u4e2d\u3067\u3059\u3002\u3082\u3046\u4e00\u5ea6\u62bc\u3057\u3066\u304f\u3060\u3055\u3044\u3002');\n                    return;\n                }\n                \n                this.dom.loading.classList.add('active');\n                const target = this.dom.previewContainer;\n                const wrapper = this.dom.contentWrapper;\n                target.classList.add('stp-capturing');\n                \n                \/\/ Store original styles\n                const originalContainerWidth = target.style.width;\n                const originalContainerMaxWidth = target.style.maxWidth;\n                const originalAreaWidth = target.parentElement.style.width;\n                const originalAreaMaxWidth = target.parentElement.style.maxWidth;\n                const originalAreaMargin = target.parentElement.style.margin;\n                \n                \/\/ Apply 1080px width and landscape layout\n                target.style.width = '1080px';\n                target.style.maxWidth = '1080px';\n                target.parentElement.style.width = '1080px';\n                target.parentElement.style.maxWidth = '1080px';\n                target.parentElement.style.margin = '0 auto';\n                wrapper.classList.add('stp-landscape-layout');\n                \n                \/\/ Force reflow\n                void wrapper.offsetHeight;\n                \n                \/\/ Longer timeout to ensure layout is complete\n                setTimeout(() => {\n                    html2canvas(target, {\n                        scale: 2,\n                        backgroundColor: \"#ffffff\",\n                        useCORS: true,\n                        width: 1080\n                    }).then(canvas => {\n                        const a = document.createElement('a');\n                        a.download = `STP\u5206\u6790_${Date.now()}.png`;\n                        a.href = canvas.toDataURL('image\/png');\n                        a.click();\n                        \n                        \/\/ Restore original styles\n                        target.style.width = originalContainerWidth;\n                        target.style.maxWidth = originalContainerMaxWidth;\n                        target.parentElement.style.width = originalAreaWidth;\n                        target.parentElement.style.maxWidth = originalAreaMaxWidth;\n                        target.parentElement.style.margin = originalAreaMargin;\n                        wrapper.classList.remove('stp-landscape-layout');\n                        \n                        target.classList.remove('stp-capturing');\n                        this.dom.loading.classList.remove('active');\n                    }).catch(e => {\n                        console.error(e);\n                        alert('\u753b\u50cf\u4fdd\u5b58\u306b\u5931\u6557\u3057\u307e\u3057\u305f');\n                        \n                        \/\/ Restore original styles\n                        target.style.width = originalContainerWidth;\n                        target.style.maxWidth = originalContainerMaxWidth;\n                        target.parentElement.style.width = originalAreaWidth;\n                        target.parentElement.style.maxWidth = originalAreaMaxWidth;\n                        target.parentElement.style.margin = originalAreaMargin;\n                        wrapper.classList.remove('stp-landscape-layout');\n                        \n                        target.classList.remove('stp-capturing');\n                        this.dom.loading.classList.remove('active');\n                    });\n                }, 300);\n            }\n        };\n\n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', () => App.init());\n        } else {\n            App.init();\n        }\n    })();\n    <\/script>\n<\/div>\n\n\n\n<style>\n  .rs-related-tools {\n    background: transparent;\n    color: #000;\n    padding: 10px 0;\n    font-size: 14px;\n    line-height: 1.6;\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px 12px;\n    align-items: center;\n    margin: 16px 0;\n  }\n  .rs-related-tools__label {\n    border: 1px solid #000;\n    padding: 2px 6px;\n    border-radius: 4px;\n    font-weight: 600;\n    white-space: nowrap;\n  }\n  .rs-related-tools a {\n    color: #0066cc;\n    text-decoration: none;\n    white-space: nowrap;\n  }\n  .rs-related-tools a:hover,\n  .rs-related-tools a:focus {\n    text-decoration: underline;\n  }\n<\/style>\n<div class=\"rs-related-tools\">\n  <span class=\"rs-related-tools__label\">\u95a2\u9023\u30c4\u30fc\u30eb<\/span>\n  <a href=\"https:\/\/rakkokeyword.com\/techo\/tool-pest-analysis-maker\/\">PEST\u5206\u6790<\/a>\n  <a href=\"https:\/\/rakkokeyword.com\/techo\/tool-5forces-analysis-maker\/\">5Forces\u5206\u6790<\/a>\n  <a href=\"https:\/\/rakkokeyword.com\/techo\/tool-4p-analysis-maker\/\">4P\u5206\u6790<\/a>\n<\/div>\n\n\n\n<p>\u3053\u306e\u30c4\u30fc\u30eb\u306f\u3001\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u6226\u7565\u306e\u7acb\u6848\u306b\u4e0d\u53ef\u6b20\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u300cSTP\u5206\u6790\u300d\u306e\u30b7\u30fc\u30c8\u3092\u3001\u30d6\u30e9\u30a6\u30b6\u4e0a\u3067\u8ab0\u3067\u3082\u7c21\u5358\u306b\u4f5c\u6210\u30fb\u4fdd\u5b58\u3067\u304d\u308b\u7121\u6599\u306eWEB\u30c4\u30fc\u30eb\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-0\">\u3053\u306e\u30c4\u30fc\u30eb\u3067\u3067\u304d\u308b\u3053\u3068<\/h2>\n\n\n\n<p>STP\u5206\u6790\u306f\u300cS\u30fbT\u30fbP\u300d\u306e3\u3064\u306e\u30b9\u30c6\u30c3\u30d7\u3092\u9023\u52d5\u3055\u305b\u3066\u8003\u3048\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u3053\u306e\u30c4\u30fc\u30eb\u3067\u306f\u3001\u305d\u306e\u601d\u8003\u30d7\u30ed\u30bb\u30b9\u3092\u30b9\u30e0\u30fc\u30ba\u306b\u53ef\u8996\u5316\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>3\u3064\u306e\u30b9\u30c6\u30c3\u30d7\u30921\u679a\u306b\u96c6\u7d04<\/strong> \u300cSegmentation\uff08\u5e02\u5834\u306e\u7d30\u5206\u5316\uff09\u300d\u300cTargeting\uff08\u30bf\u30fc\u30b2\u30c3\u30c8\u9078\u5b9a\uff09\u300d\u300cPositioning\uff08\u7acb\u3061\u4f4d\u7f6e\u306e\u6c7a\u5b9a\uff09\u300d\u306e3\u3064\u306e\u8981\u7d20\u3092\u3001\u6574\u7406\u3055\u308c\u305f\u30ec\u30a4\u30a2\u30a6\u30c8\u3067\u4e00\u62ec\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u9762\u5012\u306a\u30dd\u30b8\u30b7\u30e7\u30cb\u30f3\u30b0\u30de\u30c3\u30d7\u3082\u7c21\u5358\u4f5c\u6210<\/strong> \u30d1\u30ef\u30fc\u30dd\u30a4\u30f3\u30c8\u3067\u4e38\u3084\u7dda\u3092\u8abf\u6574\u3057\u3066\u63cf\u304f\u306e\u304c\u5927\u5909\u306a\u300c\u30dd\u30b8\u30b7\u30e7\u30cb\u30f3\u30b0\u30de\u30c3\u30d7\uff082\u8ef8\u56f3\uff09\u300d\u3082\u3001\u3053\u306e\u30c4\u30fc\u30eb\u306a\u3089\u7c21\u5358\u3067\u3059\u3002\u7e26\u8ef8\u30fb\u6a2a\u8ef8\u306e\u9805\u76ee\u540d\u3092\u5165\u529b\u3059\u308b\u3060\u3051\u3067\u3001\u304d\u308c\u3044\u306a4\u8c61\u9650\u306e\u56f3\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u696d\u754c\u5225\u306e\u4e8b\u4f8b\u3092\u30ef\u30f3\u30af\u30ea\u30c3\u30af\u3067\u53cd\u6620<\/strong> \u300c\u30ab\u30d5\u30a7\u300d\u300c\u30b8\u30e0\u300d\u300cSaaS\u300d\u306a\u3069\u306e\u696d\u754c\u5225\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\uff08\u5206\u6790\u4e8b\u4f8b\uff09\u3092\u7528\u610f\u3057\u307e\u3057\u305f\u3002\u30d7\u30ea\u30bb\u30c3\u30c8\u3092\u9078\u3076\u3060\u3051\u3067\u3001\u30bb\u30b0\u30e1\u30f3\u30c8\u306e\u5207\u308a\u53e3\u3084\u8ef8\u306e\u53d6\u308a\u65b9\u306e\u30d2\u30f3\u30c8\u304c\u81ea\u52d5\u5165\u529b\u3055\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u753b\u50cf\u30c7\u30fc\u30bf\u3068\u3057\u3066\u4fdd\u5b58<\/strong> \u4f5c\u6210\u3057\u305f\u5206\u6790\u7d50\u679c\u306f\u300c\u753b\u50cf\u3068\u3057\u3066\u4fdd\u5b58\u300d\u30dc\u30bf\u30f3\u3067\u3001\u9ad8\u89e3\u50cf\u5ea6\u306ePNG\u753b\u50cf\u3068\u3057\u3066\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u53ef\u80fd\u3002\u305d\u306e\u307e\u307e\u4f01\u753b\u66f8\u3084\u30d7\u30ec\u30bc\u30f3\u8cc7\u6599\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-1\">\u30c4\u30fc\u30eb\u306e\u4f7f\u3044\u65b9\u30ac\u30a4\u30c9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u57fa\u672c\u7684\u306a\u5165\u529b\u64cd\u4f5c<\/h3>\n\n\n\n<p>\u753b\u9762\u4e0a\u304b\u3089\u9806\u756a\u306b S \u2192 T \u2192 P \u3068\u5165\u529b\u3057\u3066\u3044\u304f\u3053\u3068\u3067\u3001\u81ea\u7136\u3068\u6226\u7565\u304c\u6574\u7406\u3055\u308c\u308b\u3088\u3046\u306b\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-3\">1. Segmentation\uff08\u5e02\u5834\u7d30\u5206\u5316\uff09<\/h4>\n\n\n\n<p>\u5e02\u5834\u3092\u3069\u306e\u3088\u3046\u306a\u5207\u308a\u53e3\u3067\u5206\u3051\u308b\u304b\u3092\u8a18\u5165\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5165\u529b\u306e\u30b3\u30c4:<\/strong> \u5de6\u5074\u306b\u300c\u5206\u985e\u306e\u8ef8\uff08\u4f8b\uff1a\u5e74\u9f62\u3001\u5730\u57df\u3001\u5fd7\u5411\u6027\uff09\u300d\u3001\u53f3\u5074\u306b\u300c\u5177\u4f53\u7684\u306a\u5185\u5bb9\u300d\u3092\u66f8\u304f\u3068\u5206\u304b\u308a\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-4\">2. Targeting\uff08\u30bf\u30fc\u30b2\u30c3\u30c8\u9078\u5b9a\uff09<\/h4>\n\n\n\n<p>\u7d30\u5206\u5316\u3057\u305f\u5e02\u5834\u306e\u4e2d\u3067\u3001\u3069\u3053\u3092\u72d9\u3046\u304b\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5165\u529b\u306e\u30b3\u30c4:<\/strong> \u300c\u30da\u30eb\u30bd\u30ca\uff08\u4eba\u7269\u50cf\uff09\u300d\u3084\u300c\u72d9\u3046\u5e02\u5834\u898f\u6a21\u300d\u306a\u3069\u3092\u5177\u4f53\u7684\u306b\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-5\">3. Positioning\uff08\u7acb\u3061\u4f4d\u7f6e\u306e\u6c7a\u5b9a\uff09<\/h4>\n\n\n\n<p>\u3053\u3053\u304c\u3053\u306e\u30c4\u30fc\u30eb\u306e\u6700\u5927\u306e\u7279\u5fb4\u3067\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u8ef8\u306e\u8a2d\u5b9a:<\/strong> \u7e26\u8ef8\u3068\u6a2a\u8ef8\u306e\u30e9\u30d9\u30eb\uff08\u4f8b\uff1a\u300c\u4fa1\u683c\uff1a\u9ad8\u3044\u21d4\u5b89\u3044\u300d\u300c\u54c1\u8cea\uff1a\u9ad8\u3044\u21d4\u4f4e\u3044\u300d\uff09\u3092\u5165\u529b\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u7af6\u5408\u306e\u914d\u7f6e:<\/strong> \u81ea\u793e\u3068\u7af6\u5408\u4ed6\u793e\u304c\u30de\u30c3\u30d7\u4e0a\u306e\u3069\u3053\u306b\u4f4d\u7f6e\u3059\u308b\u304b\u3092\u8a18\u8ff0\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u81ea\u793e\u72ec\u81ea\u306e\u300c\u52dd\u3066\u308b\u7acb\u3061\u4f4d\u7f6e\u300d\u304c\u53ef\u8996\u5316\u3055\u308c\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u30d7\u30ea\u30bb\u30c3\u30c8\uff08\u8a18\u5165\u4f8b\uff09\u306e\u6d3b\u7528<\/h3>\n\n\n\n<p>\u753b\u9762\u4e0a\u90e8\u306e\u300c\u696d\u754c\u30d7\u30ea\u30bb\u30c3\u30c8\u300d\u304b\u3089\u3001\u81ea\u5206\u306e\u30d3\u30b8\u30cd\u30b9\u306b\u8fd1\u3044\u696d\u754c\u3092\u9078\u3093\u3067\u307f\u3066\u304f\u3060\u3055\u3044\u3002\u300c\u306a\u308b\u307b\u3069\u3001\u3053\u3046\u3044\u3046\u8ef8\u3067\u5206\u6790\u3059\u308c\u3070\u3044\u3044\u306e\u304b\u300d\u3068\u3044\u3046\u30d2\u30f3\u30c8\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">STP\u5206\u6790\u3068\u306f\uff1f\uff08\u57fa\u790e\u77e5\u8b58\uff09<\/h2>\n\n\n\n<p>\u30d5\u30a3\u30ea\u30c3\u30d7\u30fb\u30b3\u30c8\u30e9\u30fc\u304c\u63d0\u5531\u3057\u305f\u3001\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u6226\u7565\u306e\u57fa\u672c\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u4ee5\u4e0b\u306e3\u6bb5\u968e\u3067\u8003\u3048\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">S\uff1aSegmentation\uff08\u30bb\u30b0\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\uff09<\/h3>\n\n\n\n<p><strong>\u300c\u5e02\u5834\u3092\u5206\u3051\u308b\u300d<\/strong> <br>\u4e0d\u7279\u5b9a\u591a\u6570\u306e\u9867\u5ba2\u3092\u3001\u540c\u3058\u30cb\u30fc\u30ba\u3084\u6027\u8cea\u3092\u6301\u3064\u30b0\u30eb\u30fc\u30d7\u306b\u5206\u3051\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4ee3\u8868\u7684\u306a\u5909\u6570\uff1a\n<ul class=\"wp-block-list\">\n<li>\u5730\u7406\u7684\u5909\u6570\uff08\u4f4f\u3093\u3067\u3044\u308b\u5834\u6240\u3001\u6c17\u5019\uff09<\/li>\n\n\n\n<li>\u4eba\u53e3\u7d71\u8a08\u7684\u5909\u6570\uff08\u5e74\u9f62\u3001\u6027\u5225\u3001\u8077\u696d\uff09<\/li>\n\n\n\n<li>\u5fc3\u7406\u7684\u5909\u6570\uff08\u30e9\u30a4\u30d5\u30b9\u30bf\u30a4\u30eb\u3001\u4fa1\u5024\u89b3\uff09<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">T\uff1aTargeting\uff08\u30bf\u30fc\u30b2\u30c6\u30a3\u30f3\u30b0\uff09<\/h3>\n\n\n\n<p><strong>\u300c\u72d9\u3046\u76f8\u624b\u3092\u6c7a\u3081\u308b\u300d<\/strong> <br>\u5206\u3051\u305f\u30b0\u30eb\u30fc\u30d7\u306e\u4e2d\u304b\u3089\u3001\u81ea\u793e\u304c\u52dd\u8ca0\u3059\u308b\u3079\u304d\uff08\u6700\u3082\u9b45\u529b\u7684\u306a\uff09\u30b0\u30eb\u30fc\u30d7\u3092\u7d5e\u308a\u8fbc\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5224\u65ad\u57fa\u6e96\uff1a\u5e02\u5834\u898f\u6a21\u306f\u5341\u5206\u304b\uff1f \u81ea\u793e\u306e\u5f37\u307f\u304c\u6d3b\u304d\u308b\u304b\uff1f \u7af6\u5408\u306f\u5f37\u3059\u304e\u306a\u3044\u304b\uff1f<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">P\uff1aPositioning\uff08\u30dd\u30b8\u30b7\u30e7\u30cb\u30f3\u30b0\uff09<\/h3>\n\n\n\n<p><strong>\u300c\u7acb\u3061\u4f4d\u7f6e\u3092\u660e\u78ba\u306b\u3059\u308b\u300d<\/strong> <br>\u30bf\u30fc\u30b2\u30c3\u30c8\u9867\u5ba2\u306e\u982d\u306e\u4e2d\u3067\u3001\u300c\u4ed6\u793e\u3068\u306f\u9055\u3046\u3001\u72ec\u81ea\u306e\u9b45\u529b\u7684\u306a\u5b58\u5728\u300d\u3068\u3057\u3066\u8a8d\u8b58\u3055\u308c\u308b\u4f4d\u7f6e\u3092\u7bc9\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30dd\u30a4\u30f3\u30c8\uff1a\u57fa\u672c\u7684\u306b\u300c2\u8ef8\u300d\u306e\u30de\u30c8\u30ea\u30af\u30b9\u56f3\u3067\u8868\u73fe\u3057\u3001\u7af6\u5408\u3068\u88ab\u3089\u306a\u3044\uff08\u5dee\u5225\u5316\u3067\u304d\u308b\uff09\u4f4d\u7f6e\u3092\u63a2\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-11\">\u3053\u306e\u30c4\u30fc\u30eb\u306f\u3069\u3093\u306a\u6642\u306b\u5f79\u7acb\u3064\uff1f<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u65b0\u5546\u54c1\u30fb\u65b0\u30b5\u30fc\u30d3\u30b9\u306e\u958b\u767a<\/strong> \u300c\u8ab0\u306b\u300d\u300c\u3069\u3093\u306a\u4fa1\u5024\u3092\u300d\u5c4a\u3051\u308b\u304b\u3092\u660e\u78ba\u306b\u3057\u3001\u30b3\u30f3\u30bb\u30d7\u30c8\u3092\u56fa\u3081\u305f\u3044\u3068\u304d\u3002<\/li>\n\n\n\n<li><strong>\u30ea\u30d6\u30e9\u30f3\u30c7\u30a3\u30f3\u30b0<\/strong> \u58f2\u4e0a\u304c\u843d\u3061\u3066\u3044\u308b\u5546\u54c1\u306b\u3064\u3044\u3066\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u5909\u3048\u308b\u304b\u3001\u8a34\u6c42\u30dd\u30a4\u30f3\u30c8\uff08\u8ef8\uff09\u3092\u5909\u3048\u308b\u304b\u3092\u691c\u8a0e\u3059\u308b\u3068\u304d\u3002<\/li>\n\n\n\n<li><strong>\u7af6\u5408\u3068\u306e\u5dee\u5225\u5316\u6226\u7565<\/strong> \u300c\u306a\u305c\u9867\u5ba2\u306f\u7af6\u5408\u3067\u306f\u306a\u304f\u3001\u81ea\u793e\u3092\u9078\u3076\u3079\u304d\u306a\u306e\u304b\uff1f\u300d\u3092\u8ad6\u7406\u7684\u306b\u8aac\u660e\u3057\u305f\u3044\u3068\u304d\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">\u3088\u304f\u3042\u308b\u8cea\u554f<\/h2>\n\n\n\n<p><strong>Q. \u8ef8\u306e\u9078\u3073\u65b9\u304c\u308f\u304b\u308a\u307e\u305b\u3093<\/strong> <br>A. \u30d7\u30ea\u30bb\u30c3\u30c8\u6a5f\u80fd\u3092\u6d3b\u7528\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u822c\u7684\u306b\u306f\u300c\u4fa1\u683c\u300d\u300c\u54c1\u8cea\u300d\u300c\u6a5f\u80fd\u300d\u300c\u5229\u4fbf\u6027\u300d\u300c\u30c7\u30b6\u30a4\u30f3\u300d\u306a\u3069\u304c\u3088\u304f\u4f7f\u308f\u308c\u307e\u3059\u304c\u3001\u300c\u9867\u5ba2\u304c\u5546\u54c1\u3092\u9078\u3076\u969b\u306e\u6c7a\u5b9a\u6253\uff08KBF\uff09\u300d\u3092\u8ef8\u306b\u8a2d\u5b9a\u3059\u308b\u306e\u304c\u30b3\u30c4\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>Q. \u753b\u50cf\u306e\u4fdd\u5b58\u5f62\u5f0f\u306f\uff1f<\/strong> <br>A. \u80cc\u666f\u304c\u900f\u904e\u3055\u308c\u3066\u3044\u306a\u3044\u3001\u8cc7\u6599\u306b\u4f7f\u3044\u3084\u3059\u3044\u767d\u8272\u80cc\u666f\u306ePNG\u5f62\u5f0f\u3067\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>Q. \u5546\u7528\u5229\u7528\u306f\u53ef\u80fd\u3067\u3059\u304b\uff1f<\/strong> <br>A. \u306f\u3044\u3001\u4f5c\u6210\u3055\u308c\u305f\u753b\u50cf\u306f\u7121\u6599\u30fb\u7121\u8a31\u53ef\u3067\u5546\u7528\u5229\u7528\uff08\u30d7\u30ec\u30bc\u30f3\u8cc7\u6599\u3001Web\u30b5\u30a4\u30c8\u3001\u51fa\u7248\u7269\u3078\u306e\u63b2\u8f09\u306a\u3069\uff09\u3044\u305f\u3060\u3051\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udcca STP\u5206\u6790\u30c4\u30fc\u30eb\u306e\u4f7f\u3044\u65b9 1\ufe0f\u20e3 Segmentation\uff08\u5e02\u5834\u7d30\u5206\u5316\uff09 \u5e02\u5834\u3092\u30bb\u30b0\u30e1\u30f3\u30c8\u306b\u5206\u5272\u3057\u3066\u5b9a\u7fa9 2\ufe0f\u20e3 Targeting\uff08\u30bf\u30fc\u30b2\u30c3\u30c8\u9078\u5b9a\uff09 \u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3067\u72d9\u3046\u3079\u304d\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u9078\u629e 3\ufe0f\u20e3 Positi &#8230; <\/p>\n","protected":false},"author":4,"featured_media":9086,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,41,40,42],"tags":[],"class_list":{"0":"post-9075","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-tool","8":"category-41","9":"category-40","10":"category-42","11":"entry"},"_links":{"self":[{"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/posts\/9075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/comments?post=9075"}],"version-history":[{"count":11,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/posts\/9075\/revisions"}],"predecessor-version":[{"id":9100,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/posts\/9075\/revisions\/9100"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/media\/9086"}],"wp:attachment":[{"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/media?parent=9075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/categories?post=9075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/tags?post=9075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}