{"id":10581,"date":"2026-01-26T19:53:24","date_gmt":"2026-01-26T10:53:24","guid":{"rendered":"https:\/\/labo.com\/CraftBand\/?page_id=10581"},"modified":"2026-03-17T13:02:40","modified_gmt":"2026-03-17T04:02:40","slug":"square-calc","status":"publish","type":"page","link":"https:\/\/labo.com\/CraftBand\/sharing\/square-calc\/","title":{"rendered":"\u56db\u89d2\u304b\u3054\u306e\u30b5\u30a4\u30ba\u8a08\u7b97"},"content":{"rendered":"\n<ol class=\"wp-block-list\">\n<li>[B5\u6a2a][A4\u6a2a][B4\u6a2a]\u306e\u30dc\u30bf\u30f3\u3067\u304a\u304a\u3088\u305d\u306e\u30b5\u30a4\u30ba\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044\u3002<\/li>\n\n\n\n<li>\u305d\u306e\u30b5\u30a4\u30ba\u306b\u5fc5\u8981\u306a\u672c\u6570\u3084\u9577\u3055\u306f\u3001\u5e95\u9762\u56f3\u306e\u4e0b\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li>\u5404\u6570\u5024\u3092Up\/Down\u3057\u3001\u4f5c\u308a\u305f\u3044\u30b5\u30a4\u30ba\u306b\u5408\u308f\u305b\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n\n\n\n<li>[\u5c55\u958b\u56f3\u3092\u66f4\u65b0]\u30dc\u30bf\u30f3\u3067\u56f3\u304c\u8868\u793a\u3055\u308c\u3001PDF\u3068\u3057\u3066\u53d6\u308a\u51fa\u305b\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<div id=\"purakago-calc-app\">\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\" crossorigin=\"anonymous\"\n        referrerpolicy=\"no-referrer\"><\/script>\n\n    <style>\n        \/* --- \u30b9\u30bf\u30a4\u30eb\u5b9a\u7fa9 (\u3053\u306e\u30c4\u30fc\u30eb\u5185\u9650\u5b9a) --- *\/\n        #purakago-calc-app {\n            font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n            padding: 16px;\n            max-width: 900px;\n            margin: 0 auto;\n            background-color: #fff;\n            border: 1px solid #eee;\n            \/* \u5883\u754c\u3092\u5206\u304b\u308a\u3084\u3059\u304f *\/\n            border-radius: 8px;\n        }\n\n        \/* \u30ec\u30a4\u30a2\u30a6\u30c8\u30b3\u30f3\u30c6\u30ca *\/\n        #purakago-calc-app .row {\n            display: flex;\n            align-items: flex-end;\n            gap: 16px;\n            margin-bottom: 12px;\n            flex-wrap: wrap;\n        }\n\n        \/* \u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9 *\/\n        #purakago-calc-app .inline-field {\n            display: flex;\n            flex-direction: column;\n        }\n\n        #purakago-calc-app .inline-field label {\n            font-size: 12px;\n            margin-bottom: 4px;\n            font-weight: bold;\n            color: #374151;\n        }\n\n        #purakago-calc-app .input-group {\n            display: flex;\n            align-items: center;\n            gap: 4px;\n        }\n\n        #purakago-calc-app input.narrow-input {\n            width: 5em;\n            padding: 4px;\n            border: 1px solid #d1d5db;\n            border-radius: 4px;\n            font-size: 14px;\n            box-sizing: border-box;\n        }\n\n        \/* \u5358\u4f4d\u30e9\u30d9\u30eb\u306a\u3069 *\/\n        #purakago-calc-app .unit-label {\n            font-size: 0.85em;\n            color: #6b7280;\n            margin-right: 4px;\n        }\n\n        #purakago-calc-app .note-text {\n            font-size: 0.8em;\n            color: #555;\n            margin-left: 8px;\n            line-height: 1.4;\n        }\n\n        \/* \u30dc\u30bf\u30f3\u985e *\/\n        #purakago-calc-app .field {\n            margin-bottom: 8px;\n        }\n\n        #purakago-calc-app .size-btn {\n            margin-right: 8px;\n            padding: 4px 10px;\n            font-size: 12px;\n            cursor: pointer;\n            background: #3b82f6;\n            border: 1px solid #d1d5db;\n            border-radius: 6px;\n            transition: background 0.2s;\n        }\n\n        #purakago-calc-app .size-btn:hover {\n            background: #d1d5db;\n        }\n\n        \/* \u5de6\u63c3\u3048\u30b3\u30f3\u30c6\u30ca *\/\n        #purakago-calc-app .leftAlignContainer {\n            display: flex;\n            flex-direction: column;\n            align-items: flex-start;\n            margin-top: 10px;\n        }\n\n        \/* \u4ed5\u4e0a\u304c\u308a\u30b5\u30a4\u30ba\u8868\u793a\u30a8\u30ea\u30a2 *\/\n        #purakago-calc-app .sizeDisplayArea {\n            margin-bottom: 8px;\n            padding: 10px 14px;\n            background-color: #f3f4f6;\n            border-radius: 6px;\n            border: 1px solid #e5e7eb;\n            color: #111827;\n            display: inline-block;\n            min-width: 200px;\n        }\n\n        #purakago-calc-app .size-line {\n            margin-bottom: 4px;\n            font-weight: bold;\n            font-size: 14px;\n        }\n\n        #purakago-calc-app .size-line:last-child {\n            margin-bottom: 0;\n        }\n\n        \/* \u5168\u5782\u76f4\u3072\u3082\u6570\u306e\u30b9\u30bf\u30a4\u30eb *\/\n        #purakago-calc-app .vertical-count-label {\n            margin-left: 16px;\n            padding-left: 16px;\n            border-left: 2px solid #d1d5db;\n            color: #4b5563;\n        }\n\n        \/* \u5e95\u9762\u30b0\u30ea\u30c3\u30c9 *\/\n        #purakago-calc-app .layout {\n            margin-bottom: 12px;\n            display: inline-grid;\n            border: 1px solid #333;\n        }\n\n        #purakago-calc-app .layout-cell {\n            width: 20px;\n            height: 20px;\n            box-sizing: border-box;\n            border: 1px solid #e5e7eb;\n        }\n\n        \/* \u8a08\u7b97\u7d50\u679c\u30a8\u30ea\u30a2 *\/\n        #purakago-calc-app .summary {\n            margin-top: 12px;\n            line-height: 1.8;\n            padding: 12px;\n            background-color: #fff;\n            border: 1px solid #e5e7eb;\n            border-radius: 6px;\n            font-size: 14px;\n            min-height: 60px;\n        }\n\n        #purakago-calc-app .formula-text {\n            color: #6b7280;\n            font-size: 0.85em;\n            margin-left: 8px;\n        }\n\n        #purakago-calc-app .warning-text {\n            color: #d97706;\n            font-size: 0.9em;\n            font-weight: bold;\n            margin-left: 8px;\n        }\n\n        #purakago-calc-app .totalLengthArea {\n            margin-top: 12px;\n            padding-top: 8px;\n            border-top: 2px dashed #d1d5db;\n            font-size: 1.1em;\n            font-weight: bold;\n            color: #b91c1c;\n        }\n\n        \/* \u5c55\u958b\u56f3\u66f4\u65b0\u30dc\u30bf\u30f3 *\/\n        #purakago-calc-app #calcButton {\n            display: block;\n            margin-top: 16px;\n            margin-bottom: 16px;\n            padding: 10px 20px;\n            background-color: #3b82f6;\n            color: white;\n            border: none;\n            border-radius: 6px;\n            cursor: pointer;\n            font-weight: bold;\n            font-size: 14px;\n            width: 100%;\n            max-width: 300px;\n            transition: background 0.2s;\n        }\n\n        #purakago-calc-app #calcButton:hover {\n            background-color: #2563eb;\n        }\n\n        \/* PDF\u30dc\u30bf\u30f3 (\u521d\u671f\u975e\u8868\u793a) *\/\n        #purakago-calc-app #pdfButton {\n            display: none;\n            margin-top: 10px;\n            padding: 8px 16px;\n            background-color: #ef4444;\n            color: white;\n            border: none;\n            border-radius: 6px;\n            cursor: pointer;\n            font-weight: bold;\n            font-size: 13px;\n            transition: background 0.2s;\n        }\n\n        #purakago-calc-app #pdfButton:hover {\n            background-color: #dc2626;\n        }\n\n        \/* \u5c55\u958b\u56f3Canvas\u30a8\u30ea\u30a2 *\/\n        #purakago-calc-app .diagram-section {\n            margin-top: 20px;\n            margin-bottom: 20px;\n        }\n\n        #purakago-calc-app .diagram-section h2 {\n            font-size: 14px;\n            margin-bottom: 8px;\n            color: #374151;\n            border-bottom: none;\n        }\n\n        #purakago-calc-app #purakagoCanvas {\n            display: block;\n            border: 1px solid #d1d5db;\n            background: #fafafa;\n            max-width: 100%;\n            height: auto;\n        }\n    <\/style>\n\n    <div class=\"row\">\n        <div class=\"inline-field\">\n            <label>\u30d0\u30f3\u30c9\u5e45(mm) + \u3059\u304d\u9593(mm)<\/label>\n            <div class=\"input-group\">\n                <input type=\"number\" id=\"bandWidthBase\" min=\"0\" step=\"0.1\" value=\"15\" class=\"narrow-input\">\n                <span style=\"margin: 0 4px;\">+<\/span>\n                <input type=\"number\" id=\"bandGap\" min=\"0\" step=\"0.1\" value=\"0.5\" class=\"narrow-input\">\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"field\" style=\"margin-bottom: 6px;\">\n        <button type=\"button\" id=\"btnB5\" class=\"size-btn\">B5\u6a2a<\/button>\n        <button type=\"button\" id=\"btnA4\" class=\"size-btn\">A4\u6a2a<\/button>\n        <button type=\"button\" id=\"btnB4\" class=\"size-btn\">B4\u6a2a<\/button>\n    <\/div>\n\n    <div class=\"row\">\n        <div class=\"inline-field\">\n            <label for=\"vertical\">\u7e26\u306b\u4e26\u3076\u672c\u6570<\/label>\n            <div class=\"input-group\">\n                <input type=\"number\" id=\"vertical\" min=\"1\" step=\"1\" placeholder=\"\u4f8b: 5\" class=\"narrow-input\">\n                <span class=\"unit-label\">\u672c<\/span>\n            <\/div>\n        <\/div>\n        <div class=\"inline-field\">\n            <label for=\"horizontal\">\u6a2a\u306b\u4e26\u3076\u672c\u6570<\/label>\n            <div class=\"input-group\">\n                <input type=\"number\" id=\"horizontal\" min=\"1\" step=\"1\" placeholder=\"\u4f8b: 10\" class=\"narrow-input\">\n                <span class=\"unit-label\">\u672c<\/span>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"row\">\n        <div class=\"inline-field\">\n            <label for=\"height\">\u9ad8\u3055\u306e\u672c\u6570<\/label>\n            <div class=\"input-group\">\n                <input type=\"number\" id=\"height\" min=\"1\" step=\"1\" placeholder=\"\u4f8b: 3\" class=\"narrow-input\">\n                <span class=\"unit-label\">\u6bb5<\/span>\n            <\/div>\n        <\/div>\n        <div class=\"inline-field\">\n            <label for=\"edgeCount\">\u7e01\u306b\u91cd\u306d\u308b<\/label>\n            <div class=\"input-group\">\n                <input type=\"number\" id=\"edgeCount\" min=\"0\" step=\"1\" value=\"2\" class=\"narrow-input\">\n                <span class=\"unit-label\">\u672c<\/span>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"row\">\n        <div class=\"inline-field\">\n            <label>\u7e01\u306e\u6298\u308a\u8fd4\u3057\u52a0\u7b97<\/label>\n            <div class=\"input-group\">\n                <input type=\"number\" id=\"foldAddition\" min=\"0\" step=\"0.1\" placeholder=\"cm\" class=\"narrow-input\">\n                <span class=\"unit-label\">cm \/<\/span>\n                <input type=\"number\" id=\"foldKoma\" min=\"0\" step=\"0.5\" placeholder=\"\u30b3\u30de\" class=\"narrow-input\"\n                    style=\"width: 4em;\">\n                <span class=\"unit-label\">\u30b3\u30de<\/span>\n            <\/div>\n        <\/div>\n\n        <div class=\"inline-field\">\n            <label>\u5074\u9762\u306e\u7de8\u307f\u3072\u3082\u52a0\u7b97<\/label>\n            <div class=\"input-group\">\n                <input type=\"number\" id=\"cordAddition\" min=\"0\" step=\"0.1\" placeholder=\"cm\" class=\"narrow-input\">\n                <span class=\"unit-label\">cm \/<\/span>\n                <input type=\"number\" id=\"cordKoma\" min=\"0\" step=\"0.5\" placeholder=\"\u30b3\u30de\" class=\"narrow-input\"\n                    style=\"width: 4em;\">\n                <span class=\"unit-label\">\u30b3\u30de<\/span>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"leftAlignContainer\">\n        <div class=\"sizeDisplayArea\">\n            <div class=\"size-line\" id=\"bottomSizeDisplay\">\u5e95\u9762\u30b5\u30a4\u30ba: &#8211; cm \u00d7 &#8211; cm<\/div>\n            <div class=\"size-line\">\n                <span id=\"heightSizeDisplay\">\u9ad8\u3055: &#8211; cm<\/span>\n                <span id=\"totalUprightsDisplay\" class=\"vertical-count-label\">\u5168\u5782\u76f4\u3072\u3082\u6570: &#8211; \u672c<\/span>\n            <\/div>\n        <\/div>\n\n        <div id=\"bottomLayout\" class=\"layout\"><\/div>\n    <\/div>\n\n    <div id=\"summary\" class=\"summary\"><\/div>\n\n    <button id=\"calcButton\">\u5c55\u958b\u56f3\u3092\u66f4\u65b0<\/button>\n\n    <div class=\"diagram-section\">\n        <h2>\u5c55\u958b\u56f3<\/h2>\n        <canvas id=\"purakagoCanvas\"><\/canvas>\n        <button id=\"pdfButton\">PDF\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/button>\n    <\/div>\n\n    <script>\n        { \/\/ \u30d6\u30ed\u30c3\u30af\u30b9\u30b3\u30fc\u30d7\u958b\u59cb\uff08\u5909\u6570\u306e\u7af6\u5408\u9632\u6b62\uff09\n\n            \/* --- \u5b9a\u6570\u5b9a\u7fa9 (\u30b0\u30ea\u30c3\u30c9\u306e\u8272) --- *\/\n            const GRID_TATE = \"rgba(197, 48, 48, 0.5)\"; \/\/ \u8d64 (\u7e26\u3072\u3082)\n            const GRID_YOKO = \"rgba(30, 64, 175, 0.5)\"; \/\/ \u9752 (\u6a2a\u3072\u3082)\n            const GRID_AMI = \"rgba(22, 101, 52, 0.5)\";  \/\/ \u7dd1 (\u7de8\u307f\u3072\u3082)\n            const GRID_GRAY = \"rgba(100, 100, 100, 0.5)\"; \/\/ \u30b0\u30ec\u30fc (\u6298\u308a\u8fd4\u3057\u7de8\u307f\u3072\u3082\u65b9\u5411)\n\n            \/* --- \u5b9a\u6570\u5b9a\u7fa9 (\u6587\u5b57\u8272) --- *\/\n            const TEXT_TATE = \"#c53030\"; \/\/ \u8d64\n            const TEXT_YOKO = \"#1e40af\"; \/\/ \u9752\n            const TEXT_AMI = \"#166534\"; \/\/ \u7dd1\n            const TEXT_STD = \"#111\";    \/\/ \u9ed2\n\n            \/* ----- \u5c55\u958b\u56f3\u63cf\u753b\u95a2\u6570 ----- *\/\n            const drawPurakagoDiagram = (ctx, params) => {\n                const {\n                    w, d, h, margin, marginCm, cellSize,\n                    centerLabel, topLabel, bottomLabel, leftLabel, rightLabel,\n                    materialList, finishedSize, bandInfo\n                } = params;\n                const cs = cellSize;\n\n                \/\/ \u4e0a\u4e0b\u306e\u4f59\u767d\uff08\u30d8\u30c3\u30c0\u30fc\u30fb\u30d5\u30c3\u30bf\u30fc\u7528\uff09\n                const paddingTop = 60;\n                const paddingBottom = 150;\n\n                const totalW = (margin + h) * 2 + w;\n                const totalH = (margin + h) * 2 + d;\n                const width = totalW * cs;\n                const height = totalH * cs + paddingTop + paddingBottom;\n\n                const canvas = ctx.canvas;\n                canvas.width = width;\n                canvas.height = height;\n\n                ctx.clearRect(0, 0, width, height);\n\n                \/\/ \u767d\u80cc\u666f\u3067\u5857\u308a\u3064\u3076\u3057\uff08PDF\u4fdd\u5b58\u6642\u306b\u900f\u904e\u3057\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u305f\u3081\uff09\n                ctx.fillStyle = \"#ffffff\";\n                ctx.fillRect(0, 0, width, height);\n\n                const ox = (h + margin) * cs;\n                const oy = (h + margin) * cs + paddingTop;\n\n                \/\/ \u30b0\u30ea\u30c3\u30c9\u63cf\u753b\u95a2\u6570\n                const drawColoredGrid = (x, y, wCount, hCount, vColor, hColor) => {\n                    ctx.save();\n                    ctx.lineWidth = 1;\n                    \/\/ \u7e26\u7dda\n                    ctx.beginPath();\n                    ctx.strokeStyle = vColor;\n                    for (let i = 1; i < wCount; i++) {\n                        ctx.moveTo(x + i * cs, y);\n                        ctx.lineTo(x + i * cs, y + hCount * cs);\n                    }\n                    ctx.stroke();\n                    \/\/ \u6a2a\u7dda\n                    ctx.beginPath();\n                    ctx.strokeStyle = hColor;\n                    for (let j = 1; j < hCount; j++) {\n                        ctx.moveTo(x, y + j * cs);\n                        ctx.lineTo(x + wCount * cs, y + j * cs);\n                    }\n                    ctx.stroke();\n                    ctx.restore();\n                }\n\n                \/\/ \u30c6\u30ad\u30b9\u30c8\u63cf\u753b\u95a2\u6570\n                const drawTextLines = (x, y, wPx, hPx, labelData, isMainFace) => {\n                    ctx.textAlign = \"center\";\n                    ctx.textBaseline = \"middle\";\n\n                    if (isMainFace) {\n                        ctx.font = \"bold 14px system-ui, sans-serif\";\n                    } else {\n                        ctx.font = \"11px system-ui, sans-serif\";\n                    }\n\n                    ctx.lineWidth = 4;\n                    ctx.strokeStyle = \"rgba(255, 255, 255, 1.0)\";\n                    ctx.lineJoin = \"round\";\n\n                    const lineHeight = isMainFace ? 18 : 14;\n                    const lines = Array.isArray(labelData) ? labelData : [labelData];\n                    const totalTextHeight = lines.length * lineHeight;\n                    const startY = y + (hPx - totalTextHeight) \/ 2 + lineHeight \/ 2;\n\n                    lines.forEach((item, i) => {\n                        let text = \"\";\n                        let color = \"#111\";\n                        if (typeof item === \"string\") {\n                            text = item;\n                        } else if (typeof item === \"object\") {\n                            text = item.text;\n                            if (item.color) color = item.color;\n                        }\n                        const tx = x + wPx \/ 2;\n                        const ty = startY + i * lineHeight;\n                        ctx.strokeText(text, tx, ty);\n                        ctx.fillStyle = color;\n                        ctx.fillText(text, tx, ty);\n                    });\n                }\n\n                \/\/ \u77e9\u5f62\u30d6\u30ed\u30c3\u30af\u63cf\u753b\n                const drawRectBlock = (x, y, wCount, hCount, labelData, isMainFace, vGridColor, hGridColor) => {\n                    const wPx = wCount * cs;\n                    const hPx = hCount * cs;\n                    drawColoredGrid(x, y, wCount, hCount, vGridColor, hGridColor);\n                    ctx.save();\n                    if (isMainFace) {\n                        ctx.lineWidth = 2.5;\n                        ctx.strokeStyle = \"#000\";\n                    } else {\n                        ctx.lineWidth = 1;\n                        ctx.strokeStyle = \"#333\";\n                    }\n                    ctx.strokeRect(x, y, wPx, hPx);\n                    ctx.restore();\n                    drawTextLines(x, y, wPx, hPx, labelData, isMainFace);\n                }\n\n                \/\/ 1. \u5e95\u9762\n                const bottomX = ox, bottomY = oy;\n                const bottomW = w * cs;\n                const bottomH = d * cs;\n                ctx.fillStyle = \"rgba(0,0,0,0.03)\";\n                ctx.fillRect(bottomX, bottomY, bottomW, bottomH);\n                drawRectBlock(bottomX, bottomY, w, d, centerLabel, true, GRID_TATE, GRID_YOKO);\n\n                const marginLabelTB = `\u7e01\u306e\u6298\u308a\u8fd4\u3057\u52a0\u7b97 ${marginCm}cm(${margin}\u30b3\u30de)`;\n                const marginLabelLR = [`\u7e01\u306e\u6298\u308a\u8fd4\u3057\u52a0\u7b97`, `${marginCm}cm(${margin}\u30b3\u30de)`];\n\n                \/\/ 2. \u5074\u9762 (Main)\n                drawRectBlock(ox, oy - h * cs, w, h, topLabel, true, GRID_TATE, GRID_AMI);    \/\/ \u4e0a\n                drawRectBlock(ox, oy + d * cs, w, h, bottomLabel, true, GRID_TATE, GRID_AMI); \/\/ \u4e0b\n                drawRectBlock(ox - h * cs, oy, h, d, leftLabel, true, GRID_AMI, GRID_YOKO);   \/\/ \u5de6\n                drawRectBlock(ox + w * cs, oy, h, d, rightLabel, true, GRID_AMI, GRID_YOKO);  \/\/ \u53f3\n\n                \/\/ 3. \u6298\u4ee3 (Tips) - \u7de8\u307f\u3072\u3082\u65b9\u5411\u306f\u30b0\u30ec\u30fc\n                drawRectBlock(ox, oy - (h + margin) * cs, w, margin, marginLabelTB, false, GRID_TATE, GRID_GRAY);\n                drawRectBlock(ox, oy + (d + h) * cs, w, margin, marginLabelTB, false, GRID_TATE, GRID_GRAY);\n                drawRectBlock(ox - (h + margin) * cs, oy, margin, d, marginLabelLR, false, GRID_GRAY, GRID_YOKO);\n                drawRectBlock(ox + (w + h) * cs, oy, margin, d, marginLabelLR, false, GRID_GRAY, GRID_YOKO);\n\n                \/\/ --- \u30d8\u30c3\u30c0\u30fc\u9818\u57df (\u4e0a\u90e8) ---\n                ctx.textAlign = \"center\";\n                ctx.textBaseline = \"top\";\n\n                \/\/ 1. \u4ed5\u4e0a\u304c\u308a\u30b5\u30a4\u30ba (\u4e2d\u592e\u4e0a)\n                if (finishedSize) {\n                    ctx.font = \"bold 18px system-ui, sans-serif\";\n                    ctx.fillStyle = TEXT_STD;\n                    ctx.fillText(finishedSize, width \/ 2, 15);\n                }\n\n                \/\/ 2. \u30d0\u30f3\u30c9\u60c5\u5831 (\u305d\u306e\u4e0b)\n                if (bandInfo) {\n                    ctx.font = \"14px system-ui, sans-serif\";\n                    ctx.fillStyle = \"#555\";\n                    ctx.fillText(bandInfo, width \/ 2, 40);\n                }\n\n                \/\/ --- \u30d5\u30c3\u30bf\u30fc\u9818\u57df (\u4e0b\u90e8) ---\n\n                \/\/ 3. \u30ab\u30c3\u30c8\u30ea\u30b9\u30c8 (\u5de6\u4e0b)\n                if (materialList) {\n                    ctx.textAlign = \"left\";\n                    ctx.textBaseline = \"top\";\n\n                    const footerY = height - paddingBottom + 10;\n                    let listX = 15;\n                    let listY = footerY;\n\n                    \/\/ \u30bf\u30a4\u30c8\u30eb\n                    ctx.font = \"bold 14px system-ui, sans-serif\";\n                    ctx.fillStyle = \"#333\";\n                    ctx.fillText(\"\u3010\u30ab\u30c3\u30c8\u30ea\u30b9\u30c8\u3011\", listX, listY);\n                    listY += 24;\n\n                    \/\/ \u30ea\u30b9\u30c8\u5185\u5bb9\n                    const lineHeight = 20;\n                    ctx.font = \"13px system-ui, sans-serif\";\n\n                    materialList.forEach(item => {\n                        \/\/ \u30e9\u30d9\u30eb\u8272\u306e\u4e38\u5370\u306a\u3069\u3092\u3064\u3051\u3066\u3082\u826f\u3044\u304c\u3001\u3053\u3053\u3067\u306f\u6587\u5b57\u8272\u3067\u533a\u5225\n                        ctx.fillStyle = item.color || \"#000\";\n                        ctx.fillText(item.text, listX + 10, listY);\n                        listY += lineHeight;\n                    });\n                }\n\n                \/\/ 4. \u30d5\u30c3\u30bf\u30fc\u60c5\u5831 (\u53f3\u4e0b)\n                {\n                    ctx.textAlign = \"right\";\n                    ctx.textBaseline = \"bottom\";\n                    const footerRightX = width - 15;\n                    const footerBottomY = height - 15;\n\n                    \/\/ URL\n                    ctx.font = \"12px sans-serif\";\n                    ctx.fillStyle = \"#888\";\n                    ctx.fillText(\"https:\/\/labo.com\/CraftBand\/\", footerRightX, footerBottomY);\n\n                    \/\/ \u65e5\u4ed8\n                    const now = new Date();\n                    const pad = (n) => String(n).padStart(2, '0');\n                    const dateStr = `${now.getFullYear()}\/${pad(now.getMonth() + 1)}\/${pad(now.getDate())} ${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}`;\n\n                    ctx.fillText(dateStr, footerRightX, footerBottomY - 16);\n                }\n            }\n\n            \/* ----- DOM\u8981\u7d20 ----- *\/\n            \/\/ DOM\u8981\u7d20\u306f\u30b3\u30f3\u30c6\u30ca\u5185\u304b\u3089\u53d6\u5f97\u3059\u308b\u65b9\u304c\u5b89\u5168\u3067\u3059\u304c\u3001ID\u304c\u30e6\u30cb\u30fc\u30af\u3067\u3042\u308c\u3070getElementById\u3067\u53ef\n            const container = document.getElementById(\"purakago-calc-app\");\n            const vertical = container.querySelector(\"#vertical\");\n            const horizontal = container.querySelector(\"#horizontal\");\n            const height = container.querySelector(\"#height\");\n            const bandWidthBase = container.querySelector(\"#bandWidthBase\");\n            const bandGap = container.querySelector(\"#bandGap\");\n            const calcButton = container.querySelector(\"#calcButton\");\n            const pdfButton = container.querySelector(\"#pdfButton\");\n            const summary = container.querySelector(\"#summary\");\n            const bottomLayout = container.querySelector(\"#bottomLayout\");\n            const bottomSizeDisplay = container.querySelector(\"#bottomSizeDisplay\");\n            const heightSizeDisplay = container.querySelector(\"#heightSizeDisplay\");\n            const totalUprightsDisplay = container.querySelector(\"#totalUprightsDisplay\");\n            const edgeCountEl = container.querySelector(\"#edgeCount\");\n            const foldAdditionEl = container.querySelector(\"#foldAddition\");\n            const foldKomaEl = container.querySelector(\"#foldKoma\");\n            const cordAdditionEl = container.querySelector(\"#cordAddition\");\n            const cordKomaEl = container.querySelector(\"#cordKoma\");\n\n            \/* ----- \u30b9\u30c6\u30c3\u30d1\u30fc\u5236\u5fa1 ----- *\/\n            const setupStrictOddStepper = (input) => {\n                let prevValue = Number(input.value) || 0;\n                input.addEventListener(\"keydown\", (e) => {\n                    if (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") {\n                        e.preventDefault();\n                        let cur = Math.floor(Number(input.value) || 0);\n                        if (cur % 2 === 0) cur = (e.key === \"ArrowUp\") ? cur + 1 : cur - 1;\n                        else cur = (e.key === \"ArrowUp\") ? cur + 2 : cur - 2;\n                        if (cur < 1) cur = 1;\n                        input.value = cur;\n                        prevValue = cur;\n                        input.dispatchEvent(new Event('input'));\n                    }\n                });\n                input.addEventListener(\"input\", () => {\n                    const cur = Number(input.value);\n                    if (isNaN(cur)) return;\n                    const diff = cur - prevValue;\n                    if (Math.abs(diff) === 1 && cur % 2 === 0) {\n                        const nextVal = cur + (diff > 0 ? 1 : -1);\n                        input.value = Math.max(1, nextVal);\n                    }\n                    prevValue = Number(input.value);\n                    calculateAll();\n                });\n            }\n            setupStrictOddStepper(vertical);\n            setupStrictOddStepper(horizontal);\n\n            const getBandWidthMm = () => {\n                return (Number(bandWidthBase.value) || 0) + (Number(bandGap.value) || 0);\n            };\n\n            const syncCmAndKoma = (cmInput, komaInput) => {\n                cmInput.addEventListener(\"input\", () => {\n                    const bwCm = getBandWidthMm() \/ 10;\n                    const cmVal = parseFloat(cmInput.value);\n                    if (!isNaN(cmVal) && bwCm > 0) {\n                        const koma = cmVal \/ bwCm;\n                        if (document.activeElement !== komaInput) komaInput.value = parseFloat(koma.toFixed(2));\n                    }\n                    calculateAll();\n                });\n                komaInput.addEventListener(\"input\", () => {\n                    const bwCm = getBandWidthMm() \/ 10;\n                    const komaVal = parseFloat(komaInput.value);\n                    if (!isNaN(komaVal)) {\n                        const cmVal = komaVal * bwCm;\n                        if (document.activeElement !== cmInput) cmInput.value = parseFloat(cmVal.toFixed(1));\n                    }\n                    calculateAll();\n                });\n            }\n            syncCmAndKoma(foldAdditionEl, foldKomaEl);\n            syncCmAndKoma(cordAdditionEl, cordKomaEl);\n\n            const updateKomaFromBandWidth = () => {\n                const bwCm = getBandWidthMm() \/ 10;\n                if (bwCm <= 0) return;\n\n                \/\/ \u5e45\u5909\u66f4\u6642\u306f\u73fe\u5728\u306e\u30b3\u30de\u6570\u3092\u7dad\u6301\u3057\u3066cm\u3092\u518d\u8a08\u7b97\n                const fKoma = parseFloat(foldKomaEl.value) || 0;\n                const cKoma = parseFloat(cordKomaEl.value) || 0;\n\n                foldAdditionEl.value = parseFloat((fKoma * bwCm).toFixed(1));\n                cordAdditionEl.value = parseFloat((cKoma * bwCm).toFixed(1));\n\n                calculateAll();\n            }\n\n            bandWidthBase.addEventListener(\"input\", updateKomaFromBandWidth);\n            bandGap.addEventListener(\"input\", updateKomaFromBandWidth);\n\n            const initializeValues = () => {\n                \/\/ \u30b3\u30de\u6570\u521d\u671f\u5024\n                foldKomaEl.value = 5;\n                cordKomaEl.value = 7;\n\n                updateKomaFromBandWidth();\n\n                \/\/ \u521d\u671f\u30b5\u30a4\u30ba\u3092B5\u6a2a\u306b\u8a2d\u5b9a\n                applySizePreset(257, 182);\n            }\n\n            \/* ----- \u30e1\u30a4\u30f3\u8a08\u7b97\u95a2\u6570 ----- *\/\n            const calculateAll = () => {\n                const v = Number(vertical.value || 0);   \/\/ D\n                const h = Number(horizontal.value || 0); \/\/ W\n                const he = Number(height.value || 0);    \/\/ H\n                const bwMm = getBandWidthMm();\n                const edgeCount = Number(edgeCountEl?.value ?? 2);\n\n                const cordAdd = Number(cordAdditionEl.value || 0);\n                const foldAdd = Number(foldAdditionEl.value || 0);\n                const bw = bwMm \/ 10;\n\n                \/\/ \u30b5\u30a4\u30ba\u8868\u793a\n                const widthCm = (h * bw).toFixed(1);\n                const depthCm = (v * bw).toFixed(1);\n                const heightCm = (he * bw).toFixed(1);\n\n                if (h > 0 && v > 0) {\n                    bottomSizeDisplay.textContent = `\u5e95\u9762\u30b5\u30a4\u30ba: \u6a2a\u5e45 ${widthCm} cm \u00d7 \u5965\u884c ${depthCm} cm`;\n                } else {\n                    bottomSizeDisplay.textContent = `\u5e95\u9762\u30b5\u30a4\u30ba: - cm \u00d7 - cm`;\n                }\n                heightSizeDisplay.textContent = (he > 0) ? `\u9ad8\u3055: ${heightCm} cm` : `\u9ad8\u3055: - cm`;\n\n                if (h > 0 && v > 0) {\n                    const totalUprights = (h + v) * 2;\n                    totalUprightsDisplay.textContent = `\u5168\u5782\u76f4\u3072\u3082\u6570: ${totalUprights} \u672c`;\n                } else {\n                    totalUprightsDisplay.textContent = `\u5168\u5782\u76f4\u3072\u3082\u6570: - \u672c`;\n                }\n\n                \/\/ \u5e95\u9762\u30de\u30b9\u76ee\n                bottomLayout.innerHTML = \"\";\n                if (v > 0 && h > 0) {\n                    bottomLayout.style.gridTemplateRows = `repeat(${v}, 20px)`;\n                    bottomLayout.style.gridTemplateColumns = `repeat(${h}, 20px)`;\n                    for (let row = 0; row < v; row++) {\n                        for (let col = 0; col < h; col++) {\n                            const cell = document.createElement(\"div\");\n                            cell.className = \"layout-cell\";\n                            const isVerticalBand = row % 2 === 0;\n                            const isOver = (row + col) % 2 === 0;\n                            if (isVerticalBand) cell.style.backgroundColor = isOver ? \"#fca5a5\" : \"#fecaca\";\n                            else cell.style.backgroundColor = isOver ? \"#93c5fd\" : \"#bfdbfe\";\n                            bottomLayout.appendChild(cell);\n                        }\n                    }\n                }\n\n                \/\/ \u8a08\u7b97\n                const tateLength = foldAdd * 2 + (he + v + he) * bw;\n                const tateCount = h;\n                const tateFormula = `(${foldAdd}\u00d72 + (${he}+${v}+${he})\u00d7${bw})`;\n                const tateWarn = (tateCount > 0 && tateCount % 2 === 0)\n                    ? `<span class=\"warning-text\">\u203b\u5947\u6570\u63a8\u5968<\/span>` : \"\";\n\n                const yokoLength = foldAdd * 2 + (he + h + he) * bw;\n                const yokoCount = v;\n                const yokoFormula = `(${foldAdd}\u00d72 + (${he}+${h}+${he})\u00d7${bw})`;\n                const yokoWarn = (yokoCount > 0 && yokoCount % 2 === 0)\n                    ? `<span class=\"warning-text\">\u203b\u5947\u6570\u63a8\u5968<\/span>` : \"\";\n\n                const loopLen = (h + v) * 2 * bw;\n                const amiLength = loopLen + cordAdd;\n                const amiCount = he + edgeCount;\n                const amiFormula = `((${h}+${v})\u00d72\u00d7${bw} + ${cordAdd})`;\n\n                const totalCm = (tateLength * tateCount) + (yokoLength * yokoCount) + (amiLength * amiCount);\n                const totalM = (totalCm \/ 100).toFixed(2);\n\n                \/\/ \u8868\u793a\n                summary.innerHTML =\n                    `<div><strong>\u6a2a\u3072\u3082\uff08\u6a2a\u5e45\u65b9\u5411\uff09<\/strong> \u9577\u3055 ${yokoLength.toFixed(1)} cm \u00d7 ${yokoCount} \u672c <span class=\"formula-text\">${yokoFormula}<\/span>${yokoWarn}<\/div>` +\n                    `<div><strong>\u7e26\u3072\u3082\uff08\u5965\u884c\u65b9\u5411\uff09<\/strong> \u9577\u3055 ${tateLength.toFixed(1)} cm \u00d7 ${tateCount} \u672c <span class=\"formula-text\">${tateFormula}<\/span>${tateWarn}<\/div>` +\n                    `<div><strong>\u7de8\u307f\u3072\u3082\uff08\u9ad8\u3055\u65b9\u5411\uff09<\/strong> \u9577\u3055 ${amiLength.toFixed(1)} cm \u00d7 ${amiCount} \u672c <span class=\"formula-text\">${amiFormula}<\/span><\/div>` +\n                    `<div class=\"totalLengthArea\" style=\"margin-top: 12px; padding-top: 8px; border-top: 2px dashed #d1d5db; font-size: 1.1em; font-weight: bold; color: #b91c1c;\">\u5408\u8a08\u5fc5\u8981\u9577: ${totalM} m<\/div>`;\n            }\n\n            [height, edgeCountEl].forEach(el => el.addEventListener(\"input\", calculateAll));\n\n            \/\/ \u5c55\u958b\u56f3\u66f4\u65b0\n            calcButton.addEventListener(\"click\", () => {\n                const v = Number(vertical.value || 0);\n                const h = Number(horizontal.value || 0);\n                const he = Number(height.value || 0);\n\n                const canvas = container.querySelector(\"#purakagoCanvas\");\n                if (!canvas || !canvas.getContext) return;\n                const ctx = canvas.getContext(\"2d\");\n\n                const missing = [];\n                if (!v) missing.push(\"\u7e26\u306b\u4e26\u3076\u672c\u6570\");\n                if (!h) missing.push(\"\u6a2a\u306b\u4e26\u3076\u672c\u6570\");\n                if (!he) missing.push(\"\u9ad8\u3055\u306e\u672c\u6570\");\n\n                if (missing.length > 0) {\n                    canvas.width = 400;\n                    canvas.height = 200;\n                    ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n                    ctx.textAlign = \"center\";\n                    ctx.textBaseline = \"middle\";\n                    ctx.fillStyle = \"#cc0000\";\n                    ctx.font = \"bold 16px system-ui, sans-serif\";\n                    const msg = missing.join(\"\u3001\") + \"\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\";\n                    ctx.fillText(msg, canvas.width \/ 2, canvas.height \/ 2);\n\n                    summary.innerHTML = `<div style=\"color:#d32f2f; font-weight:bold; padding:1em;\">${msg}<\/div>`;\n\n                    pdfButton.style.display = \"none\";\n                    return;\n                }\n\n                \/\/ \u63cf\u753b\u30d1\u30e9\u30e1\u30fc\u30bf\n                const marginKoma = parseFloat(foldKomaEl.value) || 6;\n                const marginCm = parseFloat(foldAdditionEl.value) || 0;\n                const bw = getBandWidthMm() \/ 10;\n                const edgeCount = Number(edgeCountEl?.value ?? 2);\n\n                const cordAdd = Number(cordAdditionEl.value || 0);\n                const foldAdd = Number(foldAdditionEl.value || 0);\n\n                const tateLength = foldAdd * 2 + (he + v + he) * bw;\n                const tateCount = h;\n\n                const yokoLength = foldAdd * 2 + (he + h + he) * bw;\n                const yokoCount = v;\n\n                const loopLen = (h + v) * 2 * bw;\n                const amiLength = loopLen + cordAdd;\n                const amiCount = he + edgeCount;\n\n                const widthCm = (h * bw).toFixed(1);\n                const depthCm = (v * bw).toFixed(1);\n                const heightCm = (he * bw).toFixed(1);\n\n                const totalCm = (tateLength * tateCount) + (yokoLength * yokoCount) + (amiLength * amiCount);\n                const totalM = (totalCm \/ 100).toFixed(2);\n\n                \/\/ \u30e9\u30d9\u30eb\u4f5c\u6210\n                const centerLabelSplit = [\n                    { text: `\u6a2a\u3072\u3082 ${yokoCount} \u672c`, color: TEXT_YOKO },\n                    { text: `\u7e26\u3072\u3082 ${tateCount} \u672c`, color: TEXT_TATE },\n                    { text: `\u6a2a\u5e45${widthCm}cm\u00d7\u5965\u884c${depthCm}cm`, color: TEXT_STD }\n                ];\n\n                const labelTB = [\n                    { text: `\u7e26\u3072\u3082 ${tateCount}\u672c\u00d7\u9577\u3055 ${tateLength.toFixed(1)}cm`, color: TEXT_TATE },\n                    { text: `\u7de8\u307f\u3072\u3082 ${he}\u6bb5(${amiCount}\u672c)\u00d7\u9577\u3055 ${amiLength.toFixed(1)}cm`, color: TEXT_AMI },\n                    { text: `\u9ad8\u3055 ${heightCm}cm`, color: TEXT_STD }\n                ];\n\n                const labelLR = [\n                    { text: `\u6a2a\u3072\u3082 ${yokoCount}\u672c\u00d7\u9577\u3055 ${yokoLength.toFixed(1)}cm`, color: TEXT_YOKO },\n                    { text: `\u7de8\u307f\u3072\u3082 ${he}\u6bb5(${amiCount}\u672c)\u00d7\u9577\u3055 ${amiLength.toFixed(1)}cm`, color: TEXT_AMI },\n                    { text: `\u9ad8\u3055 ${heightCm}cm`, color: TEXT_STD }\n                ];\n\n                const materialListData = [\n                    { text: `\u6a2a\u3072\u3082: ${yokoLength.toFixed(1)}cm \u00d7 ${yokoCount}\u672c`, color: TEXT_YOKO },\n                    { text: `\u7e26\u3072\u3082: ${tateLength.toFixed(1)}cm \u00d7 ${tateCount}\u672c`, color: TEXT_TATE },\n                    { text: `\u7de8\u307f\u3072\u3082: ${amiLength.toFixed(1)}cm \u00d7 ${amiCount}\u672c`, color: TEXT_AMI },\n                    { text: `\u5408\u8a08: ${totalM}m`, color: TEXT_STD }\n                ];\n\n                const finishedSizeText = `\u6a2a\u5e45${widthCm}cm \u00d7 \u5965\u884c${depthCm}cm \u00d7 \u9ad8\u3055${heightCm}cm`;\n                const bandInfoText = `\u30d0\u30f3\u30c9\u5e45: ${bandWidthBase.value}mm + \u3059\u304d\u9593: ${bandGap.value}mm`;\n\n                drawPurakagoDiagram(ctx, {\n                    w: h,\n                    d: v,\n                    h: he,\n                    margin: marginKoma,\n                    marginCm: marginCm,\n                    cellSize: 15,\n                    centerLabel: centerLabelSplit,\n                    topLabel: labelTB,\n                    bottomLabel: labelTB,\n                    leftLabel: labelLR,\n                    rightLabel: labelLR,\n                    materialList: materialListData,\n                    finishedSize: finishedSizeText,\n                    bandInfo: bandInfoText\n                });\n\n                pdfButton.style.display = \"inline-block\";\n            });\n\n            \/* ----- PDF\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6a5f\u80fd ----- *\/\n            pdfButton.addEventListener(\"click\", () => {\n                const canvas = container.querySelector(\"#purakagoCanvas\");\n                if (!canvas || canvas.width === 0) {\n                    alert(\"\u5c55\u958b\u56f3\u304c\u63cf\u753b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\");\n                    return;\n                }\n\n                if (!window.jspdf) {\n                    alert(\"PDF\u751f\u6210\u30e9\u30a4\u30d6\u30e9\u30ea(jspdf)\u304c\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002\\n\u3057\u3070\u3089\u304f\u5f85\u3063\u3066\u304b\u3089\u518d\u8a66\u884c\u3059\u308b\u304b\u3001\u30da\u30fc\u30b8\u3092\u518d\u8aad\u307f\u8fbc\u307f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\");\n                    return;\n                }\n\n                try {\n                    const { jsPDF } = window.jspdf;\n                    const pdf = new jsPDF({\n                        orientation: 'landscape',\n                        unit: 'mm',\n                        format: 'a4'\n                    });\n\n                    const imgData = canvas.toDataURL(\"image\/png\");\n                    const pdfWidth = 297;\n                    const pdfHeight = 210;\n                    const margin = 10;\n\n                    const imgProps = pdf.getImageProperties(imgData);\n                    const imgRatio = imgProps.width \/ imgProps.height;\n\n                    const printWidth = pdfWidth - margin * 2;\n                    const printHeight = pdfHeight - margin * 2;\n\n                    let finalW = printWidth;\n                    let finalH = printWidth \/ imgRatio;\n\n                    if (finalH > printHeight) {\n                        finalH = printHeight;\n                        finalW = printHeight * imgRatio;\n                    }\n\n                    const x = (pdfWidth - finalW) \/ 2;\n                    const y = (pdfHeight - finalH) \/ 2;\n\n                    pdf.addImage(imgData, 'PNG', x, y, finalW, finalH);\n                    pdf.save(\"purakago-diagram.pdf\");\n                } catch (e) {\n                    console.error(e);\n                    alert(\"PDF\u751f\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: \" + e.message);\n                }\n            });\n\n            \/\/ \u30d7\u30ea\u30bb\u30c3\u30c8\n            const applySizePreset = (widthMm, heightMm) => {\n                const toOdd = (n) => {\n                    const r = Math.max(0, Math.round(n));\n                    return (r % 2 === 1) ? r : (n <= r ? Math.max(1, r - 1) : r + 1);\n                }\n                const bw = getBandWidthMm();\n                const depthMm = widthMm \/ 3;\n                horizontal.value = String(toOdd(widthMm \/ bw));\n                height.value = String(Math.max(0, Math.round(heightMm \/ bw)));\n                vertical.value = String(toOdd(depthMm \/ bw));\n                calculateAll();\n            }\n            container.querySelector(\"#btnB5\").addEventListener(\"click\", () => applySizePreset(257, 182));\n            container.querySelector(\"#btnA4\").addEventListener(\"click\", () => applySizePreset(297, 210));\n            container.querySelector(\"#btnB4\").addEventListener(\"click\", () => applySizePreset(364, 257));\n\n            \/\/ \u521d\u56de\u5b9f\u884c\n            initializeValues();\n        } \/\/ \u30d6\u30ed\u30c3\u30af\u30b9\u30b3\u30fc\u30d7\u7d42\u4e86\n    <\/script>\n<\/div>\n\n\n<p><!-- \/wp:html --><\/p>\n<p><!-- wp:paragraph {\"align\":\"right\"} --><\/p>\n<p>\u30b5\u30a4\u30ba\u8a08\u7b97\u3060\u3051\u306e\u7c21\u6613\u6a5f\u80fd\u3067\u3059\u3002\u30d0\u30f3\u30c9\u8272\u3084\u5e45\u306e\u500b\u5225\u8a2d\u5b9a\u30fb\u7de8\u307f\u76ee\u30fb\u30b9\u30c6\u30c3\u30c1\u306a\u3069\u3092\u7d44\u307f\u5408\u308f\u305b\u30013D\u3067\u78ba\u8a8d\u3057\u306a\u304c\u3089\u8a2d\u8a08\u3092\u3059\u308b\u306b\u306f<a href=\"https:\/\/labo.com\/CraftBand\/craftbandsquare\/\">CraftBandSquare<\/a> \u3092\u304a\u4f7f\u3044\u304f\u3060\u3055\u3044\u3002<\/p>\n<p class=\"has-text-align-right\">2026\/1\/26 ver1<br \/>2026\/2\/10 ver2<br \/>2026\/2\/15 ver3<br \/>2026\/2\/20 ver4<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph --><\/p>\n<p><!-- \/wp:paragraph --><\/p>","protected":false},"excerpt":{"rendered":"<p>\u30d0\u30f3\u30c9\u5e45(mm) + \u3059\u304d\u9593(mm) + B5\u6a2a A4\u6a2a B4\u6a2a \u7e26\u306b\u4e26\u3076\u672c\u6570 \u672c \u6a2a\u306b\u4e26\u3076\u672c\u6570 \u672c \u9ad8\u3055\u306e\u672c\u6570 \u6bb5 \u7e01\u306b\u91cd\u306d\u308b \u672c \u7e01\u306e\u6298\u308a\u8fd4\u3057\u52a0\u7b97 cm \/ \u30b3\u30de \u5074\u9762\u306e\u7de8\u307f\u3072\u3082\u52a0\u7b97 cm \/ \u30b3\u30de \u5e95\u9762\u30b5\u30a4\u30ba: &#038; &hellip; <a href=\"https:\/\/labo.com\/CraftBand\/sharing\/square-calc\/\" class=\"more-link\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"screen-reader-text\">\u56db\u89d2\u304b\u3054\u306e\u30b5\u30a4\u30ba\u8a08\u7b97<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":688,"menu_order":100,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"class_list":["post-10581","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/labo.com\/CraftBand\/wp-json\/wp\/v2\/pages\/10581"}],"collection":[{"href":"https:\/\/labo.com\/CraftBand\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/labo.com\/CraftBand\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/labo.com\/CraftBand\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/labo.com\/CraftBand\/wp-json\/wp\/v2\/comments?post=10581"}],"version-history":[{"count":14,"href":"https:\/\/labo.com\/CraftBand\/wp-json\/wp\/v2\/pages\/10581\/revisions"}],"predecessor-version":[{"id":11550,"href":"https:\/\/labo.com\/CraftBand\/wp-json\/wp\/v2\/pages\/10581\/revisions\/11550"}],"up":[{"embeddable":true,"href":"https:\/\/labo.com\/CraftBand\/wp-json\/wp\/v2\/pages\/688"}],"wp:attachment":[{"href":"https:\/\/labo.com\/CraftBand\/wp-json\/wp\/v2\/media?parent=10581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}