PageSourceSearch

https://www.nefront.com/_next/static/chunks/3612-00b824e9ee1e22ea.js

js nefront.com collected 2026-10-08 03:29:24 UTC 59,783 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3612],{1506:function(n,e,r){r.d(e,{Z:function(){return s}});var o=r(5893),a=r(7672),p=r(9008),t=r.n(p);r(7294);var i=r(917);let f=()=>(0,o.jsx)(i.xB,{styles:"\n      .grid-item-thumbnail {\n        border-radius: 50%;\n        width:  180px;\n        height: 180px;\n        margin:auto;\n        display:flex;\n      }\n    "}),d={hidden:{opacity:0,x:0,y:20},enter:{opacity:1,x:0,y:0},exit:{opacity:0,x:-0,y:20}};var s=n=>{let{children:e,title:r}=n,p="".concat(r," - Nefront Inc.");return(0,o.jsx)(a.E.article,{initial:"hidden",animate:"enter",exit:"exit",variants:d,transition:{duration:.4,type:"easeInOut"},style:{position:"relative"},children:(0,o.jsxs)(o.Fragment,{children:[r&&(0,o.jsxs)(t(),{children:[(0,o.jsx)("title",{children:p}),(0,o.jsx)("meta",{name:"twitter:title",content:p}),(0,o.jsx)("meta",{property:"og:title",content:p})]}),e,(0,o.jsx)(f,{})]})})}},5836:function(n,e,r){r.d(e,{Cc:function(){return t},FA:function(){return i},KP:function(){return p},cs:function(){return a}});var o=r(8996);let a="https://forms.gle/HJXsrsk5myVrmEqC6",p={junkaiGo:"/junkai-go/",filefront:"/filefront/",spatialCloud:"/spatial-cloud/"},t=n=>({junkaiGo:(0,o.rN)(n,p.junkaiGo),filefront:(0,o.rN)(n,p.filefront),spatialCloud:(0,o.rN)(n,p.spatialCloud)}),i=n=>({junkaiGo:{terms:(0,o.rN)(n,"/junkai-go/terms/"),privacy:(0,o.rN)(n,"/junkai-go/privacy-policy/")},filefront:{terms:(0,o.rN)(n,"/filefront/terms/"),privacy:(0,o.rN)(n,"/filefront/privacy/")},spatialCloud:{terms:(0,o.rN)(n,"/spatial-cloud/terms/"),privacy:(0,o.rN)(n,"/spatial-cloud/privacy-policy/")}})},4344:function(n,e,r){var o=r(2729),a=r(5893);r(7294);var p=r(917);function t(){let n=(0,o._)(["\n    .nfp {\n        --blue: #3054d6;\n        --blue-deep: #24409f;\n        --blue-pale: #eaeffb;\n        --blue-wash: #f3f6fd;\n        --ink: #16202e;\n        --ink-soft: #4b5a6e;\n        --ink-faint: #8391a4;\n        --paper: #ffffff;\n        --ground: #f5f8fc;\n        --grid: #e2e8f2;\n        --axis: #c3cfe2;\n        --red: #d6453a;\n        --amber-raw: #e0a521;\n        --sh-1: 0 1px 2px rgba(22, 32, 46, 0.05), 0 4px 14px rgba(22, 32, 46, 0.05);\n        --sh-2: 0 2px 4px rgba(22, 32, 46, 0.06), 0 14px 34px rgba(22, 32, 46, 0.1);\n        --sh-blue: 0 8px 26px rgba(48, 84, 214, 0.28);\n        --ease: cubic-bezier(0.22, 0.8, 0.28, 1);\n\n        margin-inline: calc(-1 * var(--chakra-space-4, 1rem));\n        background: var(--paper);\n        color: var(--ink);\n        font-size: 15px;\n        line-height: 1.9;\n        overflow: clip;\n        text-align: left;\n\n        /*\n         * 日本語の折り返し。製品ページ全体(見出しも本文も)に効かせる。\n         * 既定のままだと語や熟語の途中で折れる(実際に「照合し/て」「併/用します」が出た)。\n         * keep-all にすると句読点でだけ折れる。\n         * ただし keep-all だけだと英数字の長い連なり(製品名・AD-11 のような符号・URL)が\n         * 折れずに横へはみ出すので、overflow-wrap: anywhere を必ず併記する。\n         * text-wrap: balance はここには当てない。行長を揃えるために不自然な位置で折るため、\n         * 見出しだけ・768px 以上だけに限定している(下の h1/h2/h3 を参照)。\n         */\n        word-break: keep-all;\n        overflow-wrap: anywhere;\n    }\n    /*\n     * overflow-wrap を子孫にも「直接」当て直す。継承だと効かないため必要。\n     * Chakra の CSS リセットが * / *::before / *::after に word-wrap: break-word を\n     * 出しているので、.nfp から継承した anywhere は全ての子孫で break-word に上書きされる。\n     * 両者は改行位置こそ同じだが、min-content 幅の計算が違う:\n     *   - anywhere   … どこでも折れる前提で計算するので min-content は 1 文字分\n     *   - break-word … 折れない前提で計算するので min-content は「句読点までの一続き」\n     * .nfp は word-break: keep-all なので、break-word のままだと日本語の一文が\n     * まるごと min-content になる。grid の 1fr は minmax(auto, 1fr)、つまり下限が\n     * min-content なので、トラックが均等にならずグリッドが親からはみ出す。\n     * 実測(1280px の巡回GO・修正前)
1:\n     *   .flow4  repeat(4, 1fr) -> 237.5 / 287.5 / 390.7 / 298.8px = 計 1268px(親 1064px)\n     *           STEP 4 のカードが x=1376 まで出て、.nfp の overflow: clip で切れていた\n     *   .lifecycle 1fr 1fr 1fr -> 433.5 / 333.5 / 433.5px = 計 1241px(親 1064px)\n     * この 1 行で 1024 / 1280 / 1440px でのはみ出しは 0 件になる(比較表の\n     * min-width: 780px による .tblscroll 内の横スクロールは仕様どおり残る)。\n     */\n    .nfp * {\n        box-sizing: border-box;\n        overflow-wrap: anywhere;\n    }\n    /*\n     * ただし狭い画面では keep-all を本文に効かせない(style.css の .nf-top と同じ扱い)。\n     * keep-all は句読点でしか折らないので、1行に入る文字数が少ないスマホでは節が\n     * まるごと次の行へ送られ、行末に大きな空きが並ぶ(実測 390px: 空間クラウドの\n     * VISION 本文が「スマートグラスのように常時身につけられる」で切れて、右が大きく\n     * 空いていた)。auto-phrase は文節で折るので日本語として自然に詰まる。\n     * 未対応ã
1®ãƒ–ラウザでは宣言ごと無効になり keep-all を継承してしまうので、\n     * 直前に normal を書いてフォールバックさせる(対応していれば後勝ち)。\n     * 見出しは短くて keep-all でも破綻しないうえ、熟語が割れると目立つのでそのまま。\n     */\n    @media (max-width: 700px) {\n        .nfp p,\n        .nfp li,\n        .nfp dd,\n        .nfp td {\n            word-break: normal;\n            word-break: auto-phrase;\n        }\n    }\n    /*\n     * 見出し。word-break / overflow-wrap は .nfp から継承する。\n     * text-wrap: balance は行長を均すが、揃えることを優先して熟語の途中でも折るため\n     * (狭い幅では「建設現場だけの技/術ではありません」になる)768px 以上に限定する。\n     * balance は keep-all より優先されるので両立はできない。実測で確認済み。\n     */\n    .nfp h1,\n    .nfp h2,\n    .nfp h3 {\n        letter-spacing: 0.015em;\n        text-wrap: pretty;\n        font-family: inherit;\n    }\n    @media (min-width: 768px) {\n        .nfp h1,\n        .nfp h2,\n        .nfp h3 {\n            text-wrap: balance;\n        }\n    }\n    .nfp .wrap {\n        max-width: 1120px;\n        margin: 0 auto;\n        padding: 0 28px;\n    }\n    /* スマホでは左右の余白を詰めて、横幅をできるだけ本文に回す(style.css の .nf-wrap と同じ) */\n    @media (max-width: 700px) {\n        .nfp .wrap {\n            padding: 0 16px;\n        }\n    }\n    /* 製品名は行をまたいで割らない。日本語と英字の境目は通常の改行位置なので、\n       これが無いと「巡回GO」が「巡回」/「GO」に分かれて折り返される\n       (word-break では防げないため white-space で止める)。 */\n    .nfp .pname {\n        white-space: nowrap;\n    }\n    /* 語の途中で折り返させたくない語句に付ける(例:「空間AIプラットフォーム」)。 */\n    .nfp .nw {\n        white-space: nowrap;\n    }\n    /* 本文中から他製品ページへ張る製品名リンク。next/link は素の <a> を出すため、\n       Chakra のリセット(color/text-decoration が inherit)で本文と区別が付かなくなる。\n       リンクだと分かるように、章末の .related a と同じ見た目を与えている。 */\n    .nfp a.pname {\n        color: var(--blue-deep);\n        font-weight: 700;\n        text-decoration: underline;\n        text-underline-offset: 3px;\n    }\n    .nfp a.pname:hover {\n        color: var(--blue);\n    }\n    .nfp .mono {\n        font-family: ui-monospace, 'SF Mono', Menlo, Consolas, monospace;\n    }\n\n    /* スクロールリビール */\n    .nfp .rv {\n        opacity: 0;\n        transform: translateY(22px);\n        transition:\n            opacity 0.7s var(--ease),\n            transform 0.7s var(--ease);\n        transition-delay: var(--d, 0s);\n    }\n    .nfp .rv.in {\n        opacity: 1;\n        transform: none;\n    }\n\n    /* 製品ロゴ。実ロゴ画像を <picture> で置くので、寸法は外側の span で決める\n       (<picture> ではなく span がフレックスアイテムになる) */\n    .nfp .plogo {\n        display: flex;\n        align-items: center;\n        gap: 14px;\n        margin-bottom: 18px;\n        flex-wrap: wrap;\n    }\n    /* 巡回GO はシンボルと文字組みが別素材。高さだけ指定して幅は原寸比のまま。\n       シンボルは Filefront のマークと同じ 56px 角。\n       文字組みは実測で Filefront ページと光学的に揃えている:\n       \"Filefront\"(32px/900) の F の字面高は 24.77px、この画像は「GO」が画像高そのもの、\n       「巡回」が画像高の 0.942 倍。高さ 25px にすると GO=25px が F とほぼ一致し、\n       漢字は 23.6px と少し小さくなる(漢字は同じ高さだと大きく見えるのでこれでよい)。 */\n    .nfp .plogo .plogo-symbol {\n        flex: none;\n        height: 56px;\n    }\n    .nfp .plogo .plogo-word {\n        flex: none;\n        height: 25px;\n    }\n    .nfp .plogo .plogo-symbol img,\n    .nfp .plogo .plogo-word img {\n        display: block;\n        height: 100%;\n        width: auto;\n    }\n    /* マーク(Filefront)。隣にテキストの製品名が並ぶ */\n    .nfp .plogo .plogo-mark {\n        flex: none;\n        width: 56px;\n        height: 56px;\n    }\n    .nfp .plogo .plogo-mark img {\n        display: block;\n        width: 100%;\n        height: 100%;\n    }
1\n    /* テキストで組む製品名(Filefront のワードマーク)。\n       游ゴシックは macOS が YuGothic、Windows が Yu Gothic と名前が違うので両方並べる。\n       トップページのプロダクトカード側は別ファイルで同じ指定をしている(共通化しない)。 */\n    .nfp .plogo .pwordmark {\n        font-family: 'Yu Gothic Medium', 'Yu Gothic', YuGothic, '游ゴシック体', 'Hiragino Sans',\n            sans-serif;\n        font-size: 32px;\n        /* 游ゴシックは太く出るので、900 だと隣に並ぶ巡回GOのロゴより明らかに重くなる。\n           ただしこの書体は実質2ウェイトしか無く、600〜900 はすべて Bold に丸められて\n           見た目が変わらない(実測: 描画幅も字面のインク量も 600/700/800/900 で同一)。\n           太さを実際に落とせるのは 500 以下なので 500 を指定している。 */\n        font-weight: 500;\n        color: var(--ink);\n        line-height: 1;\n    }\n    .nfp .plogo .psub {\n        font-size: 12.5px;\n        color: var(--ink-faint);\n        font-weight: 700;\n        border-left: 1px solid var(--axis);\n        padding-left: 14px;\n    }\n    /* 折り返して製品名の下に来たときは、縦罫線が宙に浮くので外す */\n    @media (max-width: 520px) {\n        .nfp .plogo .psub {\n            border-left: none;\n            padding-left: 0;\n        }\n    }\n\n    /* 節タイトルの上に置く英字ラベル */\n    .nfp .eyebrow {\n        display: flex;\n        align-items: center;\n        gap: 12px;\n        font-size: 11.5px;\n        font-weight: 700;\n        letter-spacing: 0.24em;\n        color: var(--blue);\n        margin-bottom: 16px;\n        font-family: ui-monospace, 'SF Mono', Menlo, Consolas, monospace;\n    }\n    .nfp .eyebrow::before {\n        content: '';\n        width: 30px;\n        height: 2px;\n        background: linear-gradient(90deg, var(--blue), rgba(48, 84, 214, 0.25));\n    }\n\n    /* ボタン */\n    .nfp .btn {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        gap: 10px;\n        font-size: 15px;\n        font-weight: 700;\n        letter-spacing: 0.03em;\n        padding: 14px 32px;\n        border-radius: 5px;\n        text-decoration: none;\n        border: 2px solid var(--blue);\n        cursor: pointer;\n        font-family: inherit;\n        transition:\n            transform 0.25s var(--ease),\n            box-shadow 0.25s var(--ease),\n            background 0.25s,\n            color 0.25s,\n            border-color 0.25s;\n        position: relative;\n    }\n    .nfp .btn .ar {\n        display: inline-block;\n        transition: transform 0.25s var(--ease);\n        font-weight: 400;\n    }\n    .nfp .btn:hover .ar {\n        transform: translateX(4px);\n    }\n    .nfp .btn.pri {\n        background: var(--blue);\n        color: #fff;\n        box-shadow: var(--sh-blue);\n    }\n    .nfp .btn.pri:hover {\n        background: var(--blue-deep);\n        border-color: var(--blue-deep);\n        transform: translateY(-2px);\n        box-shadow: 0 14px 34px rgba(48, 84, 214, 0.36);\n    }\n    .nfp .btn.pri:active {\n        transform: translateY(0);\n    }\n    /*\n     * モックでは第2ボタンが .btn.sec だが、セクションの .sec と衝突して\n     * .sec の padding (92px 0) を拾ってしまうため、こちらでは .ghost に改名している。\n     */\n    .nfp .btn.ghost {\n        background: rgba(255, 255, 255, 0.9);\n        color: var(--blue);\n    }\n    .nfp .btn.ghost:hover {\n        background: var(--blue-pale);\n        transform: translateY(-2px);\n        box-shadow: var(--sh-1);\n    }\n    .nfp .btn:focus-visible,\n    .nfp a:focus-visible {\n        outline: 3px solid #8fa8ef;\n        outline-offset: 2px;\n    }\n    /*\n     * ヒーローの CTA。「お問い合わせ」と「無料トライアルを相談」は文字数が違うので、\n     * flex のままだと中身なりの幅になって隣り合う2つのボタンの幅がそろわない。\n     * grid の 1fr 列にすると、列幅が広い方(=「無料トライアルを相談」)にそろう。\n     *   - width: max-content … ブロックレベルのまま内容幅に縮める(inline-grid に\n     *     すると行ボックスになり、下に行間ぶんの余白が付く)\n     *   - minmax(0, 1fr) … 880〜920px あたりでヒーローの左カラムが 2つ分の幅に\n     *     ぎりぎりなので、入らないときは列を縮めて(文字を折って)はみ出させない\n     * ボタンが1つだけの btnrow(空間クラウド)では、列が1つなので見た目は変わらない。\n     */\n    .nfp .btnrow {\n        display: grid;\n        grid-auto-flow: column;\n        grid-auto-columns: minmax(0, 1fr);\n        width: max-content;\n        max-width: 100%;\n        gap: 14px;\n    }\n    /* 横に2つ並べると入らない幅では縦に積む。1列になるので幅はそろったまま */\n    @media (max-width: 520px) {\n        .nfp .btnrow {\n            grid-auto-flow: row;\n        }\n    }\n\n    /* ============ ヒーロー ============ */\n    .nfp .phero {\n        background: var(--blue-wash);\n        border-bottom: 1px solid var(--grid);\n        position: relative;\n        overflow: hidden;\n    }\n    .nfp .phero::before {\n        content: '';\n        position: absolute;\n        inset: 0;\n        /* 水平グリッド線だけ半ピッチ(28px)下げている。オフセットが無いとヒーロー上端(y=0)に\n           グリッド線が1本引かれ、その 5px 上にある固定ヘッダーの border-bottom と\n           同色・ほぼ同位置で並ぶため、ページ上部に横ç
1·šãŒ2本あるように見えてしまう。\n           位置とサイズは background ショートハンドのレイヤ内(<position> / <size>)で\n           指定すること。background-position を別宣言で後置すると、emotion が無効な\n           -webkit-background-position を併せて出力し、位置が効かない。 */\n        background:\n            radial-gradient(640px 380px at 82% 20%, rgba(48, 84, 214, 0.1), transparent 65%),\n            linear-gradient(var(--grid) 1px, transparent 1px) 0 28px / 56px 56px,\n            linear-gradient(90deg, var(--grid) 1px, transparent 1px) 0 0 / 56px 56px;\n        mask-image: linear-gradient(180deg, #000 60%, transparent);\n        -webkit-mask-image: linear-gradient(180deg, #000 60%, transparent);\n    }\n    .nfp .phero .wrap {\n        position: relative;\n        padding-top: 76px;\n        padding-bottom: 68px;\n        display: grid;\n        grid-template-columns: 1.15fr 0.85fr;\n        gap: 44px;\n        align-items: center;\n    }\n    @media (max-width: 880px) {\n        .nfp .phero .wrap {\n            grid-template-columns: 1fr;\n            padding-top: 52px;\n        }\n    }\n    .nfp .phero h1 {\n        font-size: clamp(28px, 4.2vw, 44px);\n        margin: 0 0 18px;\n        font-weight: 800;\n        line-height: 1.45;\n    }\n    .nfp .phero p {\n        color: var(--ink-soft);\n        margin: 0 0 30px;\n        max-width: 30em;\n    }\n    .nfp .trialbadge {\n        display: inline-flex;\n        align-items: center;\n        gap: 9px;\n        background: #fff;\n        border: 1.5px solid var(--blue);\n        color: var(--blue-deep);\n        font-weight: 800;\n        font-size: 13.5px;\n        border-radius: 999px;\n        padding: 6px 18px;\n        margin-bottom: 18px;\n        box-shadow: var(--sh-1);\n    }\n    .nfp .trialbadge::before {\n        content: '';\n        width: 8px;\n        height: 8px;\n        border-radius: 50%;\n        background: var(--blue);\n    }\n\n    /* 巡回GO ヒーロー: ピンと経路 */\n    .nfp .phero.geo .wrap {\n        z-index: 2;\n    }\n    .nfp .pheromap {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n        pointer-events: none;\n    }\n    .nfp .pheromap .proom {\n        fill: none;\n        stroke: var(--blue);\n        stroke-width: 1.4;\n        opacity: 0;\n        stroke-dasharray: 1;\n        stroke-dashoffset: 1;\n    }\n    .nfp .phero.in .pheromap .proom {\n        animation: nfpRoom 1.9s var(--ease) forwards;\n    }\n    /* 出現の遅延は hero-junkai-map.tsx のインライン animation-delay で振っている */\n    @keyframes nfpRoom {\n        from {\n            stroke-dashoffset: 1;\n            opacity: 0;\n        }\n        40% {\n            opacity: 0.2;\n        }\n        to {\n            stroke-dashoffset: 0;\n            opacity: 0.2;\n        }\n    }\n    .nfp .pheromap .pping {\n        fill: none;\n        stroke: var(--blue);\n        stroke-width: 2;\n        opacity: 0;\n    }\n    .nfp .phero.in .pheromap .pping {\n        animation: nfpPing 2.6s ease-out infinite;\n    }\n    @keyframes nfpPing {\n        0% {\n            r: 8;\n            opacity: 0.45;\n        }\n        70%,\n        100% {\n            r: 46;\n            opacity: 0;\n        }\n    }\n    .nfp .pheromap .proute {\n        fill: none;\n        stroke: var(--blue);\n        stroke-width: 3.4;\n        stroke-linecap: round;\n        stroke-linejoin: round;\n        opacity: 0.5;\n        stroke-dasharray: 1;\n        stroke-dashoffset: 1;\n    }\n    .nfp .pheromap .r2 {\n        stroke-width: 2;\n        opacity: 0.3;\n    }\n    .nfp .phero.in .pheromap .r1 {\n        animation: nfpDraw 2.6s var(--ease) 0.4s forwards;\n    }\n    .nfp .phero.in .pheromap .r2 {\n        animation: nfpDraw 2s var(--ease) 1.6s forwards;\n    }\n    .nfp .pheromap .ppin {\n        opacity: 0;\n    }\n    .nfp .pheromap .ppin path {\n        fill: var(--blue);\n        opacity: 0.62;\n    }\n    .nfp .pheromap .ppin circle {\n        fill: #fff;\n    }\n    .nfp .phero.in .pheromap .ppin {\n        animation: nfpPop 0.5s var(--ease) forwards;\n    }\n    .nfp .phero.in .pheromap .p1 {\n        animation-delay: 0.9s;\n    }\n    .nfp .phero.in .pheromap .p2 {\n        animation-delay: 1.4s;\n    }\n    .nfp .phero.in .pheromap .p3 {\n        animation-delay: 1.9s;\n    }\n    .nfp .phero.in .pheromap .p4 {\n        animation-delay: 2.4s;\n    }\n    .nfp .phero.in .pheromap .p5 {\n        animation-delay: 3.1s;\n    }\n    .nfp .pheromap .pwalk circle {\n        fill: var(--blue);\n        opacity: 0;\n    }\n    .nfp .phero.in .pheromap .pwalk circle {\n        offset-path: path('M150 720 V540 H560 V300 H900 V150');\n        animation:\n            nfpWalk 6.5s linear 1s infinite,\n            nfpFade 0.6s ease 1s forwards;\n    }\n    @keyframes nfpWalk {\n        from {\n            offset-distance: 0%;\n        }\n        to {\n            offset-distance: 100%;\n        }\n    }\n    @keyframes nfpFade {\n        to {\n            opacity: 0.55;\n        }\n    }\n    @keyframes nfpDraw {\n        to {\n            stroke-dashoffset: 0;\n        }\n    }\n    @keyframes nfpPop {\n        to {\n            opacity: 1;\n        }\n    }\n    /* 幅が狭いときに丸ごと消すと背景アニメーションが出なã
1ãªã‚‹ãŸã‚ã€è–„くするだけにする */\n    @media (max-width: 700px) {\n        .nfp .pheromap {\n            opacity: 0.55;\n        }\n    }\n\n    /* Filefront ヒーロー: 実図面を薄く敷き、走査して記号を検出する */\n    .nfp .phero.dwg .dwglayer {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n        pointer-events: none;\n        mask-image: linear-gradient(100deg, transparent 6%, #000 40%, #000 96%, transparent);\n        -webkit-mask-image: linear-gradient(\n            100deg,\n            transparent 6%,\n            #000 40%,\n            #000 96%,\n            transparent\n        );\n    }\n    .nfp .phero.dwg .dwglayer image {\n        opacity: 0.24;\n        mix-blend-mode: multiply;\n    }\n    .nfp .phero.dwg .dwgscan {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        width: 22%;\n        left: -22%;\n        pointer-events: none;\n        z-index: 1;\n        background: linear-gradient(\n            90deg,\n            transparent,\n            rgba(48, 84, 214, 0.12) 46%,\n            rgba(48, 84, 214, 0.28) 50%,\n            rgba(48, 84, 214, 0.12) 54%,\n            transparent\n        );\n    }\n    .nfp .phero.dwg.in .dwgscan {\n        animation: nfpSweep 3.2s var(--ease) 0.3s forwards;\n    }\n    @keyframes nfpSweep {\n        to {\n            left: 100%;\n        }\n    }\n    /* 検出結果は実出力から抽出した枠と建具符号。図面と同じ座標系に置いてあるためズレない */\n    .nfp .phero.dwg .dwglayer .det {\n        opacity: 0;\n    }\n    .nfp .phero.dwg .dwglayer .det rect {\n        fill: none;\n        stroke: #d92b2b;\n        stroke-width: 1.4;\n        vector-effect: non-scaling-stroke;\n    }\n    .nfp .phero.dwg .dwglayer .det text {\n        font-family: -apple-system, 'Helvetica Neue', Arial, sans-serif;\n        /* viewBox 単位。SVG 内なので図面と一緒に拡大縮小する */\n        font-size: 13px;\n        font-weight: 700;\n        fill: #1f3fd8;\n    }\n    .nfp .phero.dwg.in .dwglayer .det {\n        animation: nfpDet 0.42s var(--ease) forwards;\n    }\n    @keyframes nfpDet {\n        from {\n            opacity: 0;\n            transform: scale(0.94);\n        }\n        to {\n            /* 枠と文字はあくまで背景。薄く出して本文の可読性を落とさない */\n            opacity: 0.4;\n            transform: none;\n        }\n    }\n    .nfp .phero.dwg .wrap {\n        z-index: 2;\n    }\n\n    /* 空間クラウド ヒーロー: 点群 \xd7 AR */\n    .nfp .phero.cloud {\n        background: #05080f;\n        color: #fff;\n        border-bottom: none;\n        min-height: 560px;\n    }\n    .nfp .phero.cloud::before {\n        display: none;\n    }\n    .nfp .phero.cloud canvas {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n    }\n    .nfp .phero.cloud .cloudglow {\n        position: absolute;\n        inset: 0;\n        pointer-events: none;\n        background: radial-gradient(\n            720px 440px at 66% 48%,\n            rgba(48, 120, 214, 0.24),\n            transparent 68%\n        );\n    }\n    .nfp .phero.cloud .cloudvig {\n        position: absolute;\n        inset: 0;\n        pointer-events: none;\n        background: radial-gradient(\n            140% 110% at 50% 42%,\n            transparent 38%,\n            rgba(5, 8, 15, 0.88) 100%\n        );\n    }\n    .nfp .phero.cloud .wrap {\n        position: relative;\n        z-index: 5;\n        grid-template-columns: 1fr;\n    }\n    .nfp .phero.cloud h1 {\n        color: #fff;\n    }\n    /*\n     * 空間クラウドの製品名は Filefront ヒーローと同じ .pwordmark(游ゴシック 32px / 500)を\n     * 使い、濃い地に載せるので白抜きにするだけに留める。ここだけ太ã
1ã—ない理由:\n     *   - 游ゴシックは実質 Medium と Bold の2ウェイトしかない。実測(32px \"Spatial Cloud\")で\n     *     400/500 は描画幅 196.64px・インク量 360k、600/700/900 は 208.20px・537k で完全に同値。\n     *     つまり「少しだけ太く」はできず、上げるなら一気に 1.49 倍のインク量になる。\n     *   - 平均インク被覆率(インク量 \xf7 幅 \xf7 文字サイズ)で比べると、トップのプロダクトカードの\n     *     製品名(游ゴシック 23px / 400)が 55.4、この 32px / 500 が 57.2 でほぼ一致する。\n     *     Bold にすると 80.6、変更前の Noto Sans JP 30px / 900 は 88.7 で明らかに重かった。\n     *   - 白抜き文字はハレーションでむしろ太って見えるので、濃い地だからと持ち上げる必要はない。\n     * 製品名は2語で2行に組むため、.pwordmark 既定の line-height: 1 だと行間が詰まりすぎる。\n     */\n    .nfp .phero.cloud .plogo .pwordmark {\n        color: #fff;\n        line-height: 1.18;\n    }\n    .nfp .phero.cloud p {\n        color: #fff;\n    }\n    .nfp .phero.cloud .psub {\n        color: #7f96b5;\n        border-left-color: #2a3a55;\n    }\n    .nfp .phero.cloud .btn.pri {\n        background: #2f7ad6;\n        border-color: #2f7ad6;\n        box-shadow: 0 10px 34px rgba(47, 122, 214, 0.42);\n    }\n    .nfp .phero.cloud .arlayer {\n        position: absolute;\n        inset: 0;\n        z-index: 3;\n        pointer-events: none;\n    }\n    .nfp .phero.cloud .arlab {\n        position: absolute;\n        transform: translate(-50%, -100%);\n        font-size: 11.5px;\n        line-height: 1.55;\n        white-space: nowrap;\n        opacity: 0;\n        transition: opacity 0.5s ease;\n    }\n    .nfp .phero.cloud .arlab .card {\n        display: flex;\n        align-items: center;\n        gap: 9px;\n        background: rgba(8, 16, 30, 0.78);\n        border: 1px solid rgba(120, 180, 255, 0.34);\n        border-radius: 7px;\n        padding: 7px 12px;\n        backdrop-filter: blur(6px);\n        box-shadow: 0 8px 26px rgba(0, 0, 0, 0.4);\n    }\n    .nfp .phero.cloud .arlab .dot {\n        width: 7px;\n        height: 7px;\n        border-radius: 50%;\n        flex: none;\n    }\n    .nfp .phero.cloud .arlab b {\n        color: #fff;\n        font-weight: 700;\n    }\n    .nfp .phero.cloud .arlab small {\n        display: block;\n        color: #8fa6c4;\n        font-size: 10px;\n    }\n    .nfp .phero.cloud .arlab .stem {\n        display: block;\n        width: 1px;\n        height: 26px;\n        margin: 0 auto;\n        background: linear-gradient(180deg, rgba(120, 180, 255, 0.6), rgba(120, 180, 255, 0));\n    }\n    .nfp .phero.cloud .arlab .anchor {\n        display: block;\n        width: 9px;\n        height: 9px;\n        border-radius: 50%;\n        margin: -5px auto 0;\n        border: 1px solid rgba(120, 180, 255, 0.9);\n        background: rgba(120, 180, 255, 0.25);\n    }\n    .nfp .phero.cloud .hud {\n        position: absolute;\n        inset: 0;\n        z-index: 4;\n        pointer-events: none;\n    }\n    .nfp .phero.cloud .hud .br {\n        position: absolute;\n        width: 28px;\n        height: 28px;\n        border: 1.5px solid rgba(120, 190, 255, 0.4);\n    }\n    .nfp .phero.cloud .hud .br.tl {\n        top: 24px;\n        left: 24px;\n        border-right: 0;\n        border-bottom: 0;\n    }\n    .nfp .phero.cloud .hud .br.tr {\n        top: 24px;\n        right: 24px;\n        border-left: 0;\n        border-bottom: 0;\n    }\n    .nfp .phero.cloud .hud .br.bl {\n        bottom: 24px;\n        left: 24px;\n        border-right: 0;\n        border-top: 0;\n    }\n    .nfp .phero.cloud .hud .br.br2 {\n        bottom: 24px;\n        right: 24px;\n        border-left: 0;\n        border-top: 0;\n    }\n\n    /* ============ セクション ============ */\n    .nfp .sec {\n        padding: 92px 0;\n        position: relative;\n    }\n    .nfp .sec.alt {\n        background: var(--ground);\n        border-block: 1px solid var(--grid);\n    }\n    .nfp .sec h2 {\n        font-size: clamp(24px, 3.1vw, 33px);\n        margin: 0 0 16px;\n        font-weight: 800;\n        line-height: 1.5;\n    }\n    .nfp .sec .lead {\n        color: var(--ink-soft);\n        max-width: 44em;\n        margin: 0 0 44px;\n    }\n    /* リードを複数の段落に分けるときに、最後以外の段落へ付ける。\n       既定の 44px は節の下の余白として決めた値ã
1ªã®ã§ã€æ®µè½ã®é–“には空きすぎる。 */\n    .nfp .sec .lead.tight {\n        margin-bottom: 16px;\n    }\n    .nfp .note {\n        font-size: 12.5px;\n        color: var(--ink-faint);\n        margin-top: 22px;\n    }\n\n    /* 課題カード */\n    .nfp .painlist {\n        display: grid;\n        grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n        gap: 20px;\n    }\n    .nfp .painlist4 {\n        display: grid;\n        grid-template-columns: 1fr 1fr;\n        gap: 20px;\n    }\n    @media (max-width: 720px) {\n        .nfp .painlist4 {\n            grid-template-columns: 1fr;\n        }\n    }\n    @media (max-width: 700px) {\n        .nfp .painlist {\n            grid-template-columns: 1fr;\n        }\n    }\n    .nfp .pain {\n        background: #fff;\n        border: 1px solid var(--grid);\n        border-radius: 10px;\n        padding: 26px 26px 22px;\n        box-shadow: var(--sh-1);\n        transition:\n            transform 0.35s var(--ease),\n            box-shadow 0.35s var(--ease);\n    }\n    .nfp .pain:hover {\n        transform: translateY(-4px);\n        box-shadow: var(--sh-2);\n    }\n    .nfp .pain h3 {\n        font-size: 15.5px;\n        margin: 0 0 8px;\n    }\n    .nfp .pain p {\n        font-size: 13px;\n        color: var(--ink-soft);\n        margin: 0;\n    }\n\n    /* .bigsteps / .bigstep(巡回GO の「使い方は、3ステップ」)は、\n       使い方がヒーローのスライドショーと重複していたためセクションごと削除した。\n       3ページとも参照が無いことを grep で確認済み。 */\n    .nfp .shot {\n        background: var(--ground);\n        border: 1px solid var(--grid);\n        border-radius: 8px;\n        overflow: hidden;\n    }\n    .nfp .shot svg,\n    .nfp .shot img {\n        display: block;\n        width: 100%;\n        height: auto;\n    }\n    .nfp .shot-note {\n        font-size: 10.5px;\n        color: var(--ink-faint);\n        text-align: center;\n        padding: 5px 0 7px;\n    }\n    /* .shot.portrait も「使い方は、3ステップ」でしか使っていなかったので一緒に削除した。\n       .shot / .shot-note は Filefront のヒーロー下で使っているので残す。 */\n    .nfp .figure {\n        margin: 0;\n        background: #fff;\n        border: 1px solid var(--grid);\n        border-radius: 12px;\n        overflow: hidden;\n        box-shadow: var(--sh-1);\n    }\n    .nfp .figure img {\n        display: block;\n        width: 100%;\n        height: auto;\n    }\n    .nfp .figure figcaption {\n        font-size: 12px;\n        color: var(--ink-faint);\n        text-align: center;\n        padding: 10px 16px 14px;\n    }\n\n    /* 機能カード: 画面幅に応じて 2 → 1 列。\n       カードは 3 製品ページとも全部同じ大きさに見せる(既存サイトのカードと同じ扱い)。\n       grid-auto-rows: 1fr で全行の高さを揃え、下の .fimg で画像枠の大きさを\n       正規化している。両方やらないと、画像の大きい 1 枚だけでカードが伸びる。 */\n    .nfp .features {\n        display: grid;\n        grid-template-columns: 1fr 1fr;\n        grid-auto-rows: 1fr;\n        gap: 20px;\n    }\n    @media (max-width: 880px) {\n        .nfp .features {\n            grid-template-columns: 1fr;\n        }\n    }\n    .nfp .feature {\n        display: flex;\n        flex-direction: column;\n        background: #fff;\n        border: 1px solid var(--grid);\n        border-radius: 10px;\n        padding: 26px 28px 22px;\n        box-shadow: var(--sh-1);\n        transition:\n            transform 0.35s var(--ease),\n            box-shadow 0.35s var(--ease),\n            border-color 0.35s;\n    }\n    .nfp .feature:hover {\n        transform: translateY(-4px);\n        box-shadow: var(--sh-2);\n        border-color: rgba(48, 84, 214, 0.35);\n    }\n    .nfp .feature .fno {\n        font-family: ui-monospace, Menlo, monospace;\n        font-size: 12px;\n        color: var(--blue);\n        font-weight: 700;\n        letter-spacing: 0.1em;\n    }\n    .nfp .feature h3 {\n        margin: 6px 0 8px;\n        font-size: 16.5px;\n    }\n    .nfp .feature p {\n        margin: 0;\n        font-size: 13px;\n        color: var(--ink-soft);\n    }\n    /* 画像枠。横長スクショ・縦長スマホ・UI パネルの切り出しが混在するので、\n       枠の大きさを 3:2(上限 320px)に固定して中に contain で収める。\n       枠を固定しないと、素材の縦横比の違いがそのままã
1‚«ãƒ¼ãƒ‰ã®é«˜ã•の違いになる\n       (実測: Filefront の F-02 だけ画像が 576px 高になり、隣の F-01 の下に\n       200px 以上の空白ができていた)。\n       上限 320px は、1 列に落ちた広い幅で枠が間延びしないための頭打ち。\n       1280px では枠は 466x311px になり、パネルの縮小率は 0.55〜0.69 で\n       中の文字も 11px 相当以上を保てる。 */\n    .nfp .feature .fimg {\n        margin: 16px 0 0;\n        border: 1px solid var(--grid);\n        border-radius: 8px;\n        overflow: hidden;\n        /* 枠に contain で収めるので上下か左右に余白が出る。地は白。\n           素材はどれも背景が白なので、白なら余白が段差として見えない\n           (淡い地にすると画像の周りに帯が出て「画像が小さい」ように見える)。 */\n        background: #fff;\n        /*\n         * 高さは固定値。aspect-ratio で決めると「高さが不定」と扱われて\n         * 中の img の height: 100% が解決されず、縦長のスクショが原寸のまま\n         * 描画されて枠の overflow: hidden で上下が切れていた(F-03 の写真マークアップ)。\n         */\n        height: 300px;\n        display: grid;\n        /*\n         * 行を明示して minmax(0, 1fr) にする。既定の暗黙行(auto)だと行が中身の\n         * 高さ(縦長スクショで 952px)まで伸びてしまい、その行を基準に picture / img の\n         * height: 100% が解決されて枠から溢れ、overflow: hidden で上下が切れていた。\n         * 1fr なら行の高さが枠の内寸で確定するので、中の % が正しく解決される。\n         */\n        grid-template-rows: minmax(0, 1fr);\n        place-items: center;\n    }\n    @media (max-width: 880px) {\n        .nfp .feature .fimg {\n            height: 240px;\n        }\n    }\n    /* ProductPicture は <picture> を挟むので、これも枠いっぱいに広げる。\n       <picture> は既定で display: inline・高さ auto なので、これが無いと\n       中の img の height: 100% が解決されず、縦長のスクショ(F-03 の写真マークアップ)が\n       原寸のまま描画されて枠の overflow: hidden で上下が切れる。 */\n    .nfp .feature .fimg picture {\n        display: block;\n        width: 100%;\n        height: 100%;\n    }\n    /* 枠いっぱいを使って contain で収める。切り取らない。 */\n    .nfp .feature .fimg img {\n        display: block;\n        width: 100%;\n        height: 100%;\n        object-fit: contain;\n    }\n    /* 縦長のスマホ実機スクショ。画像自体はトリミングしない。\n       地は他の画像枠と同じ淡い地。以前は暗い地(#0f1524)にしていたが、\n       カードの中で1枚だけ黒い面ができて浮くため揃えた。 */\n    .nfp .feature .fimg.portrait {\n        padding: 12px;\n    }\n    .nfp .feature .fimg.portrait img {\n        border-radius: 8px;\n    }\n    /* UI パネルの切り出し(Filefront の検索条件・関連ページ)。\n       パネル自体の地が淡い青なので、カードとの境目に薄い枠を足す。 */\n    .nfp .feature .fimg.panel {\n        padding: 10px;\n    }\n    .nfp .feature .fimg.panel img {\n        border-radius: 6px;\n        border: 1px solid var(--grid);\n    }\n    .nfp .fitline {\n        margin-top: 12px !important;\n        padding-top: 11px;\n        border-top: 1px dashed var(--grid);\n        font-size: 12px !important;\n        color: var(--ink-faint) !important;\n    }\n\n    /* ピンの色の凡例(種別・対応状況)は本文で説明する形にしたので、いまは使っていない。\n       .legend / .pin-ring / .pin-dot ともに参照箇所は無い。 */\n\n    /* 位置づけ図 */\n    .nfp .continuum {\n        background: #fff;\n        border: 1px solid var(--grid);\n        border-radius: 14px;\n        padding: 40px 44px;\n        box-shadow: var(--sh-1);\n    }\n    @media (max-width: 720px) {\n        .nfp .continuum {\n            padding: 28px 24px;\n        }\n    }\n    .nfp .stackviz .devices {\n        display: grid;\n        grid-template-columns: repeat(4, 1fr);\n        gap: 12px;\n        max-width: 660px;\n        margin: 0 auto 18px;\n    }\n    @media (max-width: 720px) {\n        .nfp .stackviz .devices {\n            grid-template-columns: repeat(2, 1fr);\n        }\n    }\n    /* 5つ並べる版(フィジカルAIの工程)。4列固定だと5つ目が次の行に1つだけ残るので、\n       入る数だけ自動で折り返す。幅も少し広げて、1枚あたりが窮屈にならないようにする。 */\n    .nfp .stackviz .devices.five {\n        grid-template-columns: repeat(auto-fit, minmax(124px, 1fr));\n        max-width: 780px;\n    }\n    .nfp .stackviz .dev {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        gap: 4px;\n        font-size: 12px;\n        font-weight: 700;\n        color: var(--ink-soft);\n        border: 1px solid var(--grid);\n        background: #fff;\n        border-radius: 10px;\n        padding: 10px 12px;\n        text-align: center;\n        line-height: 1.6;\n        transition: transform 0.3s var(--ease);\n    }\n    .nfp .stackviz .dev:hover {\n        transform: translateY(-3px);\n    }\n    .nfp .stackviz .dev small {\n        font-weight: 500;\n        font-size: 10.5px;\n        color: var(--ink-faint);\n    }\n    .nfp .stackviz .conn {\n        text-align: center;\n        color: var(--axis);\n        font-size: 15px;\n        line-height: 1;\n        margin-bottom: 14px;\n        letter-spacing: 8px;\n    }\n    .nfp .stackviz .base {\n        background: var(--blue);\n        color: #fff;\n        border-radius: 8px;\n        text-align: center;\n        font-weight: 800;\n        font-size: 14.5px;\n        padding: 13px 18px;\n        letter-spacing: 0.06em;\n        box-shadow: var(--sh-blue);\n        max-width: 560px;\n        margin: 0 auto;\n    }\n    .nfp .stackviz .cap {\n        text-align: center;\n        font-size: 11.5px;\n        color: var(--ink-faint);\n        margin-top: 12px;\n    }\n    /* 図の一番上に置くキャプション(使う側のデバイス)。余白を上下ひっくり返す */\n    .nfp .stackviz .cap.top {\n        margin-top: 0;\n        margin-bottom: 12px;\n    }\n    .nfp .forwhom {\n        margin-top: 38px;\n        border-top: 1px solid var(--grid);\n        padding-top: 26px;\n    }\n    .nfp .forwhom h3 {\n        margin: 0 0 14px;\n        font-size: 15px;\n        font-weight: 800;\n        letter-spacing: 0.02em;\n    }\n    .nfp .forwhom ul {\n        margin: 0;\n        padding: 0;\n        list-style: none;\n        display: grid;\n        grid-template-columns: 1fr 1fr;\n        gap: 10px 26px;\n    }\n    @media (max-width: 720px) {\n        .nfp .forwhom ul {\n            grid-template-columns: 1fr;\n        }\n    }\n    .nfp .forwhom li {\n        font-size: 13.5px;\n        color: var(--ink-soft);\n        padding-left: 20px;\n        position: relative;\n        line-height: 1.8;\n    }\n    .nfp .forwhom li::before {\n        content: '';\n        position: absolute;\n        left: 0;\n        top: 0.72em;\n        width: 9px;\n        height: 9px;\n        border: 1.5px solid var(--blue);\n        border-radius: 50%;\n    }\n\n    /* ライフサイクル: 点検 → 報告 → 修繕 */\n    .nfp .lifecycle {\n        display: grid;\n        grid-template-columns: 1fr 1fr 1fr;\n        gap: 20px;\n        margin-top: 34px;\n    }\n    @media (max-width: 880px) {\n        .nfp .lifecycle {\n            grid-template-columns: 1fr;\n        }\n    }\n    .nfp .lcgroup {\n        background: #fff;\n        border: 1px solid var(--grid);\n        border-radius: 10px;\n        padding: 22px 24px 18px;\n        box-shadow: var(--sh-1);\n        display: flex;\n        flex-direction: column;\n        gap: 16px;\n        transition:\n            transform 0.35s var(--ease),\n            box-shadow 0.35s var(--ease),\n            border-color 0.35s;\n    }\n    .nfp .lcgroup:hover {\n        transform: translateY(-4px);\n        box-shadow: var(--sh-2);\n        border-color: rgba(48, 84, 214, 0.35);\n    }\n    .nfp .lctag {\n        align-self: flex-start;\n        font-size: 12.5px;\n        font-weight: 800;\n        letter-spacing: 0.1em;\n        color: var(--blue-deep);\n        background: var(--blue-wash);\n        border: 1px solid var(--blue-pale);\n        border-radius: 999px;\n        padding: 3px 16px;\n    }\n    .nfp .lcstep {\n        display: grid;\n        grid-template-columns: 34px 1fr;\n        gap: 12px;\n        align-items: start;\n    }\n    .nfp .lcno {\n        font-family: ui-monospace, Menlo, monospace;\n        font-size: 12px;\n        font-weight: 700;\n        color: var(--blue);\n        letter-spacing: 0.06em;\n        padding-top: 2px;\n    }\n    .nfp .lcstep b {\n        display: block;\n        font-size: 14.5px;\n        margin-bottom: 3px;\n    }\n    .nfp .lcstep p {\n        margin: 0;\n        font-size: 12.5px;\n        color: var(--ink-soft);\n        line-height: 1.75;\n    }\n\n    /* AI ワークフロー */\n    .nfp .wf {\n        margin-top: 34px;\n        border: 1px solid rgba(48, 84, 214, 0.28);\n        border-radius: 14px;\n        background: linear-gradient(180deg, var(--blue-wash), #fff 55%);\n        padding: 36px 38px 32px;\n        box-shadow: var(--sh-1);\n    }\n    @media (max-width: 720px) {\n        .nfp .wf {\n            padding: 26px 22px;\n        }\n    }\n    .nfp .wfsteps {\n        display: grid;\n        grid-template-columns: 1fr 30px 1fr 30px 1fr;\n        gap: 8px;\n        align-items: stretch;\n    }\n    @media (max-width: 880px) {\n        .nfp .wfsteps {\n            grid-template-columns: 1fr;\n        }\n    }\n    .nfp .wfstep {\n        background: #fff;\n        border: 1px solid var(--grid);\n        border-radius: 10px;\n        padding: 20px 22px 18px;\n        box-shadow: var(--sh-1);\n        transition:\n            transform 0.35s var(--ease),\n            border-color 0.35s;\n    }\n    .nfp .wfstep:hover {\n        transform: translateY(-3px);\n        border-color: rgba(48, 84, 214, 0.4);\n    }\n    .nfp .wfno {\n        display: inline-block;\n        font-family: ui-monospace, Menlo, monospace;\n        font-size: 11px;\n        font-weight: 700;\n        letter-spacing: 0.1em;\n        color: #fff;\n        background: var(--blue);\n        border-radius: 3px;\n        padding: 2px 9px;\n        margin-bottom: 10px;\n    }\n    .nfp .wfstep b {\n        display: block;\n        font-size: 15.5px;\n        margin-bottom: 5px;\n    }\n    .nfp .wfstep p {\n        margin: 0;\n        font-size: 12.5px;\n        color: var(--ink-soft);\n        line-height: 1.8;\n    }\n    .nfp .wfarr {\n        display: grid;\n        place-items: center;\n        color: var(--axis);\n        font-size: 17px;\n        font-weight: 700;\n    }\n    @media (max-width: 880px) {\n        .nfp .wfarr {\n            transform: rotate(90deg);\n            padding: 4px 0;\n        }\n    }\n    .nfp .wfnotes {\n        display: grid;\n        grid-template-columns: repeat(3, 1fr);\n        gap: 16px;\n        margin-top: 26px;\n    }\n    @media (max-width: 880px) {\n        .nfp .wfnotes {\n            grid-template-columns: 1fr;\n        }\n    }\n    .nfp .wfnote {\n        border-top: 2px solid var(--blue-pale);\n        padding-top: 14px;\n    }\n    .nfp .wfnote b {\n        display: block;\n        font-size: 13.5px;\n        margin-bottom: 5px;\n    }\n    .nfp .wfnote p {\n        margin: 0;\n        font-size: 12.5px;\n        color: var(--ink-soft);\n        line-height: 1.8;\n    }\n\n    /* 比較表 */\n    .nfp .compare {\n        width: 100%;\n        border-collapse: separate;\n        border-spacing: 0;\n        font-size: 13.5px;\n        background: #fff;\n        border: 1px solid var(--grid);\n        border-radius: 10px;\n        overflow: hidden;\n        box-shadow: var(--sh-1);\n        min-width: 780px;\n    }\n    .nfp .compare th,\n    .nfp .compare td {\n        border-bottom: 1px solid var(--grid);\n        padding: 14px 18px;\n        text-align: left;\n        vertical-align: top;\n    }\n    .nfp .compare tr:last-child th,\n    .nfp .compare tr:last-child td {\n        border-bottom: none;\n    }\n    .nfp .compare thead th {\n        background: var(--ground);\n        font-size: 12.5px;\n        border-bottom: 2px solid var(--axis);\n    }\n    /* 巡回GOの列。行見出しの隣(左端の次)に置くので、左右どちらにも区切り線を入れて\n       1
1列のまとまりとして見せる。 */\n    .nfp .compare .hl {\n        background: var(--blue-wash);\n        border-left: 1px solid var(--blue-pale);\n        border-right: 1px solid var(--blue-pale);\n    }\n    .nfp .compare thead .hl {\n        background: var(--blue-pale);\n        color: var(--blue-deep);\n    }\n    .nfp .compare .hl b {\n        color: var(--blue-deep);\n    }\n    .nfp .tblscroll {\n        overflow-x: auto;\n    }\n\n    /* FAQ */\n    .nfp .faq details {\n        background: #fff;\n        border: 1px solid var(--grid);\n        border-radius: 10px;\n        margin-bottom: 12px;\n        box-shadow: var(--sh-1);\n        transition: border-color 0.25s;\n    }\n    .nfp .faq details[open] {\n        border-color: rgba(48, 84, 214, 0.35);\n    }\n    .nfp .faq summary {\n        cursor: pointer;\n        padding: 18px 52px 18px 22px;\n        font-weight: 700;\n        font-size: 14.5px;\n        list-style: none;\n        display: flex;\n        gap: 14px;\n        align-items: baseline;\n        position: relative;\n    }\n    .nfp .faq summary::-webkit-details-marker {\n        display: none;\n    }\n    .nfp .faq summary::before {\n        content: 'Q';\n        color: var(--blue);\n        font-family: ui-monospace, Menlo, monospace;\n        font-weight: 700;\n    }\n    .nfp .faq summary::after {\n        content: '';\n        position: absolute;\n        right: 22px;\n        top: 50%;\n        width: 9px;\n        height: 9px;\n        border-right: 2px solid var(--ink-faint);\n        border-bottom: 2px solid var(--ink-faint);\n        transform: translateY(-70%) rotate(45deg);\n        transition: transform 0.3s var(--ease);\n    }\n    .nfp .faq details[open] summary::after {\n        transform: translateY(-30%) rotate(225deg);\n    }\n    .nfp .faq details[open] summary {\n        border-bottom: 1px solid var(--grid);\n    }\n    .nfp .faq .a {\n        padding: 16px 22px;\n        font-size: 13.5px;\n        color: var(--ink-soft);\n        display: flex;\n        gap: 14px;\n    }\n    .nfp .faq .a::before {\n        content: 'A';\n        color: var(--ink-faint);\n        font-family: ui-monospace, Menlo, monospace;\n        font-weight: 700;\n    }\n\n    /* 導入の流れ */\n    .nfp .flow3 {\n        display: grid;\n        grid-template-columns: 1fr 1fr 1fr;\n        gap: 20px;\n    }\n    @media (max-width: 780px) {\n        .nfp .flow3 {\n            grid-template-columns: 1fr;\n        }\n    }\n    .nfp .flow4 {\n        display: grid;\n        grid-template-columns: repeat(4, 1fr);\n        gap: 18px;\n    }\n    @media (max-width: 880px) {\n        .nfp .flow4 {\n            grid-template-columns: 1fr 1fr;\n        }\n    }\n    @media (max-width: 560px) {\n        .nfp .flow4 {\n            grid-template-columns: 1fr;\n        }\n    }\n    .nfp .flowbox {\n        background: #fff;\n        border: 1px solid var(--grid);\n        border-radius: 10px;\n        padding: 24px 24px 20px;\n        text-align: center;\n        box-shadow: var(--sh-1);\n        transition:\n            transform 0.35s var(--ease),\n            box-shadow 0.35s var(--ease);\n    }\n    .nfp .flowbox:hover {\n        transform: translateY(-4px);\n        box-shadow: var(--sh-2);\n    }\n    .nfp .flowbox .fno {\n        font-family: ui-monospace, Menlo, monospace;\n        color: var(--blue);\n        font-weight: 700;\n        font-size: 12px;\n        letter-spacing: 0.14em;\n    }\n    .nfp .flowbox h3 {\n        font-size: 16px;\n        margin: 8px 0 6px;\n    }\n    .nfp .flowbox p {\n        font-size: 12.5px;\n        color: var(--ink-soft);\n        margin: 0;\n    }\n\n    /* 関連プロダクトへの導線 */\n    .nfp .related {\n        margin-top: 40px;\n        border: 1px solid var(--blue-pale);\n        background: var(--blue-wash);\n        border-radius: 12px;\n        padding: 24px 28px;\n    }\n    .nfp .related p {\n        margin: 0;\n        font-size: 13.5px;\n        color: var(--ink-soft);\n        line-height: 1.9;\n    }\n    .nfp .related a {\n        color: var(--blue-deep);\n        font-weight: 700;\n        text-decoration: underline;\n        text-underline-offset: 3px;\n    }\n\n    /* 締めの CTA */\n    .nfp .closing {\n        background: linear-gradient(150deg, #17233e, #101828 55%, #0f1e3d);\n        color: #fff;\n        position: relative;\n        overflow: hidden;\n    }\n    .nfp .closing::before {\n        content: '';\n        position: absolute;\n        inset: 0;\n        background: linear-gradient(rgba(255, 255, 255, 0.045) 1px, transparent 1px),\n            linear-gradient(90deg, rgba(255, 255, 255, 0.045) 1px, transparent 1px);\n        background-size: 56px 56px;\n        mask-image: radial-gradient(720px 420px at 50% 0%, #000, transparent 75%);\n        -webkit-mask-image: radial-gradient(720px 420px at 50% 0%, #000, transparent 75%);\n    }\n    .nfp .closing .wrap {\n        position: relative;\n        text-align: center;\n    }\n    .nfp .closing h2 {\n        color: #fff;\n    }\n    .nfp .closing .lead {\n        color: #b9c5d6;\n        margin: 0 auto 34px;\n    }
1\n    .nfp .closing .btn.pri {\n        border-color: #fff;\n        background: #fff;\n        color: var(--ink);\n        box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n    }\n    .nfp .closing .btn.pri:hover {\n        background: #e9eefb;\n        border-color: #e9eefb;\n        color: var(--ink);\n    }\n\n    /* 規約・ポリシーへの導線。締めの CTA の下に置く細い帯 */\n    .nfp .plegal {\n        background: var(--ground);\n        border-top: 1px solid var(--grid);\n        padding: 22px 0;\n    }\n    .nfp .plegal .wrap {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 12px 28px;\n        justify-content: center;\n    }\n    .nfp .plegal a {\n        font-size: 13px;\n        color: var(--ink-soft);\n        text-decoration: underline;\n        text-underline-offset: 3px;\n    }\n    .nfp .plegal a:hover {\n        color: var(--blue-deep);\n    }\n\n    /* スマホスライドショー */\n    .nfp .slideshow {\n        position: relative;\n    }\n    .nfp .phone {\n        width: min(272px, 74vw);\n        margin: 0 auto;\n        background: #0f1524;\n        border-radius: 34px;\n        padding: 10px;\n        box-shadow:\n            0 2px 3px rgba(22, 32, 46, 0.2),\n            0 24px 60px rgba(27, 47, 110, 0.3),\n            0 8px 20px rgba(27, 47, 110, 0.16);\n        animation: nfpFloat 7s ease-in-out infinite;\n    }\n    /*\n     * 狭い画面では浮遊アニメーションを止める。これ自体が transform なので、\n     * スライドの切り替え(同じく transform)と重なるタイミングで合成が崩れる\n     * 引き金になりうる(浮遊の1周期 7.0s と、3枚目に切り替わる 7.2s がほぼ一致する)。\n     * 小さい画面では動きの効果も薄いので、消える不具合の芽を先に摘んでおく。\n     */\n    @media (max-width: 900px) {\n        .nfp .ph
1one {\n            animation: none;\n        }\n    }\n    @keyframes nfpFloat {\n        0%,\n        100% {\n            transform: translateY(0);\n        }\n        50% {\n            transform: translateY(-9px);\n        }\n    }\n    /*\n     * スマホで STEP 2→3、3→4 に切り替わると中身(ときにフレームごと)が消える、という\n     * 報告への対処。border-radius + overflow: hidden の要素の中で子を transform で\n     * 動かすと、iOS Safari では切り抜きの矩形が更新されず、元の位置から外に出た子\n     * (=3枚目以降)が描画されなくなることがある。1・2枚目だけ無事で3枚目から消える、\n     * という症状とも一致する。\n     * 対策は2つ重ねている:\n     *   - translateZ(0) でこの要素自身に合成レイヤーを持たせ、切り抜きを追従させる\n     *   - -webkit-mask-image で角丸のクリップを mask 側に任せる(iOS の定番の回避策)\n     * 併せて .slides 側にも will-change を置き、切り替えのたびにレイヤーが\n     * 作り直されないようにしている。\n     */\n    .nfp .phone .screen {\n        border-radius: 25px;\n        overflow: hidden;\n        position: relative;\n        background: #fff;\n        transform: translateZ(0);\n        -webkit-mask-image: -webkit-radial-gradient(#fff, #000);\n        mask-image: radial-gradient(#fff, #000);\n    }\n    .nfp .slides {\n        display: flex;\n        transition: transform 0.6s var(--ease);\n        will-change: transform;\n    }\n    .nfp .slide {\n        min-width: 100%;\n    }\n    /* 実機スクリーンショット(元 1206 \xd7 2622 を長辺 1600 に縮小)。\n       比率を固定して読み込み時のガタつきを防ぐ。\n       スクショにステータスバーが入っているので、ノッチのオーバーレイは重ねない。 */\n    .nfp .slide img {\n        display: block;\n        width: 100%;\n        height: auto;\n        aspect-ratio: 736 / 1600;\n    }\n    .nfp .slide-caption {\n        display: flex;\n        align-items: center;\n        gap: 10px;\n        margin-top: 20px;\n        justify-content: center;\n        font-size: 13.5px;\n        font-weight: 700;\n    }\n    .nfp .slide-caption .stepno {\n        font-family: ui-monospace, Menlo, monospace;\n        font-size: 11px;\n        background: var(--blue);\n        color: #fff;\n        border-radius: 3px;\n        padding: 2px 9px;\n        box-shadow: 0 3px 10px rgba(48, 84, 214, 0.3);\n    }\n    .nfp .dots {\n        display: flex;\n        gap: 8px;\n        justify-content: center;\n        margin-top: 14px;\n    }\n    .nfp .dots button {\n        width: 8px;\n        height: 8px;\n        border-radius: 999px;\n        border: none;\n        cursor: pointer;\n        background: var(--axis);\n        padding: 0;\n        transition:\n            width 0.35s var(--ease),\n            background 0.35s;\n    }\n    .nfp .dots button.on {\n        background: var(--blue);\n        width: 26px;\n    }\n\n    @media (prefers-reduced-motion: reduce) {\n        .nfp .slides,\n        .nfp .rv {\n            transition: none;\n        }\n        .nfp .rv {\n            opacity: 1;\n            transform: none;\n        }
1\n        .nfp .phone {\n            animation: none;\n        }\n        .nfp .phero.dwg .dwgscan {\n            display: none;\n        }\n        .nfp .phero.dwg .dwglayer .det {\n            opacity: 0.4;\n            animation: none !important;\n        }\n        .nfp .pheromap .proom {\n            opacity: 0.2;\n            stroke-dashoffset: 0;\n            animation: none !important;\n        }\n        .nfp .pheromap .pping {\n            display: none;\n        }\n        .nfp .pheromap .proute {\n            stroke-dashoffset: 0;\n            animation: none !important;\n        }\n        .nfp .pheromap .ppin {\n            opacity: 1;\n            animation: none !important;\n        }\n        .nfp .pheromap .pwalk {\n            display: none;\n        }\n    }\n"]);return t=function(){return n},n}let i=(0,p.iv)(t());e.Z=()=>(0,a.jsx)(p.xB,{styles:i})},9123:function(n,e,r){var o=r(7294);e.Z=()=>{(0,o.useEffect)(()=>{let n=new Set(document.querySelectorAll(".nfp .rv"));if(0===n.size)return;let e=e=>{e.classList.add("in"),n.delete(e)};if("function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches){n.forEach(e);return}let r=!1,o=()=>{r=!1;let o=window.innerHeight-40;n.forEach(n=>{n.getBoundingClientRect().top<o&&e(n)}),0===n.size&&(window.removeEventListener("scroll",a),window.removeEventListener("resize",a))},a=()=>{r||(r=!0,requestAnimationFrame(o))};return a(),window.addEventListener("scroll",a,{passive:!0}),window.addEventListener("resize",a),()=>{window.removeEventListener("scroll",a),window.removeEventListener("resize",a)}},[])}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.