開発情報・ナレッジ

投稿者: SPIRERS ナレッジ向上チーム 2025年8月18日 (月)

モデルルーム予約管理アプリ サイト設計・構築③

SPIRAL ver.2では内覧の予約受付から内覧後のアンケート、検討状況の確認対応やメール配信を行うモデルルーム予約管理アプリの構築が可能です。

アプリ(DB)設計・構築 / サイト設計・構築 / ユーザ・アプリロール・グループ設定
に各工程を分け、ポイントやおすすめ機能・強化ガジェットを紹介いたします。

サイト設計・構築では以下の工程に分けて作成します。
・認証エリアと各ページと共通ブロック、内覧予約トップページ
・内覧予約登録、変更、キャンセルフロー
・検討状況アンケート、案内後アンケート、資料請求ページ

この記事は サイト設計・構築③ のフェーズとなります。
サイト設計・構築③では検討状況アンケート、案内後アンケート、資料請求ページの作成をします。

関連記事はこちら
SPIRAL ver.2はプログラミング経験がなくても、オリジナルの業務アプリの制作・カスタマイズができるローコード開発プラットフォームです。
詳しくは SPIRAL ver.2 とはをご覧ください。

サイト機能

SPIRAL ver.2 のサイト管理機能では、静的なWebページを作成したり、
データベースに対して登録・更新するフォーム や データベースの情報を一覧形式で表示させるページなどを作成できます。
詳細は、サイト機能の全体像を確認してください。
今回は、サイト機能を使って「予約日一覧ページ」「内覧予約ページ」「登録情報変更ページ」「予約キャンセルページ」を作成します。
各機能の詳細に関しては、下記を参照ください。
ページ機能
ブロック機能
認証エリア

注意

設定の説明部分にて、ソースコードを記載しております。
ソースコードに記載されている 各種リンク や name値、規約含めて文言などは、デモの環境に合わせたものとなります。
実際に同様のものを作成する際は、変更が必要となる箇所がありますので、ご注意ください。
ソース内の「f0xx」と「record[xx]」、「siteClient.record[xx]」、「p0xx」について
ソース内の「f0xx」、「record[xx]」という箇所には、ブロックのフィールド一覧に記載されている識別名が入ります。
「siteClient.record[xx]」という箇所には、フィールドID(name属性から「f0」を除いた数字)が入ります。
「p0xx」という箇所には、ページIDが入ります。
サイト管理 > ページ > 対象のページ > 基本設定 > IDからご確認ください。

フロー・使用機能の整理

内覧予約フロー
登録情報変更、予約キャンセルフロー
アンケートフロー
資料請求フロー

案内後アンケートメール配信設定

内覧が終わった後に担当者が内覧者にアンケートフォームの配信を行うためのメールです。
DBのトリガアクションですが、次に記載する案内後アンケート回答ページへのクリックログインリンクを添付するメールのため、こちらに記載させていただきます。
なお、非同期アクションにおいてクリックログインURLを設置する場合、本番環境にリリースする必要があります。
アプリ管理の内覧予約DBの更新トリガの非同期アクションから、以下のように設定ください。
経路 条件付き配信(簡易) すべての条件を満たす
一部の経路(操作画面) 「配信フラグ(非同期アクション用)」等しい「配信する」
「案内フラグ」等しい「案内完了」
指定方法:メールアドレス

また、以下のように件名、本文を入力してください。
件名
【 {{@xxxxx.xxxxx.xxxxx}} 】案内についてアンケートにご協力お願いします

本文
{{@xxxxx.xxxxx}}様

本日は{{@xxxxx.xxxxx.xxxxx}}の内覧にご参加いただきまして
誠にありがとうございました。

サービス向上を目的としてアンケートのご協力をお願いしたく存じます。
お手数おかけしますが、以下のリンクよりアンケートにご回答いただけますようお願いいたします。
───────────────────────────────────────
◆内覧後アンケートURL
{{@_url.cl.xxxxxx.xxxxxxx/xxxx/xxxx}}
───────────────────────────────────────
-----------------------
※本メールは、システムからの自動送信メールです。
 この送信元メールアドレスは送信専用となりますので、お問合せ等は以下連絡先までお願いします。
TEL:XXX-XXXX-XXXX

「{{@xxxxx.xxxxx.xxxxx}}」には「参照_物件マスタDB_物件名」、「{{@xxxxx.xxxxx}}」には「名前」の差し替えキーワードをご記載ください。
「{{@_url.cl.xxxxxx.xxxxxxx/xxxx/xxxx}}」には、「案内後アンケート回答アンケートページ」のクリックログインURLをご記載ください。

案内後アンケート回答ページ

認証エリアの項目で作成した内覧認証エリア内の案内後アンケート回答ページを書き換えていきます。
完成イメージ

手順1:案内後アンケートフォームブロックを作成
案内後アンケートフォームは、登録フォームブロックで作成します。
以下の通りに設定を行います。
設置認証エリア DB 設定方法 参照フィールド設定 参照フィールド設定
内覧予約認証エリア 案内後アンケートDB ソース設定 参照_物件マスタDBと物件マスタDBのキーフィールド 物件ID」「認証しない」

完成イメージ

HTML
<div class="sp-form-container">
  <div class="sp-step-flow-f24431">
    <div class="large-setting arrow sp-clearfix">
      <div class="step active" title="入力">
        <span>入力</span>
      </div>
      <div class="step" title="確認">
        <span>確認</span>
      </div>
      <div class="step" title="完了">
        <span>完了</span>
      </div>
    </div>
    <div class="small-setting arrow sp-clearfix">
      <div class="step active" title="入力">
        <span>入力</span>
      </div>
      <div class="step" title="確認">
        <span>確認</span>
      </div>
      <div class="step" title="完了">
        <span>完了</span>
      </div>
    </div>
  </div>
  <div class="sp-form-item sp-form-html" th:inline="none"><p><span style="font-size: 18pt;">案内後アンケートフォーム</span></p></div>
  <div class="sp-form-item sp-form-html" th:inline="none">アンケートにご回答の上、「確認画面へ」ボタンを押してください。<br>ご意見・ご要望などありましたら、「その他」に記載をお願いいたします。</div>
  <!--/* 物件名(propertyRef.propertyName) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      物件名
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${siteClient.record[xx] != null} ? (${siteClient.record[xx][xx]} ?: '値なし')">Example</span>
    </div>
  </div>
    <!--/* 来場された目的(purpose) */-->
    <sp:input-field name="f0xx"></sp:input-field>
    <div class="sp-form-item sp-form-field">
      <div class="sp-form-label">
        <th:block th:text="${fields['f0xx'].label}">
          Label
        </th:block>
        <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
      </div>
      <div class="sp-form-data">
         <div class="sp-form-dropdown">
          <select class="sp-form-control" th:name="${fields['f0xx'].name}">
            <option value="" th:text="${fields['f0xx'].unselectedLabel}" th:selected="${inputs['f0xx'] == null}">Select option</option>
            <option th:each="option : ${fields['f0xx'].options}" th:value="${option.id}" th:text="${option.label}" th:selected="${inputs['f0xx'] == #strings.toString(option.id)}">Item</option>
          </select>
          <span class="sp-form-dropdown-icon"></span>
          </div>
        <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
        <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
      </div>
    </div>
    <!--/* 案内は参考になりましたでしょうか・(useful) */-->
    <sp:input-field name="f0xx"></sp:input-field>
    <div class="sp-form-item sp-form-field">
      <div class="sp-form-label">
        <th:block th:text="${fields['f0xx'].label}">
          Label
        </th:block>
        <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
      </div>
      <div class="sp-form-data">
         <div class="sp-form-dropdown">
          <select class="sp-form-control" th:name="${fields['f0xx'].name}">
            <option value="" th:text="${fields['f0xx'].unselectedLabel}" th:selected="${inputs['f0xx'] == null}">Select option</option>
            <option th:each="option : ${fields['f0xx'].options}" th:value="${option.id}" th:text="${option.label}" th:selected="${inputs['f0xx'] == #strings.toString(option.id)}">Item</option>
          </select>
          <span class="sp-form-dropdown-icon"></span>
          </div>
        <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
        <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
      </div>
    </div>
    <!--/* 案内はいかがでしたでしょうか。(guideSatisfact) */-->
    <sp:input-field name="f0xx"></sp:input-field>
    <div class="sp-form-item sp-form-field">
      <div class="sp-form-label">
        <th:block th:text="${fields['f0xx'].label}">
          Label
        </th:block>
        <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
      </div>
      <div class="sp-form-data">
         <div class="sp-form-dropdown">
          <select class="sp-form-control" th:name="${fields['f0xx'].name}">
            <option value="" th:text="${fields['f0xx'].unselectedLabel}" th:selected="${inputs['f0xx'] == null}">Select option</option>
            <option th:each="option : ${fields['f0xx'].options}" th:value="${option.id}" th:text="${option.label}" th:selected="${inputs['f0xx'] == #strings.toString(option.id)}">Item</option>
          </select>
          <span class="sp-form-dropdown-icon"></span>
          </div>
        <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
        <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
      </div>
    </div>
    <!--/* 部屋はいかがでしたでしょうか。(roomSatisfact) */-->
    <sp:input-field name="f0xx"></sp:input-field>
    <div class="sp-form-item sp-form-field">
      <div class="sp-form-label">
        <th:block th:text="${fields['f0xx'].label}">
          Label
        </th:block>
        <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
      </div>
      <div class="sp-form-data">
         <div class="sp-form-dropdown">
          <select class="sp-form-control" th:name="${fields['f0xx'].name}">
            <option value="" th:text="${fields['f0xx'].unselectedLabel}" th:selected="${inputs['f0xx'] == null}">Select option</option>
            <option th:each="option : ${fields['f0xx'].options}" th:value="${option.id}" th:text="${option.label}" th:selected="${inputs['f0xx'] == #strings.toString(option.id)}">Item</option>
          </select>
          <span class="sp-form-dropdown-icon"></span>
          </div>
        <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
        <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
      </div>
    </div>
  <!--/* 参照_物件マスタ(propertyRef) */-->
    <sp:input-field name="f0xx"></sp:input-field>
      <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
      <!-- </div> -->
      <div class="sp-form-data">
        <input type="hidden" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="${siteClient.record[xx]}">
        <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
        <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
       </div>
    <!-- </div> -->
    <div class="sp-form-item sp-form-field" th:if="${fields['f0xx'].isTemporary}">
      <div class="sp-form-label">
        <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
      </div>
      <div class="sp-form-data">
        <input type="text" class="sp-form-control" th:name="${fields['f0xx'].collationName}" th:placeholder="${fields['f0xx'].placeholder.collation}" th:value="${inputs['f0xx_collation']}">
        <span class="sp-form-error" th:if="${errors['f0xx_collation'] != null}" th:text="${errors['f0xx_collation'].message}">Error message</span>
      </div>
    </div>

  <!--/* その他(comment) */-->
  <sp:input-field name="f0xx"></sp:input-field>
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      <th:block th:text="${fields['f0xx'].label}">
        Label
      </th:block>
      <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
    </div>
    <div class="sp-form-data">
      <textarea class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:text="${inputs['f0xx']}"></textarea>
      <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
      <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
    </div>
  </div>
  <div class="sp-form-item sp-form-interaction">
    <button class="sp-form-prev-button" type="submit" name="action" value="previous" th:if="!${step.isFirst}" th:text="${step.prevButtonLabel}">Prev</button>
    <button class="sp-form-next-button" type="submit" name="action" value="next" th:text="${step.nextButtonLabel}">Next</button>
  </div>
</div>

HTML(確認ステップ)
<div class="sp-form-container">
  <div class="sp-step-flow-f24431">
    <div class="large-setting arrow sp-clearfix">
      <div class="step" title="入力">
        <span>入力</span>
      </div>
      <div class="step active" title="確認">
        <span>確認</span>
      </div>
      <div class="step" title="完了">
        <span>完了</span>
      </div>
    </div>
    <div class="small-setting arrow sp-clearfix">
      <div class="step" title="入力">
        <span>入力</span>
      </div>
      <div class="step active" title="確認">
        <span>確認</span>
      </div>
      <div class="step" title="完了">
        <span>完了</span>
      </div>
    </div>
  </div>
  <div class="sp-form-item sp-form-html" th:inline="none"><p><span style="font-size: 18pt;">案内後アンケートフォーム</span></p></div>
  <div class="sp-form-item sp-form-html" th:inline="none">内容をご確認の上、よろしければ「アンケート回答」ボタンを押してください。</div>
  <!--/* 物件名(propertyRef.propertyName) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      物件名
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${siteClient.record[xx] != null} ? (${siteClient.record[xx][xx]} ?: '値なし')">Example</span>
    </div>
  </div>
  <!--/* 来場された目的(purpose) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']?.label}">Item</span>
    </div>
  </div>
  <!--/* 案内は参考になりましたでしょうか・(useful) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']?.label}">Item</span>
    </div>
  </div>
  <!--/* 案内はいかがでしたでしょうか。(guideSatisfact) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']?.label}">Item</span>
    </div>
  </div>
  <!--/* 部屋はいかがでしたでしょうか。(roomSatisfact) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']?.label}">Item</span>
    </div>
  </div>
  <!--/* その他(comment) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded">
        <th:block th:each="line, stat : ${values['f0xx']?.lines}">
          <th:block th:text="${line}"></th:block>
          <br th:unless="${stat.last}">
        </th:block>
      </span>
    </div>
  </div>
  <div class="sp-form-item sp-form-interaction">
    <button class="sp-form-prev-button" type="submit" name="action" value="previous" th:if="!${step.isFirst}" th:text="${step.prevButtonLabel}">Prev</button>
    <button class="sp-form-next-button" type="submit" name="action" value="next" th:text="${step.nextButtonLabel}">Next</button>
  </div>
</div>

CSS
:root {
  /*=============================
	カスタムプロパティ
  ==============================*/
  --base-color: #FFFFFF; /* フォームブロックの背景色 */
  --main-color: #0D60DB; /* メインカラー */
  --accent-color: #B8250F; /* アクセントカラー */
  --input-color: #F5F7FA; /* 入力欄の背景色 */
  --input-border-color: #D3D6DB; /* 入力欄の枠線の色 */
  --input-radius: 12px; /* 入力欄の角の丸さ */
  --transition: 0.1s; /* アニメーション時間 */

  /*------ 合計100%になるよう調整 -------*/
  --label-width: 25%; /* ラベル部分の幅 */
  --data-width: 75%; /* データ部分の幅 */
}

.sp-record-list-card-actions {
  width: auto;
  font-size:0.875rem;
  padding:0.5rem 0;
  text-align:center;
  text-decoration:none;
  flex: 1;
}

.sp-record-list-card-actions a {
  color: #ffffff;
  background-color: #0D60DB;
  border: 1.0px solid #0D60DB;
  border-radius: calc(12px / 1.2);
  /* background-color:#ffffff; */
  font-size:0.875rem;
  padding:0.5rem 0.75rem;
  text-align:center;
  text-decoration:none;
  flex: 1;
}

.sp-form-container {
  font-size:16px;
  padding:1em;
  box-sizing:border-box;
  max-width: 960px;
  color:#505050;
  background-color:var(--base-color);
  border:1px solid #E1E5EB;
  border-radius:var(--input-radius);
}

.sp-form-container .sp-form-item:not(:last-child) {
  margin-bottom:0.5em;
  padding:0.5em 1em;
}

.sp-form-field,
.sp-form-group {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
  -ms-flex-direction:column;
  flex-direction:column;
}

.sp-form-field>.sp-form-label,
.sp-form-group>.sp-form-label {
  font-size:1.15em;
  font-weight:bold;
  padding:.25em 0;
  word-break:break-all;
  box-sizing:border-box;
  color:#333333;
}

.sp-form-group-item>.sp-form-label {
  word-break:break-all;
  display:inline-block;
  margin-bottom:.2em;
}

.sp-form-field>.sp-form-data,
.sp-form-group>.sp-form-data {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
  -ms-flex-direction:column;
  flex-direction:column;
  word-break:break-all;
  padding:0.25em 0;
  box-sizing:border-box;
}

.sp-form-group-item>.sp-form-data {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
  -ms-flex-direction:column;
  flex-direction:column;
}

.sp-form-required {
  display:inline-block;
  margin:0 .5em;
  padding: 3px 6px;
  background:var(--accent-color);
  color:#ffffff;
  line-height:1;
  border-radius:.25em;
  font-size:0.7em;
  font-weight: bold;
  vertical-align: middle;
}

.sp-form-group-item:not(:last-child) { margin-bottom:.5em; }

.sp-form-noted {
  font-size:.8em;
  color:#808080;
  word-break:break-all;
  margin-top:.5em;
  padding-left:min(calc(var(--input-radius) / 2 - 4px), 8px);
}

.sp-form-error {
  font-size:.8em;
  color:var(--accent-color);
  padding-left:min(calc(var(--input-radius) / 2 - 4px), 8px);
}

.sp-form-control {
  -moz-appearance:none;
  -webkit-appearance:none;
  -ms-progress-appearance:none;
  appearance:none;
  font-family:inherit;
  font-size:1em;
  line-height:1.5;
  padding:.3em .7em;
  padding-left:clamp(12px, calc(var(--input-radius) - 2px), 24px);
  background:var(--input-color);
  color:#333333;
  box-sizing:border-box;
  width:100%;
  height:48px;
  margin-bottom:.3em;
  border:none;
  outline:none;
  border-radius:var(--input-radius);
  box-shadow:0 0 0 0.5px var(--input-border-color);
}
.sp-form-control:focus {
  box-shadow:0 0 0 2px var(--main-color);
}
.sp-form-control[type="number"] {
  height: 36px;
}

.sp-form-control:placeholder-shown { color:#aaa; }

.sp-form-control::placeholder { color:#aaa; }

.sp-form-control::-ms-input-placeholder { color:#aaa; }

.sp-form-control:-ms-input-placeholder { color:#aaa; }

.sp-form-control:-moz-placeholder { color:#aaa; }

textarea.sp-form-control {
  resize:vertical;
  padding-top:clamp(6px, calc(var(--input-radius) / 2), 18px);
  height:calc(1.5em * 5);
}

select.sp-form-control,
option.sp-form-control {
  -moz-appearance:none;
  -webkit-appearance:none;
  -ms-progress-appearance:none;
  appearance:none;
  padding-right:1.5em;
}

.sp-form-control>option { background:#FFFFFF;}

select.sp-form-control::-ms-expand { display:none; }

.sp-form-phone .sp-form-control { max-width:20em; }

.sp-form-phone>*:not(:only-child) { margin-right:.5rem; }

.sp-form-dropdown { position:relative; }

.sp-form-dropdown-icon {
  display:block;
  position:absolute;
  top:1.3em;
  right:1em;
  line-height:0;
  pointer-events:none;
}

.sp-form-dropdown-icon:after {
  content:"";
  display:block;
  border-top:0.333em solid #888;
  border-right:.333em solid transparent;
  border-left:.333em solid transparent;
}

.sp-form-selection {
  display:block;
  cursor: pointer;
  margin-bottom:.3em;
  padding:.25em .75em .35em;
  background:var(--input-color);
  border-radius: var(--input-radius);
  box-shadow:0 0 0 0.5px var(--input-border-color) ;
}

.sp-form-selection-label {
  display: inline-block;
  position: relative;
  vertical-align:middle;
  padding: 4px 0;
}

.sp-form-datetimes,
.sp-form-date,
.sp-form-time,
.sp-form-timezone {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:horizontal;
  -webkit-box-direction:normal;
  -ms-flex-flow:row wrap;
  flex-flow:row wrap;
  -webkit-box-align:center;
  -ms-flex-align:center;
  align-items:center;
}

.sp-form-datetime,
.sp-form-date,
.sp-form-time,
.sp-form-timezone {
  margin-right:.5rem;
  -ms-flex-wrap:nowrap;
  flex-wrap:nowrap;
}

.sp-form-datetime { max-width:20em; }

.sp-form-phone {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:horizontal;
  -webkit-box-direction:normal;
  -ms-flex-flow:row wrap;
  flex-flow:row wrap;
  -webkit-box-align:center;
  -ms-flex-align:center;
  align-items:center;
}

.sp-form-date-separator {
  width:1em;
  margin-bottom: .3em;
  text-align:center;
  -ms-flex-negative:1;
  flex-shrink:0;
}

.sp-form-number { max-width:20em; }

.sp-form-email-reenter,
.sp-form-password-reenter {
  font-size:.9em;
  margin-bottom:.2em;
  padding-left:min(calc(var(--input-radius) / 2 - 4px), 8px);
}

.sp-form-html p { margin:0; }

.sp-form-interaction {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -ms-flex-wrap:wrap;
  flex-wrap:wrap;
  margin-top:1em;
}

.sp-form-prev-button {
  color:#333333;
  background-color:var(--base-color);
  border:2.0px solid #666666;
}

.sp-form-next-button,
.sp-form-login-button {
  color:#ffffff;
  background-color:var(--main-color);
  border:none;
}

.sp-form-field .sp-form-embedded { padding-left:.25em; }

.sp-form-selection>input[type="radio"],
.sp-form-selection>input[type="checkbox"] {
  display: none;
  vertical-align:middle;
  margin-left:0;
}

.sp-form-selection>input[type="radio"]+.sp-form-selection-label::before,
.sp-form-selection>input[type="checkbox"]+.sp-form-selection-label::before{
  display: inline-block;
  content:"";
  position: relative;
  box-sizing: border-box;
  top: 4px;
  margin-right: 6px;
  width: 20px;
  height: 20px;
  background: #ffffff;
  border:10px solid #ffffff;
  box-shadow: 0 0 0 0.5px var(--input-border-color);
  transition: var(--transition);
}

.sp-form-selection>input[type="radio"]+.sp-form-selection-label::before {
  border-radius: 50%;
}

.sp-form-selection>input[type="checkbox"]+.sp-form-selection-label::before {
  border-radius: min(var(--input-radius), 4px);
}

.sp-form-selection>input[type="radio"]:checked+.sp-form-selection-label::before{
  background: var(--main-color);
  border:4px solid #ffffff;
}
.sp-form-selection>input[type="checkbox"]+.sp-form-selection-label::after{
  border-right: 3px solid var(--main-color);
  border-bottom: 3px solid var(--main-color);
  content: '';
  display: inline-block;
  width: 6px;
  height: 10px;
  left: 9px;
  margin-top: -7px;
  position: absolute;
  top: 50%;
  transform: rotate(45deg);
  opacity: 0;
  transition: var(--transition);
}

.sp-form-selection>input[type="checkbox"]:checked+.sp-form-selection-label::after{
  left: 6px;
  opacity: 1;
}

.sp-form-date>input,
.sp-form-time>input { max-width:7em; }

.sp-form-date>input[type="date"]{
  min-width: 140px;
  max-width: none;
}
.sp-form-time>input[type="time"] {
  min-width: 92px;
  max-width: none;
}

.sp-form-interaction>button {
  -webkit-box-flex:1;
  -ms-flex-positive:1;
  flex-grow:1;
  cursor:pointer;
  font-size:1em;
  font-weight:bold;
  line-height:1.5;
  margin:.5rem;
  padding:.75rem 0;
  text-align:center;
  -webkit-user-select:none;
  -moz-user-select:none;
  -ms-user-select:none;
  user-select:none;
  white-space:nowrap;
  border-radius:var(--input-radius);
}

@media (min-width:768px) {
  .sp-form-container {
    font-size:initial;
    padding:3em;
    margin:2em auto;
  }

.sp-form-container .sp-form-item:not(:last-child) {
  margin-bottom:0.5em;
  padding-bottom:0.5em;
}

  .sp-form-field,
  .sp-form-group {
    -webkit-box-orient:horizontal;
    -webkit-box-direction:normal;
    -ms-flex-flow:row nowrap;
    flex-flow:row nowrap;
  }

  .sp-form-field>.sp-form-label,
  .sp-form-group>.sp-form-label {
    font-size:1em;
    width:var(--label-width);
    padding:.5em;
  }

  .sp-form-group .sp-form-group-item>.sp-form-label {
    font-size:.9em;
    padding-right:.5em;
  }

  .sp-form-field>.sp-form-data,
  .sp-form-group>.sp-form-data {
    font-size:1em;
    width:var(--data-width);
    padding:.5em;
  }

  .sp-form-group>.sp-form-data {
    -webkit-box-orient:horizontal;
    -webkit-box-direction:normal;
    -ms-flex-flow:row wrap;
    flex-flow:row wrap;
  }

  .sp-form-group.sp-form-group-vertical>.sp-form-data {
    -webkit-box-orient:vertical;
    -webkit-box-direction:normal;
    -ms-flex-direction:column;
    flex-direction:column;
  }

  .sp-form-required {
    font-size:0.8em;
  }

  .sp-form-group-item { padding:.25em; }

  .sp-form-group-item:not(:last-child) { margin-bottom:0; }

  .sp-form-control { font-size:.9em; }

  .sp-form-selection {
    font-size:.9em;
    margin:0 .5em 0 0;
    padding-right:1em;
    background:none;
    box-shadow:none;
  }
  .sp-form-selection-vertical>.sp-form-selection {
    margin:0 auto 0 0;
    padding-right: 4em;
  }

  .sp-form-selection-vertical {
    display:-webkit-box;
    display:-ms-flexbox;
    display:flex;
    -webkit-box-orient:vertical;
    -webkit-box-direction:normal;
    -ms-flex-direction:column;
    flex-direction:column;
  }

  .sp-form-selection-horizontal {
    display:-webkit-box;
    display:-ms-flexbox;
    display:flex;
    -webkit-box-orient:horizontal;
    -webkit-box-direction:normal;
    -ms-flex-flow:row wrap;
    flex-flow:row wrap;
  }

  .sp-form-interaction {
    justify-content:center;
    margin-top:2em;
  }

  .sp-form-embedded { font-size:.9em; }

  .sp-form-group-item .sp-form-embedded { padding-right:5em; }

  .sp-form-selection>input[type="radio"]+.sp-form-selection-label::before,
  .sp-form-selection>input[type="checkbox"]+.sp-form-selection-label::before{
    background: var(--input-color);
    border:10px solid var(--input-color);
  }

  .sp-form-selection>input[type="radio"]:hover+.sp-form-selection-label::before,
  .sp-form-selection>input[type="checkbox"]:hover+.sp-form-selection-label::before{
    border:10px solid #dddddd;
  }

  .sp-form-selection>input[type="radio"]:checked+.sp-form-selection-label::before{
    border:4px solid var(--input-color);
  }

  .sp-form-date>input[type="date"]{
    min-width: unset;
  }
  .sp-form-time>input[type="time"] {
    min-width: unset;
  }

  .sp-form-interaction>button {
    -webkit-box-flex:0;
    -ms-flex-positive:0;
    flex-grow:0;
    padding:.75rem 5em;
  }
}

.sp-form-recaptcha {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:start;
  -ms-flex-pack:start;
  justify-content:flex-start;
}

.sp-form-recaptcha-right {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:end;
  -ms-flex-pack:end;
  justify-content:flex-end;
}

.sp-form-recaptcha-center {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:center;
  -ms-flex-pack:center;
  justify-content:center;
}

.sp-form-file-button {
  padding:.8em 2em;
  font-weight: bold;
  cursor:pointer;
  color:#666666;
  background-color:#f6f6f6;
  border:none;
  border: solid 2px #a0a0a0;
  border-radius:var(--input-radius);
  transition: var(--transition);
  align-items: center;
  justify-content: center;
}
.sp-form-file-button::before{
  display: inline-block;
  content: url('data:image/svg+xml;utf-8,<svg fill="%23666" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M14.4,7.9l-5.7,5.7c-0.4,0.4-0.8,0.6-1.2,0.8c-0.7,0.3-1.4,0.3-2.1,0.2c-0.7-0.1-1.4-0.5-1.9-1c-0.4-0.4-0.6-0.8-0.8-1.2c-0.3-0.7-0.3-1.4-0.2-2.1c0.1-0.7,0.5-1.4,1-1.9L9.7,2c0.2-0.2,0.5-0.4,0.8-0.5c0.4-0.2,0.9-0.2,1.3-0.1C12.2,1.4,12.6,1.6,13,2c0.2,0.2,0.4,0.5,0.5,0.8c0.2,0.4,0.2,0.9,0.1,1.3c-0.1,0.4-0.3,0.8-0.6,1.2l-6.2,6.2c-0.1,0.1-0.2,0.1-0.3,0.2c-0.1,0.1-0.3,0.1-0.5,0c-0.2,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.1-0.2-0.2-0.3c-0.1-0.1-0.1-0.3,0-0.5c0-0.2,0.1-0.3,0.2-0.4l5.5-5.5l-0.9-0.9L4.7,9.3C4.5,9.5,4.4,9.7,4.3,10c-0.2,0.4-0.2,0.8-0.1,1.2c0.1,0.4,0.3,0.8,0.6,1.1c0.2,0.2,0.4,0.4,0.7,0.5c0.4,0.2,0.8,0.2,1.2,0.1c0.4-0.1,0.8-0.3,1.1-0.6l6.2-6.2c0.3-0.3,0.6-0.8,0.8-1.2c0.3-0.6,0.3-1.4,0.2-2c-0.1-0.7-0.5-1.3-1-1.8c-0.3-0.3-0.8-0.6-1.2-0.8c-0.6-0.3-1.4-0.3-2-0.2C10,0.2,9.3,0.5,8.8,1L2.5,7.4C2,7.9,1.6,8.5,1.4,9.1C1,10,0.9,11,1.1,11.9c0.2,1,0.6,1.9,1.4,2.6C3,15,3.5,15.4,4.1,15.6C5.1,16,6,16.1,7,15.9c1-0.2,1.9-0.6,2.6-1.4l5.7-5.7L14.4,7.9z"/></svg>');
  margin-left: -0.5em;
  width: 16px;
  height: 100%;
  vertical-align: middle;
}

.sp-form-file-button:focus { outline:0; }

.sp-from-file-default-drag-drop-area {
  color:#333333;
  background-color:var(--input-color);
  border:2.0px dashed #6c757d;
  border-radius:0;
  width:100%;
  height:200px;
  text-align:center;
  border-radius: var(--input-radius);
}

.sp-from-file-ondraghover-drag-drop-area {
  color:#333333;
  background-color:#dddddd;
  border:2.0px dashed #6c757d;
  border-radius:0;
  width:100%;
  height:200px;
  text-align:center;
  border-radius: var(--input-radius);
}

.sp-from-file-ondragleave-drag-drop-area {
  color:#333333;
  background-color:#dddddd;
  border:2.0px dashed #6c757d;
  border-radius:0;
  width:100%;
  height:200px;
  border-radius: var(--input-radius);
}

.sp-from-file-ondrop-drag-drop-area {
  color:#333333;
  background-color:var(--input-color);
  border:2.0px dashed #6c757d;
  border-radius:0;
  width:100%;
  height:200px;
  border-radius: var(--input-radius);
}

.sp-form-embedded>.sp-file-info:last-child { padding-bottom:0; }

.sp-file-info {
  padding-top:1em;
  padding-bottom:1em;
  line-height:1.5;
}

.sp-file-info>div { width:100%; }

.main-text {
  font-size:1em;
  font-weight:bold;
}

[class^="sp-step-flow-f"] {
  margin:3em 0 2em;
  }

[class^="sp-step-flow-f"]>.large-setting {
  display:flex;
  justify-content: center;
}

[class^="sp-step-flow-f"]>.small-setting { display:none; }

[class^="sp-step-flow-f"]>.large-setting,
[class^="sp-step-flow-f"]>.small-setting {
  text-align: center;
  margin: 0 auto;
  padding: 0 20px;
}

[class^="sp-step-flow-f"]>.large-setting>.step,
[class^="sp-step-flow-f"]>.small-setting>.step {
  word-wrap: break-word;
  min-width: 0;
  text-align:center;
}

[class^="sp-step-flow-f"]>.large-setting>.step {
  flex: 1;
  margin-right:36px;
  font-size:16px;
}

[class^="sp-step-flow-f"]>.small-setting>.step {
  font-size:14px;
}

[class^="sp-step-flow-f"]>.large-setting>.step:last-child,
[class^="sp-step-flow-f"]>.small-setting>.step:last-child {
  margin-right: 0;
}

[class^="sp-step-flow-f"]>.large-setting>.step>span,
[class^="sp-step-flow-f"]>.small-setting>.step>span {
  overflow: hidden;
  text-overflow: ellipsis;
  position:relative;
  display:block;
  padding-top: 16px;
  white-space:nowrap;
  color:#D3D6DB;
  font-weight:bold;
}

[class^="sp-step-flow-f"]>.large-setting>.step>span::before,
[class^="sp-step-flow-f"]>.small-setting>.step>span::before {
  position: absolute;
  content: "";
  display: block;
  top: 0;
  width: 100%;
  background: #D3D6DB;
}

[class^="sp-step-flow-f"]>.large-setting>.step>span::before {
  height: 6px;
  border-radius: 6px;
}

[class^="sp-step-flow-f"]>.small-setting>.step>span::before {
  height: 4px;
  border-radius: 4px;
}

[class^="sp-step-flow-f"]>.large-setting>.step.active>span,
[class^="sp-step-flow-f"]>.small-setting>.step.active>span { color:var(--main-color); }

[class^="sp-step-flow-f"]>.large-setting>.step.active>span::before,
[class^="sp-step-flow-f"]>.small-setting>.step.active>span::before { background:var(--main-color); }

@media (max-width: 765px) {
  [class^="sp-step-flow-f"]>.large-setting { display:none; }

  [class^="sp-step-flow-f"]>.small-setting {
    display:flex;
    justify-content: center;
    counter-reset:step;
  }

  [class^="sp-step-flow-f"]>.small-setting>.step>span { display: none; }

  [class^="sp-step-flow-f"]>.small-setting>.step {
    display: flex;
    align-items: center;
    width: auto;
    margin: 0;
    background: none;
    color: #ffffff;
    font-weight: bold;
  }

  [class^="sp-step-flow-f"]>.small-setting>.step::before {
    counter-increment: step 1;
    content: counter(step, decimal);
    width:24px;
    height:24px;
    background: var(--main-color);
    border-radius: 50%;
    font-size: 12px;
    line-height: 24px;
  }

  [class^="sp-step-flow-f"]>.small-setting>.step:not(:last-child) { flex-grow: 1; }

  [class^="sp-step-flow-f"]>.small-setting>.step:not(:last-child)::after {
    content: "";
    width: calc(100% - 24px);
    height:2px;
    background: var(--main-color);
    vertical-align: middle;
  }

  [class^="sp-step-flow-f"]>.small-setting>.step.active::after,
  [class^="sp-step-flow-f"]>.small-setting>.step.active~.step::before,
  [class^="sp-step-flow-f"]>.small-setting>.step.active~.step::after { background:#D3D6DB; }
}

HTMLの「"f0xx"」には、案内後アンケートDB内の対応するフィールドIDを記載ください。
HTMLの物件名の「record[xx]」には参照_物件マスタDBフィールド(内覧予約DB)のIDを記載ください。
また、 HTMLの参照_物件マスタの「record[xx]」には、物件マスタDB_物件ID(内覧予約DB)のフィールドIDを記載ください。
案内後アンケートフォームブロックでは、自動登録の設定を行っております。
フィールド 値タイプ
名前 引用(認証レコード値) 引用元: 内覧予約認証エリア( 内覧予約DB )
メールアドレス 引用(認証レコード値) 引用元: 内覧予約認証エリア( 内覧予約DB )

手順2:案内後アンケートフォームブロックにメールアクションを作成
案内後アンケートフォームからレコードが登録された際に、
「案内後アンケート回答完了メール」「案内後アンケート回答通知メール」が送信されるようにする設定を行います。
それぞれ以下のように設定してください。
配信名 配信条件・配信先 設定するクリックログインURL
案内後アンケート回答完了メール 配信条件:常時配信
メールアドレス
なし
案内後アンケート回答通知メール 配信条件:常時配信
参照_物件マスタDB > 担当メールアドレス
なし

また、それぞれ以下のように件名、本文を入力してください。
案内後アンケート回答完了メール
件名
【 {{@xxxxx.xxxxx.xxxxx}} 】ご案内のアンケートにご協力ありがとうございました

本文
{{@xxxxx.xxxxx}}様

本日は{{@xxxxx.xxxxx.xxxxx}}の案内につきまして
アンケートに回答いただき誠にありがとうございました。

アンケートにて貴重なご意見をいただきありがとうございました。今後の活動に活かして参ります。
今後とも変わらぬご愛顧のほど、よろしくお願い申し上げます。

※本メールは、システムからの自動送信メールです。
この送信元メールアドレスは送信専用となりますので、お問合せ等は以下連絡先までお願いします。
TEL:XXX-XXXX-XXXX

「{{@xxxxx.xxxxx.xxxxx}}」には「参照_物件マスタDB_物件名」「{{@xxxxx.xxxxx}}」には「名前」の差し替えキーワードをご記載ください。
案内後アンケート回答通知メール
件名
【 {{@xxxxx.xxxxx.xxxxx}} 】案内後アンケートに回答いただきました

本文
担当グループ:{{@xxxxx.xxxxx}}

案内後アンケートに回答いただきました。
アプリ利用画面のご確認、よろしくお願いいたします。

・物件名:{{@xxxxx.xxxxx.xxxxx}}
・ID:{{@xxxxx.xxxxx}}

※本メールは、システムからの自動送信メールです

{{@xxxxx.xxxxx.xxxxx}}」には「参照_物件マスタDB_物件名」「{{@xxxxx.xxxxx}}」には「担当グループ」「ID」の差し替えキーワードをご記載ください。
手順3:案内後アンケート回答ページに作成したブロックを埋め込み
案内後アンケート回答ページに共通ブロックの「ヘッダ」「フッター」と、手順1,2で作成した登録ブロックを埋め込みます。
HTML
<!-- ヘッダ -->
<sp:block name="fcb0xxxx"></sp:block>
<!-- 案内後アンケートフォーム -->
<h2>案内後アンケート</h2>
<sp:block name="ifb0xxxx"></sp:block>
<!-- フッター -->
<sp:block name="fcb0xxxx"></sp:block>

CSS
h2 {
    text-align: center;
}

h1 {
    text-align: center;
}

.reserve_attention {
    display: block;
    text-align: center;
    margin: 0.5rem 0;
}

.url-button {
    width: auto;
    /* font-size:0.875rem; */
    padding:0.5rem 0;
    text-align:center;
    text-decoration:none;
    flex: 1;

    color: #ffffff;
    background-color: #0D60DB;
    border: 1.0px solid #0D60DB;
    border-radius: calc(12px / 1.2);
}

.button-l {
    padding:0.5rem 6%;
    margin-right: 0.5rem;
}

.button-r {
    padding:0.5rem 5%;
    margin-left: 0.5rem;
}

.button {
    padding:0.5rem 5%;
}

.sp-url-button {
    text-align: center;
    width: auto;
    margin: 1.5rem auto;
    /* border: 1px solid #dddddd; */
}

HTMLの「"fcb0xxxx"」、「"rib0xxxx"」、「"ifb0xxxx"」には、それぞれヘッダ、案内後アンケートフォームブロック、フッターのIDを記載ください。

検討状況アンケートメール配信

内覧7日後に、お問い合わせ物件の検討状況を確認するフォームの配信を行うためのメールです。
アプリ管理内スケジュールトリガのメールアクションですが、次に記載する検討状況アンケートページへのクリックログインリンクを添付するメールのため、こちらに記載させていただきます。
なお、非同期アクションにおいてクリックログインURLを設置する場合、本番環境にリリースする必要があります。
アプリ管理のスケジュールトリガのメールアクションにて、実行タイミングを「毎日 10:00」にしていただき、
以下のように設定してください。
DB トリガ日との関係抽出 条件抽出(簡易) 配信指定方法
内覧予約DB 「予約日」年月日「の7日後」 「案内フラグ」等しい「案内完了」 複数レコード(メールアドレス)

また、以下のように件名、本文を入力してください。
件名
【 {{@xxxxx.xxxxx.xxxxx}} 】検討状況アンケートにご協力お願いしますs

本文
{{@xxxxx.xxxxx}}様

先日は{{@xxxxx.xxxxx.xxxxx}}の内覧にご参加いただきましてありがとうございました。

この度、{{@xxxxx.xxxxx}}様に
{{@xxxxx.xxxxx.xxxxx}}の検討状況を回答いただきたくご連絡しました。

お手数おかけしますが、以下のリンクより検討状況のアンケートに回答ご協力いいただけますようお願いいたします。
───────────────────────────────────────
◆アンケートページURL
{{@_url.cl.xxxxxx.xxxxxxx/xxxx/xxxx}} 
───────────────────────────────────────

※本メールは、システムからの自動送信メールです。
この送信元メールアドレスは送信専用となりますので、お問合せ等は以下連絡先までお願いします。

TEL:XXX-XXXX-XXXX

「{{@xxxxx.xxxxx.xxxxx}}」には「参照_物件マスタDB_物件名」、「{{@xxxxx.xxxxx}}」「名前」の差し替えキーワードをご記載ください
「{{@_url.cl.xxxxxx.xxxxxxx/xxxx/xxxx}}」には、「検討状況アンケートページ」のクリックログインURLをご記載ください。

検討状況アンケートページ

認証エリアの項目で作成した内覧認証エリア内の検討状況アンケートページを書き換えていきます。
完成イメージ

手順1:検討状況アンケートフォームブロックを作成
検討状況アンケート回答フォームは、更新フォームブロックで作成します。
以下の通りに設定を行います。
更新対象DB 更新対象レコード 設定方法
内覧予約DB 認証レコード ソース設定

完成イメージ

HTML
<div class="sp-form-container">
  <div class="sp-step-flow-f24431">
    <div class="large-setting arrow sp-clearfix">
      <div class="step active" title="入力">
        <span>入力</span>
      </div>
      <div class="step" title="確認">
        <span>確認</span>
      </div>
      <div class="step" title="完了">
        <span>完了</span>
      </div>
    </div>
    <div class="small-setting arrow sp-clearfix">
      <div class="step active" title="入力">
        <span>入力</span>
      </div>
      <div class="step" title="確認">
        <span>確認</span>
      </div>
      <div class="step" title="完了">
        <span>完了</span>
      </div>
    </div>
  </div>
  <div class="sp-form-item sp-form-html" th:inline="none"><p><span style="font-size: 18pt;">検討状況アンケート回答フォーム</span></p></div>
  <div class="sp-form-item sp-form-html" th:inline="none">先日内覧いただきました物件の検討状況をご入力の上、「確認画面へ」ボタンを押してください。<br>
  「検討理由」には検討いただいている理由を、<br>「検討備考欄」には知りたい情報や求めるプランなどをご入力ください。</div>
  <!--/* 検討状況(consideStatus) */-->
  <sp:input-field name="f0xx"></sp:input-field>
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      <th:block th:text="${fields['f0xx'].label}">
        Label
      </th:block>
      <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
    </div>
    <div class="sp-form-data">
      <div class="sp-form-dropdown">
        <select class="sp-form-control" th:name="${fields['f0xx'].name}">
          <option value="" th:text="${fields['f0xx'].unselectedLabel}" th:selected="${inputs['f0xx'] == null}">Select option</option>
          <option th:each="option : ${fields['f0xx'].options}" th:value="${option.id}" th:text="${option.label}" th:selected="${inputs['f0xx'] == #strings.toString(option.id)}">Item</option>
        </select>
        <span class="sp-form-dropdown-icon"></span>
        </div>
      <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
      <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
    </div>
  </div>
  <!--/* 検討理由(consideReason) */-->
  <sp:input-field name="f0xx"></sp:input-field>
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      <th:block th:text="${fields['f0xx'].label}">
        Label
      </th:block>
      <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
    </div>
    <div class="sp-form-data">
      <textarea class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:text="${#maps.containsKey(inputs, 'f0xx') ? inputs['f0xx'] : siteClient.record[xx]}"></textarea>
      <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
      <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
    </div>
  </div>
  <!--/* 検討備考欄(consideRemarks) */-->
  <sp:input-field name="f0xx"></sp:input-field>
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      <th:block th:text="${fields['f0xx'].label}">
        Label
      </th:block>
      <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
    </div>
    <div class="sp-form-data">
      <textarea class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:text="${#maps.containsKey(inputs, 'f0xx') ? inputs['f0xx'] : siteClient.record[xx]}"></textarea>
      <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
      <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
    </div>
  </div>
  <div class="sp-form-item sp-form-interaction">
    <button class="sp-form-prev-button" type="submit" name="action" value="previous" th:if="!${step.isFirst}" th:text="${step.prevButtonLabel}">Prev</button>
    <button class="sp-form-next-button" type="submit" name="action" value="next" th:text="${step.nextButtonLabel}">Next</button>
  </div>
</div>

HTML(確認ステップ)
<div class="sp-form-container">
    <div class="sp-step-flow-f24431">
    <div class="large-setting arrow sp-clearfix">
      <div class="step" title="入力">
        <span>入力</span>
      </div>
      <div class="step active" title="確認">
        <span>確認</span>
      </div>
      <div class="step" title="完了">
        <span>完了</span>
      </div>
    </div>
    <div class="small-setting arrow sp-clearfix">
      <div class="step" title="入力">
        <span>入力</span>
      </div>
      <div class="step active" title="確認">
        <span>確認 active</span>
      </div>
      <div class="step" title="完了">
        <span>完了</span>
      </div>
    </div>
  </div>
  <div class="sp-form-item sp-form-html" th:inline="none"><p><span style="font-size: 18pt;">検討状況アンケート回答フォーム</span></p></div>
  <div class="sp-form-item sp-form-html" th:inline="none">内容をご確認の上、よろしければ「アンケート回答」ボタンを押してください。</div>
  <!--/* 検討状況(consideStatus) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']?.label}">Item</span>
    </div>
  </div>
  <!--/* 検討理由(consideReason) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded">
        <th:block th:each="str, stat : ${values['f0xx']?.lines}">
          <th:block th:text="${str}">
            Example
          </th:block>
          <br th:unless="${stat.last}">
        </th:block>
      </span>
    </div>
  </div>
  <!--/* 検討備考欄(consideRemarks) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded">
        <th:block th:each="str, stat : ${values['f0xx']?.lines}">
          <th:block th:text="${str}">
            Example
          </th:block>
          <br th:unless="${stat.last}">
        </th:block>
      </span>
    </div>
  </div>
  <div class="sp-form-item sp-form-interaction">
    <button class="sp-form-prev-button" type="submit" name="action" value="previous" th:if="!${step.isFirst}" th:text="${step.prevButtonLabel}">Prev</button>
    <button class="sp-form-next-button" type="submit" name="action" value="next" th:text="${step.nextButtonLabel}">Next</button>
  </div>
</div>

CSS
:root {
  /*=============================
	カスタムプロパティ
  ==============================*/
  --base-color: #FFFFFF; /* フォームブロックの背景色 */
  --main-color: #0D60DB; /* メインカラー */
  --accent-color: #B8250F; /* アクセントカラー */
  --input-color: #F5F7FA; /* 入力欄の背景色 */
  --input-border-color: #D3D6DB; /* 入力欄の枠線の色 */
  --input-radius: 12px; /* 入力欄の角の丸さ */
  --transition: 0.1s; /* アニメーション時間 */

  /*------ 合計100%になるよう調整 -------*/
  --label-width: 25%; /* ラベル部分の幅 */
  --data-width: 75%; /* データ部分の幅 */
}

.sp-record-list-card-actions {
  width: auto;
  font-size:0.875rem;
  padding:0.5rem 0;
  text-align:center;
  text-decoration:none;
  flex: 1;
}

.sp-record-list-card-actions a {
  color: #ffffff;
  background-color: #0D60DB;
  border: 1.0px solid #0D60DB;
  border-radius: calc(12px / 1.2);
  /* background-color:#ffffff; */
  font-size:0.875rem;
  padding:0.5rem 0.75rem;
  text-align:center;
  text-decoration:none;
  flex: 1;
}

.sp-form-container {
  font-size:16px;
  padding:1em;
  box-sizing:border-box;
  max-width: 960px;
  color:#505050;
  background-color:var(--base-color);
  border:1px solid #E1E5EB;
  border-radius:var(--input-radius);
}

.sp-form-container .sp-form-item:not(:last-child) {
  margin-bottom:0.5em;
  padding:0.5em 1em;
}

.sp-form-field,
.sp-form-group {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
  -ms-flex-direction:column;
  flex-direction:column;
}

.sp-form-field>.sp-form-label,
.sp-form-group>.sp-form-label {
  font-size:1.15em;
  font-weight:bold;
  padding:.25em 0;
  word-break:break-all;
  box-sizing:border-box;
  color:#333333;
}

.sp-form-group-item>.sp-form-label {
  word-break:break-all;
  display:inline-block;
  margin-bottom:.2em;
}

.sp-form-field>.sp-form-data,
.sp-form-group>.sp-form-data {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
  -ms-flex-direction:column;
  flex-direction:column;
  word-break:break-all;
  padding:0.25em 0;
  box-sizing:border-box;
}

.sp-form-group-item>.sp-form-data {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
  -ms-flex-direction:column;
  flex-direction:column;
}

.sp-form-required {
  display:inline-block;
  margin:0 .5em;
  padding: 3px 6px;
  background:var(--accent-color);
  color:#ffffff;
  line-height:1;
  border-radius:.25em;
  font-size:0.7em;
  font-weight: bold;
  vertical-align: middle;
}

.sp-form-group-item:not(:last-child) { margin-bottom:.5em; }

.sp-form-noted {
  font-size:.8em;
  color:#808080;
  word-break:break-all;
  margin-top:.5em;
  padding-left:min(calc(var(--input-radius) / 2 - 4px), 8px);
}

.sp-form-error {
  font-size:.8em;
  color:var(--accent-color);
  padding-left:min(calc(var(--input-radius) / 2 - 4px), 8px);
}

.sp-form-control {
  -moz-appearance:none;
  -webkit-appearance:none;
  -ms-progress-appearance:none;
  appearance:none;
  font-family:inherit;
  font-size:1em;
  line-height:1.5;
  padding:.3em .7em;
  padding-left:clamp(12px, calc(var(--input-radius) - 2px), 24px);
  background:var(--input-color);
  color:#333333;
  box-sizing:border-box;
  width:100%;
  height:48px;
  margin-bottom:.3em;
  border:none;
  outline:none;
  border-radius:var(--input-radius);
  box-shadow:0 0 0 0.5px var(--input-border-color);
}
.sp-form-control:focus {
  box-shadow:0 0 0 2px var(--main-color);
}
.sp-form-control[type="number"] {
  height: 36px;
}

.sp-form-control:placeholder-shown { color:#aaa; }

.sp-form-control::placeholder { color:#aaa; }

.sp-form-control::-ms-input-placeholder { color:#aaa; }

.sp-form-control:-ms-input-placeholder { color:#aaa; }

.sp-form-control:-moz-placeholder { color:#aaa; }

textarea.sp-form-control {
  resize:vertical;
  padding-top:clamp(6px, calc(var(--input-radius) / 2), 18px);
  height:calc(1.5em * 5);
}

select.sp-form-control,
option.sp-form-control {
  -moz-appearance:none;
  -webkit-appearance:none;
  -ms-progress-appearance:none;
  appearance:none;
  padding-right:1.5em;
}

.sp-form-control>option { background:#FFFFFF;}

select.sp-form-control::-ms-expand { display:none; }

.sp-form-phone .sp-form-control { max-width:20em; }

.sp-form-phone>*:not(:only-child) { margin-right:.5rem; }

.sp-form-dropdown { position:relative; }

.sp-form-dropdown-icon {
  display:block;
  position:absolute;
  top:1.3em;
  right:1em;
  line-height:0;
  pointer-events:none;
}

.sp-form-dropdown-icon:after {
  content:"";
  display:block;
  border-top:0.333em solid #888;
  border-right:.333em solid transparent;
  border-left:.333em solid transparent;
}

.sp-form-selection {
  display:block;
  cursor: pointer;
  margin-bottom:.3em;
  padding:.25em .75em .35em;
  background:var(--input-color);
  border-radius: var(--input-radius);
  box-shadow:0 0 0 0.5px var(--input-border-color) ;
}

.sp-form-selection-label {
  display: inline-block;
  position: relative;
  vertical-align:middle;
  padding: 4px 0;
}

.sp-form-datetimes,
.sp-form-date,
.sp-form-time,
.sp-form-timezone {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:horizontal;
  -webkit-box-direction:normal;
  -ms-flex-flow:row wrap;
  flex-flow:row wrap;
  -webkit-box-align:center;
  -ms-flex-align:center;
  align-items:center;
}

.sp-form-datetime,
.sp-form-date,
.sp-form-time,
.sp-form-timezone {
  margin-right:.5rem;
  -ms-flex-wrap:nowrap;
  flex-wrap:nowrap;
}

.sp-form-datetime { max-width:20em; }

.sp-form-phone {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:horizontal;
  -webkit-box-direction:normal;
  -ms-flex-flow:row wrap;
  flex-flow:row wrap;
  -webkit-box-align:center;
  -ms-flex-align:center;
  align-items:center;
}

.sp-form-date-separator {
  width:1em;
  margin-bottom: .3em;
  text-align:center;
  -ms-flex-negative:1;
  flex-shrink:0;
}

.sp-form-number { max-width:20em; }

.sp-form-email-reenter,
.sp-form-password-reenter {
  font-size:.9em;
  margin-bottom:.2em;
  padding-left:min(calc(var(--input-radius) / 2 - 4px), 8px);
}

.sp-form-html p { margin:0; }

.sp-form-interaction {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -ms-flex-wrap:wrap;
  flex-wrap:wrap;
  margin-top:1em;
}

.sp-form-prev-button {
  color:#333333;
  background-color:var(--base-color);
  border:2.0px solid #666666;
}

.sp-form-next-button,
.sp-form-login-button {
  color:#ffffff;
  background-color:var(--main-color);
  border:none;
}

.sp-form-field .sp-form-embedded { padding-left:.25em; }

.sp-form-selection>input[type="radio"],
.sp-form-selection>input[type="checkbox"] {
  display: none;
  vertical-align:middle;
  margin-left:0;
}

.sp-form-selection>input[type="radio"]+.sp-form-selection-label::before,
.sp-form-selection>input[type="checkbox"]+.sp-form-selection-label::before{
  display: inline-block;
  content:"";
  position: relative;
  box-sizing: border-box;
  top: 4px;
  margin-right: 6px;
  width: 20px;
  height: 20px;
  background: #ffffff;
  border:10px solid #ffffff;
  box-shadow: 0 0 0 0.5px var(--input-border-color);
  transition: var(--transition);
}

.sp-form-selection>input[type="radio"]+.sp-form-selection-label::before {
  border-radius: 50%;
}

.sp-form-selection>input[type="checkbox"]+.sp-form-selection-label::before {
  border-radius: min(var(--input-radius), 4px);
}

.sp-form-selection>input[type="radio"]:checked+.sp-form-selection-label::before{
  background: var(--main-color);
  border:4px solid #ffffff;
}
.sp-form-selection>input[type="checkbox"]+.sp-form-selection-label::after{
  border-right: 3px solid var(--main-color);
  border-bottom: 3px solid var(--main-color);
  content: '';
  display: inline-block;
  width: 6px;
  height: 10px;
  left: 9px;
  margin-top: -7px;
  position: absolute;
  top: 50%;
  transform: rotate(45deg);
  opacity: 0;
  transition: var(--transition);
}

.sp-form-selection>input[type="checkbox"]:checked+.sp-form-selection-label::after{
  left: 6px;
  opacity: 1;
}

.sp-form-date>input,
.sp-form-time>input { max-width:7em; }

.sp-form-date>input[type="date"]{
  min-width: 140px;
  max-width: none;
}
.sp-form-time>input[type="time"] {
  min-width: 92px;
  max-width: none;
}

.sp-form-interaction>button {
  -webkit-box-flex:1;
  -ms-flex-positive:1;
  flex-grow:1;
  cursor:pointer;
  font-size:1em;
  font-weight:bold;
  line-height:1.5;
  margin:.5rem;
  padding:.75rem 0;
  text-align:center;
  -webkit-user-select:none;
  -moz-user-select:none;
  -ms-user-select:none;
  user-select:none;
  white-space:nowrap;
  border-radius:var(--input-radius);
}

@media (min-width:768px) {
  .sp-form-container {
    font-size:initial;
    padding:3em;
    margin:2em auto;
  }

.sp-form-container .sp-form-item:not(:last-child) {
  margin-bottom:0.5em;
  padding-bottom:0.5em;
}

  .sp-form-field,
  .sp-form-group {
    -webkit-box-orient:horizontal;
    -webkit-box-direction:normal;
    -ms-flex-flow:row nowrap;
    flex-flow:row nowrap;
  }

  .sp-form-field>.sp-form-label,
  .sp-form-group>.sp-form-label {
    font-size:1em;
    width:var(--label-width);
    padding:.5em;
  }

  .sp-form-group .sp-form-group-item>.sp-form-label {
    font-size:.9em;
    padding-right:.5em;
  }

  .sp-form-field>.sp-form-data,
  .sp-form-group>.sp-form-data {
    font-size:1em;
    width:var(--data-width);
    padding:.5em;
  }

  .sp-form-group>.sp-form-data {
    -webkit-box-orient:horizontal;
    -webkit-box-direction:normal;
    -ms-flex-flow:row wrap;
    flex-flow:row wrap;
  }

  .sp-form-group.sp-form-group-vertical>.sp-form-data {
    -webkit-box-orient:vertical;
    -webkit-box-direction:normal;
    -ms-flex-direction:column;
    flex-direction:column;
  }

  .sp-form-required {
    font-size:0.8em;
  }

  .sp-form-group-item { padding:.25em; }

  .sp-form-group-item:not(:last-child) { margin-bottom:0; }

  .sp-form-control { font-size:.9em; }

  .sp-form-selection {
    font-size:.9em;
    margin:0 .5em 0 0;
    padding-right:1em;
    background:none;
    box-shadow:none;
  }
  .sp-form-selection-vertical>.sp-form-selection {
    margin:0 auto 0 0;
    padding-right: 4em;
  }

  .sp-form-selection-vertical {
    display:-webkit-box;
    display:-ms-flexbox;
    display:flex;
    -webkit-box-orient:vertical;
    -webkit-box-direction:normal;
    -ms-flex-direction:column;
    flex-direction:column;
  }

  .sp-form-selection-horizontal {
    display:-webkit-box;
    display:-ms-flexbox;
    display:flex;
    -webkit-box-orient:horizontal;
    -webkit-box-direction:normal;
    -ms-flex-flow:row wrap;
    flex-flow:row wrap;
  }

  .sp-form-interaction {
    justify-content:center;
    margin-top:2em;
  }

  .sp-form-embedded { font-size:.9em; }

  .sp-form-group-item .sp-form-embedded { padding-right:5em; }

  .sp-form-selection>input[type="radio"]+.sp-form-selection-label::before,
  .sp-form-selection>input[type="checkbox"]+.sp-form-selection-label::before{
    background: var(--input-color);
    border:10px solid var(--input-color);
  }

  .sp-form-selection>input[type="radio"]:hover+.sp-form-selection-label::before,
  .sp-form-selection>input[type="checkbox"]:hover+.sp-form-selection-label::before{
    border:10px solid #dddddd;
  }

  .sp-form-selection>input[type="radio"]:checked+.sp-form-selection-label::before{
    border:4px solid var(--input-color);
  }

  .sp-form-date>input[type="date"]{
    min-width: unset;
  }
  .sp-form-time>input[type="time"] {
    min-width: unset;
  }

  .sp-form-interaction>button {
    -webkit-box-flex:0;
    -ms-flex-positive:0;
    flex-grow:0;
    padding:.75rem 5em;
  }
}

.sp-form-recaptcha {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:start;
  -ms-flex-pack:start;
  justify-content:flex-start;
}

.sp-form-recaptcha-right {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:end;
  -ms-flex-pack:end;
  justify-content:flex-end;
}

.sp-form-recaptcha-center {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:center;
  -ms-flex-pack:center;
  justify-content:center;
}

.sp-form-file-button {
  padding:.8em 2em;
  font-weight: bold;
  cursor:pointer;
  color:#666666;
  background-color:#f6f6f6;
  border:none;
  border: solid 2px #a0a0a0;
  border-radius:var(--input-radius);
  transition: var(--transition);
  align-items: center;
  justify-content: center;
}
.sp-form-file-button::before{
  display: inline-block;
  content: url('data:image/svg+xml;utf-8,<svg fill="%23666" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M14.4,7.9l-5.7,5.7c-0.4,0.4-0.8,0.6-1.2,0.8c-0.7,0.3-1.4,0.3-2.1,0.2c-0.7-0.1-1.4-0.5-1.9-1c-0.4-0.4-0.6-0.8-0.8-1.2c-0.3-0.7-0.3-1.4-0.2-2.1c0.1-0.7,0.5-1.4,1-1.9L9.7,2c0.2-0.2,0.5-0.4,0.8-0.5c0.4-0.2,0.9-0.2,1.3-0.1C12.2,1.4,12.6,1.6,13,2c0.2,0.2,0.4,0.5,0.5,0.8c0.2,0.4,0.2,0.9,0.1,1.3c-0.1,0.4-0.3,0.8-0.6,1.2l-6.2,6.2c-0.1,0.1-0.2,0.1-0.3,0.2c-0.1,0.1-0.3,0.1-0.5,0c-0.2,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.1-0.2-0.2-0.3c-0.1-0.1-0.1-0.3,0-0.5c0-0.2,0.1-0.3,0.2-0.4l5.5-5.5l-0.9-0.9L4.7,9.3C4.5,9.5,4.4,9.7,4.3,10c-0.2,0.4-0.2,0.8-0.1,1.2c0.1,0.4,0.3,0.8,0.6,1.1c0.2,0.2,0.4,0.4,0.7,0.5c0.4,0.2,0.8,0.2,1.2,0.1c0.4-0.1,0.8-0.3,1.1-0.6l6.2-6.2c0.3-0.3,0.6-0.8,0.8-1.2c0.3-0.6,0.3-1.4,0.2-2c-0.1-0.7-0.5-1.3-1-1.8c-0.3-0.3-0.8-0.6-1.2-0.8c-0.6-0.3-1.4-0.3-2-0.2C10,0.2,9.3,0.5,8.8,1L2.5,7.4C2,7.9,1.6,8.5,1.4,9.1C1,10,0.9,11,1.1,11.9c0.2,1,0.6,1.9,1.4,2.6C3,15,3.5,15.4,4.1,15.6C5.1,16,6,16.1,7,15.9c1-0.2,1.9-0.6,2.6-1.4l5.7-5.7L14.4,7.9z"/></svg>');
  margin-left: -0.5em;
  width: 16px;
  height: 100%;
  vertical-align: middle;
}

.sp-form-file-button:focus { outline:0; }

.sp-from-file-default-drag-drop-area {
  color:#333333;
  background-color:var(--input-color);
  border:2.0px dashed #6c757d;
  border-radius:0;
  width:100%;
  height:200px;
  text-align:center;
  border-radius: var(--input-radius);
}

.sp-from-file-ondraghover-drag-drop-area {
  color:#333333;
  background-color:#dddddd;
  border:2.0px dashed #6c757d;
  border-radius:0;
  width:100%;
  height:200px;
  text-align:center;
  border-radius: var(--input-radius);
}

.sp-from-file-ondragleave-drag-drop-area {
  color:#333333;
  background-color:#dddddd;
  border:2.0px dashed #6c757d;
  border-radius:0;
  width:100%;
  height:200px;
  border-radius: var(--input-radius);
}

.sp-from-file-ondrop-drag-drop-area {
  color:#333333;
  background-color:var(--input-color);
  border:2.0px dashed #6c757d;
  border-radius:0;
  width:100%;
  height:200px;
  border-radius: var(--input-radius);
}

.sp-form-embedded>.sp-file-info:last-child { padding-bottom:0; }

.sp-file-info {
  padding-top:1em;
  padding-bottom:1em;
  line-height:1.5;
}

.sp-file-info>div { width:100%; }

.main-text {
  font-size:1em;
  font-weight:bold;
}

[class^="sp-step-flow-f"] {
  margin:3em 0 2em;
  }

[class^="sp-step-flow-f"]>.large-setting {
  display:flex;
  justify-content: center;
}

[class^="sp-step-flow-f"]>.small-setting { display:none; }

[class^="sp-step-flow-f"]>.large-setting,
[class^="sp-step-flow-f"]>.small-setting {
  text-align: center;
  margin: 0 auto;
  padding: 0 20px;
}

[class^="sp-step-flow-f"]>.large-setting>.step,
[class^="sp-step-flow-f"]>.small-setting>.step {
  word-wrap: break-word;
  min-width: 0;
  text-align:center;
}

[class^="sp-step-flow-f"]>.large-setting>.step {
  flex: 1;
  margin-right:36px;
  font-size:16px;
}

[class^="sp-step-flow-f"]>.small-setting>.step {
  font-size:14px;
}

[class^="sp-step-flow-f"]>.large-setting>.step:last-child,
[class^="sp-step-flow-f"]>.small-setting>.step:last-child {
  margin-right: 0;
}

[class^="sp-step-flow-f"]>.large-setting>.step>span,
[class^="sp-step-flow-f"]>.small-setting>.step>span {
  overflow: hidden;
  text-overflow: ellipsis;
  position:relative;
  display:block;
  padding-top: 16px;
  white-space:nowrap;
  color:#D3D6DB;
  font-weight:bold;
}

[class^="sp-step-flow-f"]>.large-setting>.step>span::before,
[class^="sp-step-flow-f"]>.small-setting>.step>span::before {
  position: absolute;
  content: "";
  display: block;
  top: 0;
  width: 100%;
  background: #D3D6DB;
}

[class^="sp-step-flow-f"]>.large-setting>.step>span::before {
  height: 6px;
  border-radius: 6px;
}

[class^="sp-step-flow-f"]>.small-setting>.step>span::before {
  height: 4px;
  border-radius: 4px;
}

[class^="sp-step-flow-f"]>.large-setting>.step.active>span,
[class^="sp-step-flow-f"]>.small-setting>.step.active>span { color:var(--main-color); }

[class^="sp-step-flow-f"]>.large-setting>.step.active>span::before,
[class^="sp-step-flow-f"]>.small-setting>.step.active>span::before { background:var(--main-color); }

@media (max-width: 765px) {
  [class^="sp-step-flow-f"]>.large-setting { display:none; }

  [class^="sp-step-flow-f"]>.small-setting {
    display:flex;
    justify-content: center;
    counter-reset:step;
  }

  [class^="sp-step-flow-f"]>.small-setting>.step>span { display: none; }

  [class^="sp-step-flow-f"]>.small-setting>.step {
    display: flex;
    align-items: center;
    width: auto;
    margin: 0;
    background: none;
    color: #ffffff;
    font-weight: bold;
  }

  [class^="sp-step-flow-f"]>.small-setting>.step::before {
    counter-increment: step 1;
    content: counter(step, decimal);
    width:24px;
    height:24px;
    background: var(--main-color);
    border-radius: 50%;
    font-size: 12px;
    line-height: 24px;
  }

  [class^="sp-step-flow-f"]>.small-setting>.step:not(:last-child) { flex-grow: 1; }

  [class^="sp-step-flow-f"]>.small-setting>.step:not(:last-child)::after {
    content: "";
    width: calc(100% - 24px);
    height:2px;
    background: var(--main-color);
    vertical-align: middle;
  }

  [class^="sp-step-flow-f"]>.small-setting>.step.active::after,
  [class^="sp-step-flow-f"]>.small-setting>.step.active~.step::before,
  [class^="sp-step-flow-f"]>.small-setting>.step.active~.step::after { background:#D3D6DB; }
}

HTMLの「"f0xx"」、「record[xx]」には、内覧予約DB内の対応するフィールドIDを記載ください。
手順2: 検討状況アンケートフォームブロックにメールアクションを作成
検討状況アンケート回答フォームからレコードが更新された際に、
「検討状況アンケート回答完了メール」「検討状況アンケート回答通知メール」が送信されるようにする設定を行います。
それぞれ以下のように設定してください。
配信名 配信条件・配信先 設定するクリックログインURL
検討状況アンケート回答完了メール 配信条件:常時配信
メールアドレス
なし
検討状況アンケート回答通知メール 配信条件:常時配信
参照_物件マスタDB > 担当メールアドレス
なし

また、それぞれ以下のように件名、本文を入力してください。
検討状況アンケート回答完了メール
件名
【 {{@xxxxx.xxxxx.xxxxx}} 】検討状況アンケートにご協力ありがとうございました

本文
{{@xxxxx.xxxxx}}様

本日は{{@xxxxx.xxxxx.xxxxx}}につきまして
検討状況のアンケートに回答いただき誠にありがとうございました。

検討状況に合わせたご案内をいたします。
今後とも、よろしくお願い申し上げます。

※本メールは、システムからの自動送信メールです。
この送信元メールアドレスは送信専用となりますので、お問合せ等は以下連絡先までお願いします。
TEL:XXX-XXXX-XXXX

「{{@xxxxx.xxxxx.xxxxx}}」には「参照_物件マスタDB_物件名」、「{{@xxxxx.xxxxx}}」には「名前」の差し替えキーワードをご記載ください。
検討状況アンケート回答通知メール
件名
【 {{@xxxxx.xxxxx.xxxxx}} 】検討状況アンケートに回答いただきました

本文
担当グループ:{{@xxxxx.xxxxx}}

検討状況アンケートに回答いただきました。
アプリ利用画面のご確認、よろしくお願いいたします。

・物件名:{{@xxxxx.xxxxx.xxxxx}}
・予約ID:{{@xxxxx.xxxxx}}
・予約日時:{{@xxxxx.xxxxx}} {{@xxxxx.xxxxx}}
・予約番号:{{@xxxxx.xxxxx}}
-----------------------
※本メールは、システムからの自動送信メールです。

「{{@xxxxx.xxxxx.xxxxx}}」には「参照_物件マスタDB_物件名」、「{{@xxxxx.xxxxx}}」には「担当グループ」「予約ID」「予約日」「予約時間」「予約番号」の差し替えキーワードをご記載ください。
手順3:検討状況アンケートページに作成したブロックを埋め込み
検討状況アンケートページに共通ブロックの「ヘッダ」「フッター」と、手順1,2で作成した更新ブロックを埋め込みます。
HTML
<!-- ヘッダ -->
<sp:block name="fcb0xxxx"></sp:block>
<!-- 検討状況アンケート回答フォーム -->
<h1>検討状況アンケート</h1>
<sp:block name="ufb0xxxx"></sp:block>
<!-- フッター -->
<sp:block name="fcb0xxxx"></sp:block>

CSS
h2 {
    text-align: center;
}

h1 {
    text-align: center;
}

.reserve_attention {
    display: block;
    text-align: center;
    margin: 0.5rem 0;
}

.url-button {
    width: auto;
    /* font-size:0.875rem; */
    padding:0.5rem 0;
    text-align:center;
    text-decoration:none;
    flex: 1;

    color: #ffffff;
    background-color: #0D60DB;
    border: 1.0px solid #0D60DB;
    border-radius: calc(12px / 1.2);
}

.button-l {
    padding:0.5rem 6%;
    margin-right: 0.5rem;
}

.button-r {
    padding:0.5rem 5%;
    margin-left: 0.5rem;
}

.button {
    padding:0.5rem 5%;
}

.sp-url-button {
    text-align: center;
    width: auto;
    margin: 1.5rem auto;
    /* border: 1px solid #dddddd; */
}

HTMLの「"fcb0xxxx"」、「"ufbxxxx"」には、それぞれ作成した「ヘッダ」、「検討状況アンケート回答フォーム」、「フッター」のIDを記載ください。

スケジュールトリガエラーメール送信

スケジュールトリガにてエラーが発生・解消した際にメールが送信されます。
手順1:スケジュールトリガエラー内容メール送信
エラーが発生した際に、内容を運用担当者に配信するメールを作成します。
アプリ管理のエラー内容メール通知DBの登録トリガの非同期アクションから、以下のように設定ください。
経路 条件 指定方法
一部の経路(API) エラーフラグ:等しい:エラー 固定メールアドレス(運用担当者)

また、以下のように件名、本文を入力してください。
件名
エラーが発生しました

本文
下記のエラーが発生しました。
エラーメッセージをご確認の上、対応お願いいたします。

対応者を対応前に入力し、エラーを解消しましたらエラーフラグを「解消」に
変更おねがいいたします。

対象のフィールドID:{{@xxxxx.xxxxx}}

エラーメッセージ
---------
{{@xxxxx.xxxxx}}
---------

「「{{@xxxxx.xxxxx}}」には「ID」「エラーメッセージ」の差し替えキーワードをご記載ください。
手順2:スケジュールトリガエラー解消メール送信
エラーが解消した際に運用担当者に配信するメールを作成します。
アプリ管理のエラー内容メール通知DBの更新トリガの非同期アクションから、以下のように設定ください。
経路 条件 指定方法
一部の経路(API) エラーフラグ:等しい:エラー解消 固定メールアドレス(運用担当者)

また、以下のように件名、本文を入力してください。
件名
エラーが解消しました

本文
エラーが解消しました。

対応者:{{@xxxxx.xxxxx}}

対象のフィールドID:{{@xxxxx.xxxxx}}

エラーメッセージ
---------
{{@xxxxx.xxxxx}}
---------

「{{@xxxxx.xxxxx}}」「{{@xxxxx.xxxxx.xxxxx}}」には「対応者」「ID」「エラーメッセージ」の差し替えキーワードをご記載ください。

資料請求ページ

認証エリアの項目で作成した内覧認証エリア内の資料請求ページを書き換えていきます。
完成イメージ

手順1:資料請求フォームブロックを作成
資料請求フォームは、登録フォームブロックで作成します。
以下の通りに設定を行います。
登録対象DB 設定方法
資料請求DB ソース設定

完成イメージ

HTML
<div class="sp-form-container">
  <div class="sp-step-flow-f24431">
    <div class="large-setting arrow sp-clearfix">
      <div class="step active" title="入力">
        <span>入力</span>
      </div>
      <div class="step" title="確認">
        <span>確認</span>
      </div>
      <div class="step" title="完了">
        <span>完了</span>
      </div>
    </div>
    <div class="small-setting arrow sp-clearfix">
      <div class="step active" title="入力">
        <span>入力</span>
      </div>
      <div class="step" title="確認">
        <span>確認</span>
      </div>
      <div class="step" title="完了">
        <span>完了</span>
      </div>
    </div>
  </div>
  <div class="sp-form-item sp-form-html" th:inline="none"><p><span style="font-size: 18pt;">資料請求フォーム</span></p></div>
  <div class="sp-form-item sp-form-html" th:inline="none">必要事項をご入力の上、「確認画面へ」ボタンを押してください。</div>
  <!--/* 名前(name) */-->
  <sp:input-field name="f0xx"></sp:input-field>
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      <th:block th:text="${fields['f0xx'].label}">
        Label
      </th:block>
      <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
    </div>
    <div class="sp-form-data">
      <input type="text" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="|${inputs['f0xx'] ?:'スパイラル太郎'}|" th:if="${fields['f0xx'].control == 'text'}">
      <!--ZipCode Option-->
      <div class="sp-form-zip-code" th:if="${fields['f0xx'].control == 'zipCode'}">
        <input type="text" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="${fields['f0xx'].value}">
        <button class="sp-form-zip-code-button" th:data-zipcode="|zipCodeSearch${fields['f0xx'].name}|" th:if="${fields['f0xx'].addressByZipCode != null}" th:text="${fields['f0xx'].zipCodeButtonLabel}">住所検索</button>
      </div>
      <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
      <span class="sp-form-error" th:data-zipcode="|zipCodeError${fields['f0xx'].name}|" th:text="${errors['f0xx']?.message}">Error message</span>
    </div>
  </div>
  <!--/* メールアドレス(mail) */-->
  <sp:input-field name="f0xx"></sp:input-field>
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      <th:block th:text="${fields['f0xx'].label}">
        Label
      </th:block>
      <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
    </div>
    <div class="sp-form-data">
      <input type="email" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="|${inputs['f0xx'] ?:'sample@spiral-platform.co.jp'}|">
      <div th:if="${fields['f0xx'].collation}">
        <span class="sp-form-email-reenter" th:text="${fields['f0xx'].reenterLabel}">Re-enter to confirm</span>
        <input type="email" class="sp-form-control" th:name="${fields['f0xx:reenter'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="|${inputs['f0xx'] ?:'sample@spiral-platform.co.jp'}|">
      </div>
      <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
      <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
    </div>
  </div>
   <!--/* 郵便番号(zipCode) */-->
  <sp:input-field name="f0xx"></sp:input-field>
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      <th:block th:text="${fields['f0xx'].label}">
        Label
      </th:block>
      <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
    </div>
    <div class="sp-form-data">
      <input type="text" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="${inputs['f0xx']}" th:if="${fields['f0xx'].control == 'text'}">
      <!--ZipCode Option-->
      <div class="sp-form-zip-code" th:if="${fields['f0xx'].control == 'zipCode'}">
        <input type="text" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="${inputs['f0xx']}">
        <button class="sp-form-zip-code-button" th:data-zipcode="|zipCodeSearch${fields['f0xx'].name}|" th:if="${fields['f0xx'].addressByZipCode != null}" th:text="${fields['f0xx'].zipCodeButtonLabel}">住所検索</button>
      </div>
      <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
      <span class="sp-form-error" th:data-zipcode="|zipCodeError${fields['f0xx'].name}|" th:text="${errors['f0xx']?.message}">Error message</span>
    </div>
  </div>
  <!--/* 都道府県(pref) */-->
  <sp:input-field name="f0xx"></sp:input-field>
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      <th:block th:text="${fields['f0xx'].label}">
        Label
      </th:block>
      <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
    </div>
    <div class="sp-form-data">
        <div class="sp-form-dropdown">
        <select class="sp-form-control" th:name="${fields['f0xx'].name}">
          <option value="" th:text="${fields['f0xx'].unselectedLabel}" th:selected="${inputs['f0xx'] == null}">Select option</option>
          <option th:each="option : ${fields['f0xx'].options}" th:value="${option.id}" th:text="${option.label}" th:selected="${inputs['f0xx'] == #strings.toString(option.id)}">Item</option>
        </select>
        <span class="sp-form-dropdown-icon"></span>
        </div>
      <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
      <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
    </div>
  </div>

  <!--/* 市区町村(municipalities) */-->
  <sp:input-field name="f0xx"></sp:input-field>
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      <th:block th:text="${fields['f0xx'].label}">
        Label
      </th:block>
      <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
    </div>
    <div class="sp-form-data">
      <input type="text" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="|${inputs['f0xx'] ?:'港区赤坂2丁目 〇階 〇〇〇号室'}|" th:if="${fields['f0xx'].control == 'text'}">
      <!--ZipCode Option-->
      <div class="sp-form-zip-code" th:if="${fields['f0xx'].control == 'zipCode'}">
        <input type="text" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="${inputs['f0xx']}">
        <button class="sp-form-zip-code-button" th:data-zipcode="|zipCodeSearch${fields['f0xx'].name}|" th:if="${fields['f0xx'].addressByZipCode != null}" th:text="${fields['f0xx'].zipCodeButtonLabel}">住所検索</button>
      </div>
      <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
      <span class="sp-form-error" th:data-zipcode="|zipCodeError${fields['f0xx'].name}|" th:text="${errors['f0xx']?.message}">Error message</span>
    </div>
  </div>
  <!--/* 番地(block) */-->
  <sp:input-field name="f0xx"></sp:input-field>
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      <th:block th:text="${fields['f0xx'].label}">
        Label
      </th:block>
      <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
    </div>
    <div class="sp-form-data">
      <input type="text" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="|${inputs['f0xx'] ?:'9番11号'}|" th:if="${fields['f0xx'].control == 'text'}">
      <!--ZipCode Option-->
      <div class="sp-form-zip-code" th:if="${fields['f0xx'].control == 'zipCode'}">
        <input type="text" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="${inputs['f0xx']}">
        <button class="sp-form-zip-code-button" th:data-zipcode="|zipCodeSearch${fields['f0xx'].name}|" th:if="${fields['f0xx'].addressByZipCode != null}" th:text="${fields['f0xx'].zipCodeButtonLabel}">住所検索</button>
      </div>
      <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
      <span class="sp-form-error" th:data-zipcode="|zipCodeError${fields['f0xx'].name}|" th:text="${errors['f0xx']?.message}">Error message</span>
    </div>
  </div>
  <!--/* マンション・ビル名(building) */-->
  <sp:input-field name="f0xx"></sp:input-field>
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label">
      <th:block th:text="${fields['f0xx'].label}">
        Label
      </th:block>
      <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
    </div>
    <div class="sp-form-data">
      <input type="text" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="|${inputs['f0xx'] ?:'オリックス赤坂2丁目ビル'}|" th:if="${fields['f0xx'].control == 'text'}">
      <!--ZipCode Option-->
      <div class="sp-form-zip-code" th:if="${fields['f0xx'].control == 'zipCode'}">
        <input type="text" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="${inputs['f0xx']}">
        <button class="sp-form-zip-code-button" th:data-zipcode="|zipCodeSearch${fields['f0xx'].name}|" th:if="${fields['f0xx'].addressByZipCode != null}" th:text="${fields['f0xx'].zipCodeButtonLabel}">住所検索</button>
      </div>
      <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
      <span class="sp-form-error" th:data-zipcode="|zipCodeError${fields['f0xx'].name}|" th:text="${errors['f0xx']?.message}">Error message</span>
    </div>
  </div>
    <!--/* 電話番号(phone) */-->
    <sp:input-field name="f0xx"></sp:input-field>
    <div class="sp-form-item sp-form-field">
      <div class="sp-form-label">
        <th:block th:text="${fields['f0xx'].label}">
          Label
        </th:block>
        <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
      </div>
      <div class="sp-form-data">
        <div class="sp-form-phone">
          <div class="sp-form-dropdown" th:if="${fields['f0xx'].countryCode == null}">
            <select class="sp-form-control" th:name="${fields['f0xx:countryCode'].name}">
              <option value="" th:text="${fields['f0xx'].unselectedCodeLabel}" th:selected="${inputs['f0xx:countryCode'] == null}">Select option</option>
              <option th:each="countryCode : ${fields['f0xx'].countryCodes}" th:value="${countryCode.country.alpha2Code}" th:text="|${countryCode.country.alpha2Code}(+${countryCode.code})|" th:selected="${inputs['f0xx:countryCode'] == countryCode.country.alpha2Code}">Item</option>
            </select>
            <span class="sp-form-dropdown-icon"></span>
          </div>
          <input type="tel" class="sp-form-control" th:name="${fields['f0xx'].name}" th:placeholder="${fields['f0xx'].placeholder}" th:value="${inputs['f0xx']}">
        </div>
        <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
        <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
      </div>
    </div>
    <!--/* 職業(occupation) */-->
    <sp:input-field name="f0xx"></sp:input-field>
    <div class="sp-form-item sp-form-field">
      <div class="sp-form-label">
        <th:block th:text="${fields['f0xx'].label}">
          Label
        </th:block>
        <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
      </div>
      <div class="sp-form-data">
         <div class="sp-form-dropdown">
          <select class="sp-form-control" th:name="${fields['f0xx'].name}">
            <option value="" th:text="${fields['f0xx'].unselectedLabel}" th:selected="${inputs['f0xx'] == null}">Select option</option>
            <option th:each="option : ${fields['f0xx'].options}" th:value="${option.id}" th:text="${option.label}" th:selected="${inputs['f0xx'] == #strings.toString(option.id)}">Item</option>
          </select>
          <span class="sp-form-dropdown-icon"></span>
          </div>
        <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
        <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
      </div>
    </div>
    <!--/* 希望占有面積(occupiedArea) */-->
    <sp:input-field name="f0xx"></sp:input-field>
    <div class="sp-form-item sp-form-field">
      <div class="sp-form-label">
        <th:block th:text="${fields['f0xx'].label}">
          Label
        </th:block>
        <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
      </div>
      <div class="sp-form-data">
         <div class="sp-form-dropdown">
          <select class="sp-form-control" th:name="${fields['f0xx'].name}">
            <option value="" th:text="${fields['f0xx'].unselectedLabel}" th:selected="${inputs['f0xx'] == null}">Select option</option>
            <option th:each="option : ${fields['f0xx'].options}" th:value="${option.id}" th:text="${option.label}" th:selected="${inputs['f0xx'] == #strings.toString(option.id)}">Item</option>
          </select>
          <span class="sp-form-dropdown-icon"></span>
          </div>
        <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
        <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
      </div>
    </div>
    <!--/* ご予算(budget) */-->
    <sp:input-field name="f0xx"></sp:input-field>
    <div class="sp-form-item sp-form-field">
      <div class="sp-form-label">
        <th:block th:text="${fields['f0xx'].label}">
          Label
        </th:block>
        <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
      </div>
      <div class="sp-form-data">
         <div class="sp-form-dropdown">
          <select class="sp-form-control" th:name="${fields['f0xx'].name}">
            <option value="" th:text="${fields['f0xx'].unselectedLabel}" th:selected="${inputs['f0xx'] == null}">Select option</option>
            <option th:each="option : ${fields['f0xx'].options}" th:value="${option.id}" th:text="${option.label}" th:selected="${inputs['f0xx'] == #strings.toString(option.id)}">Item</option>
          </select>
          <span class="sp-form-dropdown-icon"></span>
          </div>
        <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
        <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
      </div>
    </div>
    <!--/* 入居予定人数(residentNum) */-->
    <sp:input-field name="f0xx"></sp:input-field>
    <div class="sp-form-item sp-form-field">
      <div class="sp-form-label">
        <th:block th:text="${fields['f0xx'].label}">
          Label
        </th:block>
        <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
      </div>
      <div class="sp-form-data">
         <div class="sp-form-dropdown">
          <select class="sp-form-control" th:name="${fields['f0xx'].name}">
            <option value="" th:text="${fields['f0xx'].unselectedLabel}" th:selected="${inputs['f0xx'] == null}">Select option</option>
            <option th:each="option : ${fields['f0xx'].options}" th:value="${option.id}" th:text="${option.label}" th:selected="${inputs['f0xx'] == #strings.toString(option.id)}">Item</option>
          </select>
          <span class="sp-form-dropdown-icon"></span>
          </div>
        <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
        <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
      </div>
    </div>
      <!--/* 個人情報保護の同意(privacyPolicy) */-->
<div class="privacyTtl">個人情報のお取り扱いについて</div>	
<div class="privacyInner">	
<p>スパイラル株式会社(以下、「当社」という)は、情報資産プラットフォーム事業者として個人情報保護の重要性を認識し、個人情報保護の方針を定めるとともに、スタッフ一体となり個人情報の適切な保護に努めます。</p>	
<dl>	
<dt>1 個人情報の収集目的について</dt>	
<dd>個人情報の収集目的について</dd>	
<dt>2 xxxx</dt>	
<dd>xxxxxx</dd>	
<dt>3 yyyy</dt>	
<dd>yyyyyyy</dd>	
<dt>4 zzzz</dt>	
<dd>zzzzzz</dd>	
</dl>	
<p>スパイラル株式会社</p>	
<table class="privacyInfo">	
<tbody>	
<tr>	
<th>個人情報に関する消費者相談・苦情受付窓口</th>	
<td>	
<a href="https://www.spiral-platform.co.jp/company/privacypolicy/#privacy" target="_blank">個人情報保護管理者 <i	
class="far fa-window-restore"></i></a>	
</td>	
</tr>	
<tr>	
<th>GDPR適用対象個人データに関するお問い合わせ窓口</th>	
<td>	
<a href="https://www.spiral-platform.co.jp/company/privacypolicy/#dpo" target="_blank">データ保護責任者(DPO) <i	
class="far fa-window-restore"></i></a>	
</td>	
</tr>	
<tr>	
<th>受付時間</th>	
<td>平日10:00~18:00(12/28~1/3を除く)</td>	
</tr>	
<tr>	
<th>TEL</th>	
<td>03-5575-6601</td>	
</tr>	
</tbody>	
</table>	
</div>
      <sp:input-field name="f0xx"></sp:input-field>
      <div class="sp-form-item sp-form-field">
        <div class="sp-form-label">
          <th:block th:text="${fields['f0xx'].label}">
            Label
          </th:block>
          <span class="sp-form-required" th:if="${fields['f0xx'].required}" th:text="${fields['f0xx'].requiredIndicator}">*</span>
        </div>
        <div class="sp-form-data">
          <div class="sp-form-dropdown">
            <label th:each="option : ${fields['f0xx'].options}"><input type="checkbox" th:name="f0xx" th:value="${option.id}" th:checked="${inputs['f0xx'] != null ? #lists.contains(inputs['f0xx'], #strings.toString(option.id)) : false}"><span th:text="${option.label}">Item</span></label>
          </div>
          <span class="sp-form-noted" th:if="${fields['f0xx'].help != null}" th:text="${fields['f0xx'].help}">Help text</span>
          <span class="sp-form-error" th:if="${errors['f0xx'] != null}" th:text="${errors['f0xx'].message}">Error message</span>
        </div>
      </div>
  <div class="sp-form-item sp-form-interaction">
    <button class="sp-form-prev-button" type="submit" name="action" value="previous" th:if="!${step.isFirst}" th:text="${step.prevButtonLabel}">Prev</button>
    <button class="sp-form-next-button" type="submit" name="action" value="next" th:text="${step.nextButtonLabel}">Next</button>
  </div>
</div>

HTML(確認ステップ)
<div class="sp-form-container">
  <div class="sp-step-flow-f24431">
    <div class="large-setting arrow sp-clearfix">
      <div class="step" title="入力">
        <span>入力</span>
      </div>
      <div class="step active" title="確認">
        <span>確認</span>
      </div>
      <div class="step" title="完了">
        <span>完了</span>
      </div>
    </div>
    <div class="small-setting arrow sp-clearfix">
      <div class="step" title="入力">
        <span>入力</span>
      </div>
      <div class="step active" title="確認">
        <span>確認</span>
      </div>
      <div class="step" title="完了">
        <span>完了</span>
      </div>
    </div>
  </div>
  <div class="sp-form-item sp-form-html" th:inline="none"><p><span style="font-size: 18pt;">資料請求フォーム</span></p></div>
  <div class="sp-form-item sp-form-html" th:inline="none">内容をご確認の上、よろしければ「資料請求」ボタンを押してください。</div>
  <!--/* 名前(name) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']}">Example</span>
    </div>
  </div>
  <!--/* メールアドレス(mail) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']}">spiral@example.com</span>
    </div>
  </div>
  <!--/* 郵便番号(zipCode) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']}">Example</span>
    </div>
  </div>
  <!--/* 都道府県(pref) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">Label</div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']?.label}">Item</span>
    </div>
  </div>
  <!--/* 市区町村(municipalities) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']}">Example</span>
    </div>
  </div>
  <!--/* 番地(block) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']}">Example</span>
    </div>
  </div>
  <!--/* マンション・ビル名(building) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']}">Example</span>
    </div>
  </div>
  <!--/* 電話番号(phone) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']?.nationalNumber}">+81 03-1234-5678</span>
    </div>
  </div>
  <!--/* 職業(occupation) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']?.label}">Item</span>
    </div>
  </div>
  <!--/* 希望占有面積(occupiedArea) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']?.label}">Item</span>
    </div>
  </div>
  <!--/* ご予算(budget) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']?.label}">Item</span>
    </div>
  </div>
  <!--/* 入居予定人数(residentNum) */-->
  <div class="sp-form-item sp-form-field">
    <div class="sp-form-label" th:text="${fields['f0xx'].label}">
      Label
    </div>
    <div class="sp-form-data">
      <span class="sp-form-embedded" th:text="${values['f0xx']?.label}">Item</span>
    </div>
  </div>
    <!--/* 個人情報の取扱い(privacyPolicy) */-->
    <div class="sp-form-item sp-form-field">
      <div class="sp-form-label" th:text="${fields['f0xx'].label}">Label</div>
      <div class="sp-form-data">
        <span class="sp-form-embedded" th:text="${values['f0xx']?.label}">Item</span>
      </div>
    </div>

  <div class="sp-form-item sp-form-interaction">
    <button class="sp-form-prev-button" type="submit" name="action" value="previous" th:if="!${step.isFirst}" th:text="${step.prevButtonLabel}">Prev</button>
    <button class="sp-form-next-button" type="submit" name="action" value="next" th:text="${step.nextButtonLabel}">Next</button>
  </div>
</div>

CSS
:root {
  /*=============================
	カスタムプロパティ
  ==============================*/
  --base-color: #FFFFFF; /* フォームブロックの背景色 */
  --main-color: #0D60DB; /* メインカラー */
  --accent-color: #B8250F; /* アクセントカラー */
  --input-color: #F5F7FA; /* 入力欄の背景色 */
  --input-border-color: #D3D6DB; /* 入力欄の枠線の色 */
  --input-radius: 12px; /* 入力欄の角の丸さ */
  --transition: 0.1s; /* アニメーション時間 */

  /*------ 合計100%になるよう調整 -------*/
  --label-width: 25%; /* ラベル部分の幅 */
  --data-width: 75%; /* データ部分の幅 */
}

.sp-record-list-card-actions {
  width: auto;
  font-size:0.875rem;
  padding:0.5rem 0;
  text-align:center;
  text-decoration:none;
  flex: 1;
}

.sp-record-list-card-actions a {
  color: #ffffff;
  background-color: #0D60DB;
  border: 1.0px solid #0D60DB;
  border-radius: calc(12px / 1.2);
  /* background-color:#ffffff; */
  font-size:0.875rem;
  padding:0.5rem 0.75rem;
  text-align:center;
  text-decoration:none;
  flex: 1;
}

.sp-form-container {
  font-size:16px;
  padding:1em;
  box-sizing:border-box;
  max-width: 960px;
  color:#505050;
  background-color:var(--base-color);
  border:1px solid #E1E5EB;
  border-radius:var(--input-radius);
}

.sp-form-container .sp-form-item:not(:last-child) {
  margin-bottom:0.5em;
  padding:0.5em 1em;
}

.sp-form-field,
.sp-form-group {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
  -ms-flex-direction:column;
  flex-direction:column;
}

.sp-form-field>.sp-form-label,
.sp-form-group>.sp-form-label {
  font-size:1.15em;
  font-weight:bold;
  padding:.25em 0;
  word-break:break-all;
  box-sizing:border-box;
  color:#333333;
}

.sp-form-group-item>.sp-form-label {
  word-break:break-all;
  display:inline-block;
  margin-bottom:.2em;
}

.sp-form-field>.sp-form-data,
.sp-form-group>.sp-form-data {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
  -ms-flex-direction:column;
  flex-direction:column;
  word-break:break-all;
  padding:0.25em 0;
  box-sizing:border-box;
}

.sp-form-group-item>.sp-form-data {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
  -ms-flex-direction:column;
  flex-direction:column;
}

.sp-form-required {
  display:inline-block;
  margin:0 .5em;
  padding: 3px 6px;
  background:var(--accent-color);
  color:#ffffff;
  line-height:1;
  border-radius:.25em;
  font-size:0.7em;
  font-weight: bold;
  vertical-align: middle;
}

.sp-form-group-item:not(:last-child) { margin-bottom:.5em; }

.sp-form-noted {
  font-size:.8em;
  color:#808080;
  word-break:break-all;
  margin-top:.5em;
  padding-left:min(calc(var(--input-radius) / 2 - 4px), 8px);
}

.sp-form-error {
  font-size:.8em;
  color:var(--accent-color);
  padding-left:min(calc(var(--input-radius) / 2 - 4px), 8px);
}

.sp-form-control {
  -moz-appearance:none;
  -webkit-appearance:none;
  -ms-progress-appearance:none;
  appearance:none;
  font-family:inherit;
  font-size:1em;
  line-height:1.5;
  padding:.3em .7em;
  padding-left:clamp(12px, calc(var(--input-radius) - 2px), 24px);
  background:var(--input-color);
  color:#333333;
  box-sizing:border-box;
  width:100%;
  height:48px;
  margin-bottom:.3em;
  border:none;
  outline:none;
  border-radius:var(--input-radius);
  box-shadow:0 0 0 0.5px var(--input-border-color);
}
.sp-form-control:focus {
  box-shadow:0 0 0 2px var(--main-color);
}
.sp-form-control[type="number"] {
  height: 36px;
}

.sp-form-control:placeholder-shown { color:#aaa; }

.sp-form-control::placeholder { color:#aaa; }

.sp-form-control::-ms-input-placeholder { color:#aaa; }

.sp-form-control:-ms-input-placeholder { color:#aaa; }

.sp-form-control:-moz-placeholder { color:#aaa; }

textarea.sp-form-control {
  resize:vertical;
  padding-top:clamp(6px, calc(var(--input-radius) / 2), 18px);
  height:calc(1.5em * 5);
}

select.sp-form-control,
option.sp-form-control {
  -moz-appearance:none;
  -webkit-appearance:none;
  -ms-progress-appearance:none;
  appearance:none;
  padding-right:1.5em;
}

.sp-form-control>option { background:#FFFFFF;}

select.sp-form-control::-ms-expand { display:none; }

.sp-form-phone .sp-form-control { max-width:20em; }

.sp-form-phone>*:not(:only-child) { margin-right:.5rem; }

.sp-form-dropdown { position:relative; }

.sp-form-dropdown-icon {
  display:block;
  position:absolute;
  top:1.3em;
  right:1em;
  line-height:0;
  pointer-events:none;
}

.sp-form-dropdown-icon:after {
  content:"";
  display:block;
  border-top:0.333em solid #888;
  border-right:.333em solid transparent;
  border-left:.333em solid transparent;
}

.sp-form-selection {
  display:block;
  cursor: pointer;
  margin-bottom:.3em;
  padding:.25em .75em .35em;
  background:var(--input-color);
  border-radius: var(--input-radius);
  box-shadow:0 0 0 0.5px var(--input-border-color) ;
}

.sp-form-selection-label {
  display: inline-block;
  position: relative;
  vertical-align:middle;
  padding: 4px 0;
}

.sp-form-datetimes,
.sp-form-date,
.sp-form-time,
.sp-form-timezone {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:horizontal;
  -webkit-box-direction:normal;
  -ms-flex-flow:row wrap;
  flex-flow:row wrap;
  -webkit-box-align:center;
  -ms-flex-align:center;
  align-items:center;
}

.sp-form-datetime,
.sp-form-date,
.sp-form-time,
.sp-form-timezone {
  margin-right:.5rem;
  -ms-flex-wrap:nowrap;
  flex-wrap:nowrap;
}

.sp-form-datetime { max-width:20em; }

.sp-form-phone {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:horizontal;
  -webkit-box-direction:normal;
  -ms-flex-flow:row wrap;
  flex-flow:row wrap;
  -webkit-box-align:center;
  -ms-flex-align:center;
  align-items:center;
}

.sp-form-date-separator {
  width:1em;
  margin-bottom: .3em;
  text-align:center;
  -ms-flex-negative:1;
  flex-shrink:0;
}

.sp-form-number { max-width:20em; }

.sp-form-email-reenter,
.sp-form-password-reenter {
  font-size:.9em;
  margin-bottom:.2em;
  padding-left:min(calc(var(--input-radius) / 2 - 4px), 8px);
}

.sp-form-html p { margin:0; }

.sp-form-interaction {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -ms-flex-wrap:wrap;
  flex-wrap:wrap;
  margin-top:1em;
}

.sp-form-prev-button {
  color:#333333;
  background-color:var(--base-color);
  border:2.0px solid #666666;
}

.sp-form-next-button,
.sp-form-login-button {
  color:#ffffff;
  background-color:var(--main-color);
  border:none;
}

.sp-form-field .sp-form-embedded { padding-left:.25em; }

.sp-form-selection>input[type="radio"],
.sp-form-selection>input[type="checkbox"] {
  display: none;
  vertical-align:middle;
  margin-left:0;
}

.sp-form-selection>input[type="radio"]+.sp-form-selection-label::before,
.sp-form-selection>input[type="checkbox"]+.sp-form-selection-label::before{
  display: inline-block;
  content:"";
  position: relative;
  box-sizing: border-box;
  top: 4px;
  margin-right: 6px;
  width: 20px;
  height: 20px;
  background: #ffffff;
  border:10px solid #ffffff;
  box-shadow: 0 0 0 0.5px var(--input-border-color);
  transition: var(--transition);
}

.sp-form-selection>input[type="radio"]+.sp-form-selection-label::before {
  border-radius: 50%;
}

.sp-form-selection>input[type="checkbox"]+.sp-form-selection-label::before {
  border-radius: min(var(--input-radius), 4px);
}

.sp-form-selection>input[type="radio"]:checked+.sp-form-selection-label::before{
  background: var(--main-color);
  border:4px solid #ffffff;
}
.sp-form-selection>input[type="checkbox"]+.sp-form-selection-label::after{
  border-right: 3px solid var(--main-color);
  border-bottom: 3px solid var(--main-color);
  content: '';
  display: inline-block;
  width: 6px;
  height: 10px;
  left: 9px;
  margin-top: -7px;
  position: absolute;
  top: 50%;
  transform: rotate(45deg);
  opacity: 0;
  transition: var(--transition);
}

.sp-form-selection>input[type="checkbox"]:checked+.sp-form-selection-label::after{
  left: 6px;
  opacity: 1;
}

.sp-form-date>input,
.sp-form-time>input { max-width:7em; }

.sp-form-date>input[type="date"]{
  min-width: 140px;
  max-width: none;
}
.sp-form-time>input[type="time"] {
  min-width: 92px;
  max-width: none;
}

.sp-form-interaction>button {
  -webkit-box-flex:1;
  -ms-flex-positive:1;
  flex-grow:1;
  cursor:pointer;
  font-size:1em;
  font-weight:bold;
  line-height:1.5;
  margin:.5rem;
  padding:.75rem 0;
  text-align:center;
  -webkit-user-select:none;
  -moz-user-select:none;
  -ms-user-select:none;
  user-select:none;
  white-space:nowrap;
  border-radius:var(--input-radius);
}

@media (min-width:768px) {
  .sp-form-container {
    font-size:initial;
    padding:3em;
    margin:2em auto;
  }

.sp-form-container .sp-form-item:not(:last-child) {
  margin-bottom:0.5em;
  padding-bottom:0.5em;
}

  .sp-form-field,
  .sp-form-group {
    -webkit-box-orient:horizontal;
    -webkit-box-direction:normal;
    -ms-flex-flow:row nowrap;
    flex-flow:row nowrap;
  }

  .sp-form-field>.sp-form-label,
  .sp-form-group>.sp-form-label {
    font-size:1em;
    width:var(--label-width);
    padding:.5em;
  }

  .sp-form-group .sp-form-group-item>.sp-form-label {
    font-size:.9em;
    padding-right:.5em;
  }

  .sp-form-field>.sp-form-data,
  .sp-form-group>.sp-form-data {
    font-size:1em;
    width:var(--data-width);
    padding:.5em;
  }

  .sp-form-group>.sp-form-data {
    -webkit-box-orient:horizontal;
    -webkit-box-direction:normal;
    -ms-flex-flow:row wrap;
    flex-flow:row wrap;
  }

  .sp-form-group.sp-form-group-vertical>.sp-form-data {
    -webkit-box-orient:vertical;
    -webkit-box-direction:normal;
    -ms-flex-direction:column;
    flex-direction:column;
  }

  .sp-form-required {
    font-size:0.8em;
  }

  .sp-form-group-item { padding:.25em; }

  .sp-form-group-item:not(:last-child) { margin-bottom:0; }

  .sp-form-control { font-size:.9em; }

  .sp-form-selection {
    font-size:.9em;
    margin:0 .5em 0 0;
    padding-right:1em;
    background:none;
    box-shadow:none;
  }
  .sp-form-selection-vertical>.sp-form-selection {
    margin:0 auto 0 0;
    padding-right: 4em;
  }

  .sp-form-selection-vertical {
    display:-webkit-box;
    display:-ms-flexbox;
    display:flex;
    -webkit-box-orient:vertical;
    -webkit-box-direction:normal;
    -ms-flex-direction:column;
    flex-direction:column;
  }

  .sp-form-selection-horizontal {
    display:-webkit-box;
    display:-ms-flexbox;
    display:flex;
    -webkit-box-orient:horizontal;
    -webkit-box-direction:normal;
    -ms-flex-flow:row wrap;
    flex-flow:row wrap;
  }

  .sp-form-interaction {
    justify-content:center;
    margin-top:2em;
  }

  .sp-form-embedded { font-size:.9em; }

  .sp-form-group-item .sp-form-embedded { padding-right:5em; }

  .sp-form-selection>input[type="radio"]+.sp-form-selection-label::before,
  .sp-form-selection>input[type="checkbox"]+.sp-form-selection-label::before{
    background: var(--input-color);
    border:10px solid var(--input-color);
  }

  .sp-form-selection>input[type="radio"]:hover+.sp-form-selection-label::before,
  .sp-form-selection>input[type="checkbox"]:hover+.sp-form-selection-label::before{
    border:10px solid #dddddd;
  }

  .sp-form-selection>input[type="radio"]:checked+.sp-form-selection-label::before{
    border:4px solid var(--input-color);
  }

  .sp-form-date>input[type="date"]{
    min-width: unset;
  }
  .sp-form-time>input[type="time"] {
    min-width: unset;
  }

  .sp-form-interaction>button {
    -webkit-box-flex:0;
    -ms-flex-positive:0;
    flex-grow:0;
    padding:.75rem 5em;
  }
}

.sp-form-recaptcha {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:start;
  -ms-flex-pack:start;
  justify-content:flex-start;
}

.sp-form-recaptcha-right {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:end;
  -ms-flex-pack:end;
  justify-content:flex-end;
}

.sp-form-recaptcha-center {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:center;
  -ms-flex-pack:center;
  justify-content:center;
}

.sp-form-file-button {
  padding:.8em 2em;
  font-weight: bold;
  cursor:pointer;
  color:#666666;
  background-color:#f6f6f6;
  border:none;
  border: solid 2px #a0a0a0;
  border-radius:var(--input-radius);
  transition: var(--transition);
  align-items: center;
  justify-content: center;
}
.sp-form-file-button::before{
  display: inline-block;
  content: url('data:image/svg+xml;utf-8,<svg fill="%23666" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M14.4,7.9l-5.7,5.7c-0.4,0.4-0.8,0.6-1.2,0.8c-0.7,0.3-1.4,0.3-2.1,0.2c-0.7-0.1-1.4-0.5-1.9-1c-0.4-0.4-0.6-0.8-0.8-1.2c-0.3-0.7-0.3-1.4-0.2-2.1c0.1-0.7,0.5-1.4,1-1.9L9.7,2c0.2-0.2,0.5-0.4,0.8-0.5c0.4-0.2,0.9-0.2,1.3-0.1C12.2,1.4,12.6,1.6,13,2c0.2,0.2,0.4,0.5,0.5,0.8c0.2,0.4,0.2,0.9,0.1,1.3c-0.1,0.4-0.3,0.8-0.6,1.2l-6.2,6.2c-0.1,0.1-0.2,0.1-0.3,0.2c-0.1,0.1-0.3,0.1-0.5,0c-0.2,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.1-0.2-0.2-0.3c-0.1-0.1-0.1-0.3,0-0.5c0-0.2,0.1-0.3,0.2-0.4l5.5-5.5l-0.9-0.9L4.7,9.3C4.5,9.5,4.4,9.7,4.3,10c-0.2,0.4-0.2,0.8-0.1,1.2c0.1,0.4,0.3,0.8,0.6,1.1c0.2,0.2,0.4,0.4,0.7,0.5c0.4,0.2,0.8,0.2,1.2,0.1c0.4-0.1,0.8-0.3,1.1-0.6l6.2-6.2c0.3-0.3,0.6-0.8,0.8-1.2c0.3-0.6,0.3-1.4,0.2-2c-0.1-0.7-0.5-1.3-1-1.8c-0.3-0.3-0.8-0.6-1.2-0.8c-0.6-0.3-1.4-0.3-2-0.2C10,0.2,9.3,0.5,8.8,1L2.5,7.4C2,7.9,1.6,8.5,1.4,9.1C1,10,0.9,11,1.1,11.9c0.2,1,0.6,1.9,1.4,2.6C3,15,3.5,15.4,4.1,15.6C5.1,16,6,16.1,7,15.9c1-0.2,1.9-0.6,2.6-1.4l5.7-5.7L14.4,7.9z"/></svg>');
  margin-left: -0.5em;
  width: 16px;
  height: 100%;
  vertical-align: middle;
}

.sp-form-file-button:focus { outline:0; }

.sp-from-file-default-drag-drop-area {
  color:#333333;
  background-color:var(--input-color);
  border:2.0px dashed #6c757d;
  border-radius:0;
  width:100%;
  height:200px;
  text-align:center;
  border-radius: var(--input-radius);
}

.sp-from-file-ondraghover-drag-drop-area {
  color:#333333;
  background-color:#dddddd;
  border:2.0px dashed #6c757d;
  border-radius:0;
  width:100%;
  height:200px;
  text-align:center;
  border-radius: var(--input-radius);
}

.sp-from-file-ondragleave-drag-drop-area {
  color:#333333;
  background-color:#dddddd;
  border:2.0px dashed #6c757d;
  border-radius:0;
  width:100%;
  height:200px;
  border-radius: var(--input-radius);
}

.sp-from-file-ondrop-drag-drop-area {
  color:#333333;
  background-color:var(--input-color);
  border:2.0px dashed #6c757d;
  border-radius:0;
  width:100%;
  height:200px;
  border-radius: var(--input-radius);
}

.sp-form-embedded>.sp-file-info:last-child { padding-bottom:0; }

.sp-file-info {
  padding-top:1em;
  padding-bottom:1em;
  line-height:1.5;
}

.sp-file-info>div { width:100%; }

.main-text {
  font-size:1em;
  font-weight:bold;
}

[class^="sp-step-flow-f"] {
  margin:3em 0 2em;
  }

[class^="sp-step-flow-f"]>.large-setting {
  display:flex;
  justify-content: center;
}

[class^="sp-step-flow-f"]>.small-setting { display:none; }

[class^="sp-step-flow-f"]>.large-setting,
[class^="sp-step-flow-f"]>.small-setting {
  text-align: center;
  margin: 0 auto;
  padding: 0 20px;
}

[class^="sp-step-flow-f"]>.large-setting>.step,
[class^="sp-step-flow-f"]>.small-setting>.step {
  word-wrap: break-word;
  min-width: 0;
  text-align:center;
}

[class^="sp-step-flow-f"]>.large-setting>.step {
  flex: 1;
  margin-right:36px;
  font-size:16px;
}

[class^="sp-step-flow-f"]>.small-setting>.step {
  font-size:14px;
}

[class^="sp-step-flow-f"]>.large-setting>.step:last-child,
[class^="sp-step-flow-f"]>.small-setting>.step:last-child {
  margin-right: 0;
}

[class^="sp-step-flow-f"]>.large-setting>.step>span,
[class^="sp-step-flow-f"]>.small-setting>.step>span {
  overflow: hidden;
  text-overflow: ellipsis;
  position:relative;
  display:block;
  padding-top: 16px;
  white-space:nowrap;
  color:#D3D6DB;
  font-weight:bold;
}

[class^="sp-step-flow-f"]>.large-setting>.step>span::before,
[class^="sp-step-flow-f"]>.small-setting>.step>span::before {
  position: absolute;
  content: "";
  display: block;
  top: 0;
  width: 100%;
  background: #D3D6DB;
}

[class^="sp-step-flow-f"]>.large-setting>.step>span::before {
  height: 6px;
  border-radius: 6px;
}

[class^="sp-step-flow-f"]>.small-setting>.step>span::before {
  height: 4px;
  border-radius: 4px;
}

[class^="sp-step-flow-f"]>.large-setting>.step.active>span,
[class^="sp-step-flow-f"]>.small-setting>.step.active>span { color:var(--main-color); }

[class^="sp-step-flow-f"]>.large-setting>.step.active>span::before,
[class^="sp-step-flow-f"]>.small-setting>.step.active>span::before { background:var(--main-color); }

@media (max-width: 765px) {
  [class^="sp-step-flow-f"]>.large-setting { display:none; }

  [class^="sp-step-flow-f"]>.small-setting {
    display:flex;
    justify-content: center;
    counter-reset:step;
  }

  [class^="sp-step-flow-f"]>.small-setting>.step>span { display: none; }

  [class^="sp-step-flow-f"]>.small-setting>.step {
    display: flex;
    align-items: center;
    width: auto;
    margin: 0;
    background: none;
    color: #ffffff;
    font-weight: bold;
  }

  [class^="sp-step-flow-f"]>.small-setting>.step::before {
    counter-increment: step 1;
    content: counter(step, decimal);
    width:24px;
    height:24px;
    background: var(--main-color);
    border-radius: 50%;
    font-size: 12px;
    line-height: 24px;
  }

  [class^="sp-step-flow-f"]>.small-setting>.step:not(:last-child) { flex-grow: 1; }

  [class^="sp-step-flow-f"]>.small-setting>.step:not(:last-child)::after {
    content: "";
    width: calc(100% - 24px);
    height:2px;
    background: var(--main-color);
    vertical-align: middle;
  }

  [class^="sp-step-flow-f"]>.small-setting>.step.active::after,
  [class^="sp-step-flow-f"]>.small-setting>.step.active~.step::before,
  [class^="sp-step-flow-f"]>.small-setting>.step.active~.step::after { background:#D3D6DB; }
}

div.privacyTtl {  
  margin-top: 25px;
  font-weight: bold;
  font-size: 1.2em;
}
div.privacyInner {  
  height: 200px;
  overflow: auto;
  padding: 10px;
  background: #ededed;
  margin-bottom: 20px;
  overflow-x: hidden;
  border: 1px solid #dddddd;
}
table.privacyInfo{
  text-align: left;
  width: 100%;
}

table.privacyInfo th {
background: #ccc;
display: block;
padding: 5px 10px;
text-align: left;
width: 100%;
}

table.privacyInfo td {
display: block;
padding: 5px 10px;
text-align: left;
width: 100%;
}
table.privacyInfo a {
  color: #1b284b;
}

HTMLの「"f0xx"」には、資料請求DB内の対応するフィールドIDを記載ください。
資料請求フォームブロックでは、自動登録の設定を行っております。
フィールド 値タイプ
参照_物件マスタ 引用(任意レコード値) 引用元: 物件マスタDB

手順2:資料請求フォームブロックにメールアクションを作成
資料請求フォームにレコードが登録された際に、
「資料請求完了メール」「資料請求通知メール」が送信されるようにする設定を行います
それぞれ以下のように設定してください。
配信名 配信条件・配信先 設定するクリックログインURL
資料請求完了メール 配信条件:常時配信
メールアドレス
資料ダウンロードページ
資料請求通知メール 配信条件:常時配信
参照_物件マスタDB > 担当メールアドレス
なし

また、それぞれ以下のように件名、本文を入力してください。
資料請求完了メール
件名
【 {{@xxxxx.xxxxx.xxxxx}} 】資料を請求いただきましてありがとうございます 

本文
{{@xxxxx.xxxxx}}様

この度は、{{@xxxxx.xxxxx.xxxxx}}の資料を請求いただきましてありがとうございます。
下記URLから資料をダウンロードをお願いいたします。 

───────────────────────────────────────
◆ダウンロードページURL 
{{@_url.cl.xxxxxx.xxxxxxx/xxxx/xxxx}} 
───────────────────────────────────────
----------------------

※本メールは、システムからの自動送信メールです。 
この送信元メールアドレスは送信専用となりますので、お問合せ等は以下連絡先までお願いします。

TEL:XXX-XXXX-XXXX

「{{@xxxxx.xxxxx.xxxxx}}」には「参照_物件マスタDB_物件名」、「{{@xxxxx.xxxxx}}」には「名前」の差し替えキーワードをご記載ください。
「{{@_url.cl.xxxxxx.xxxxxxx/xxxx/xxxx}} 」には、「資料ダウンロードページ」のクリックログインURLをご記載ください。
資料請求通知メール
件名
【 {{@xxxxx.xxxxx.xxxxx}} 】資料を請求いただきました

本文
担当グループ:{{@xxxxx.xxxxx}}

資料を請求をいただきました。
アプリ利用画面のご確認、よろしくお願いいたします。

・物件名:{{@xxxxx.xxxxx.xxxxx}}
・請求番号:{{@xxxxx.xxxxx}}

※本メールは、システムからの自動送信メールです。

「{{@xxxxx.xxxxx.xxxxx}}」には「参照_物件マスタDB_物件名」、「{{@xxxxx.xxxxx}}」には「担当グループ」「請求ID」の差し替えキーワードをご記載ください。
手順3:資料請求ページのブロック埋め込み
資料請求ページに共通ブロックの「ヘッダ」「フッター」と、手順1,2で作成した登録ブロックを埋め込みます。
HTML
<!-- ヘッダ -->
<sp:block name="fcb0xxxx"></sp:block>
<h1>資料請求ページ</h1>
<th:block th:if="${cp.result.value['step_detail']} eq 1">
    <!--/* 物件詳細 */-->
    <sp:block name="rib0xxxx"></sp:block>
    <div class="sp-record-list-card-actions sp-record-list-container sp-record-list-table sp-url-button">
        <a class="url-button button-l" th:href="${pages['p0xxxxx']?.path ?:'/404'}">戻る</a>
        <a class="url-button button-r" th:href="${cp.result.value['recordInfo']}">予約日一覧</a>
    </div>
<h2>上記物件の資料請求を行います。</h2>
</th:block>
<!-- 資料請求フォーム -->
<sp:block name="ifb0xxxx"></sp:block>
<!-- フッター -->
<sp:block name="fcb0xxxx"></sp:block>

CSS
h2 {
    text-align: center;
}

h1 {
    text-align: center;
}

h3 {
    text-align: center;
}

.reserve_attention {
    display: block;
    text-align: center;
    margin: 0.5rem 0;
}

.url-button {
    width: auto;
    font-size:0.875rem;
    padding:0.5rem 0;
    text-align:center;
    text-decoration:none;
    flex: 1;

    color: #ffffff;
    background-color: #0D60DB;
    border: 1.0px solid #0D60DB;
    border-radius: calc(12px / 1.2);
}

.button-l {
    padding:0.5rem 6%;
    margin-right: 0.5rem;
}

.button-r {
    padding:0.5rem 5%;
    margin-left: 0.5rem;
}

.button {
    padding:0.5rem 5%;
}

.sp-url-button {
    text-align: center;
    width: auto;
    margin: 1rem auto;
    /* border: 1px solid #dddddd; */
}

「HTMLの「"fcb0xxxx"」、「"rib0xxxx"」、「"ifb0xxxx"」には、それぞれ作成した「ヘッダ」「内覧予約物件詳細」「資料請求フォームブロック」「フッター」のIDを記載ください。
HTMLの「'p0xxxxx'」には内覧予約トップページのIDを記載ください。
また、PHPに確認ステップ、完了ステップで物件詳細ページを削除する処理を記載します。
PHP
<?php
//------------------------------
// API設定
//------------------------------
//------------------------------
// 設定値
//------------------------------
define("API_URL", "https://api.spiral-platform.com/v1");
define("API_KEY", "APIキー"); //APIキー
define("APP_ROLE", "アプリロール"); //API権限を持つアプリロール識別名
define("DB_ID", "DBID"); //物件マスタDBID
define("APP_ID", "アプリID"); //モデルルーム予約管理アプリID

define("DB_ID_2", "DBID"); //カレンダーDBID

define("FORM_NAME","FORM_NAME");//資料請求フォームの識別名

define("AREA_NAME","AREA_NAME");//内覧認証エリアの識別名
define("PAGE_NAME","PAGE_NAME");//予約日一覧ページの識別名

//------------------------------
// 物件詳細ステップ出し分け
//------------------------------
$registForm_reg = $SPIRAL->getRegistrationForm(FORM_NAME);
$step_detail = $registForm_reg->getStep();
$SPIRAL->setTHValue("step_detail", $step_detail);

//------------------------------
// API実行
//------------------------------
// 物件ID取得
$commonBase = CommonBase::getInstance();

$record = $SPIRAL->getParam("record");

//------------------------------
// 物件詳細ステップ出し分け
//------------------------------
$param_record = explode(".", $SPIRAL->getParam("record"));//レコードアイテムブロックが表示された時、URLクエリパラメータから「レコードID」を取得。
$recordId = $param_record[1];

$resultRecordSelect = $commonBase->apiCurlAction("GET", "/apps/". APP_ID. "/dbs/". DB_ID. "/records/". $recordId);

$SPIRAL->setTHValue("calender", $resultRecordSelect['item']['propertyID']);//ThymeleafにカレンダーDBのレコードをセット  $resultRecordSelect['item']['propertyID']

$record_url = "/".AREA_NAME."/".PAGE_NAME."?record=" . $record. "&rlb0xxxx_q_f0xx=". $resultRecordSelect['item']['propertyID'];
$SPIRAL->setTHValue("recordInfo", $record_url);

//------------------------------
// 共通モジュール
//------------------------------
class CommonBase {
    /**
     * シングルトンインスタンス
     * @var UserManager
     */
    protected static $singleton;

    public function __construct() {
        if (self::$singleton) {
            throw new Exception('must be singleton');
        }
        self::$singleton = $this;
    }
    /**
     * シングルトンインスタンスを返す
     * @return UserManager
     */
    public static function getInstance() {
        if (!self::$singleton) {
            return new CommonBase();
        } else {
            return self::$singleton;
        }
    }
    /**
     * V2用 API送信ロジック
     * @return Result
     */
    function apiCurlAction($method, $addUrlPass, $data = null, $multiPart = null, $jsonDecode = null) {
        $header = array(
            "Authorization:Bearer ". API_KEY,
            "X-Spiral-Api-Version: 1.1",
        );
        if($multiPart) {
            $header = array_merge($header, array($multiPart));
        } else {
            $header = array_merge($header, array("Content-Type:application/json"));
        }
        if(APP_ROLE){
			$header = array_merge($header, array("X-Spiral-App-Role: ".APP_ROLE));
		}
        // curl
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_URL, API_URL. $addUrlPass);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        if ($method == "POST") {
            if ($multiPart) {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            } else {
                curl_setopt($curl, CURLOPT_POSTFIELDS , json_encode($data));
            }
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        if ($method == "PATCH") {
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        if ($method == "DELETE") {
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        $response = curl_exec($curl);
        if (curl_errno($curl)) echo curl_error($curl);
        curl_close($curl);
        if($jsonDecode){
			return $response;
		}else{
            return json_decode($response, true);
		}
    }
}
?>

PHPの「"資料請求フォームの識別名"」、「"認証エリアの識別名"」、「"物件詳細ページの識別名"」には、それぞれ資料請求フォーム、内覧予約認証エリア、物件詳細ページの識別名を記載ください。
「rlb0xxxx_q_f0xx」には、物件詳細ページでレコードリストを絞り込むために、予約可能日一覧のIDとカレンダーDBの物件IDのフィールドのIDを記載します

資料ダウンロードページ

作成した資料請求認証エリア内の資料ダウンロードページを書き換えていきます。
完成イメージ

手順1:ダウンロード資料一覧ブロックを作成
ダウンロード資料一覧ブロック は、レコードリストブロックで作成します。
以下の通りに設定を行います。
DB レコードアイテムブロック 設定方法
物件マスタDB 今は作成しない ソース設定

また、リスト設定については下記のように設定ください。
フィルタ 初期ソート 初期表示件数
なし (ID) 降順 20件

完成イメージ

HTML
<div class="sp-record-list-container">
  <!-- <div class="sp-record-list-parts sp-html-parts" th:inline="none"><p><span style="font-size: 18pt;">内覧予約資料ダウンロード一覧</span></p></div> -->
  <div style="text-align: center;">「物件資料」内のファイル名をクリックし、ダウンロードをお願いいたします。</div>

  <div class="sp-record-list-parts sp-record-list-pagination">
    <div class="sp-record-list-pagination-left"></div>
    <div class="sp-record-list-pagination-center"></div>
    <div class="sp-record-list-pagination-right"></div>
  </div>
  <div class="sp-record-list-parts">
    <table class="sp-record-list-table sp-table-hover">
      <thead>
        <tr>
          <!--/* 物件名 (propertyName) */-->
          <th scope="col">
            <a th:class="${pagination.isSorted('f0xx')} ? |sp-${pagination.getSortDirection('f0xx')}-sorted|" th:href="${pagination.getLinkWithSort('f0xx')}">
              <span th:text="${fields['f0xx'].label}">Label</span>
              <span class="sp-sorting-desc"><i class="fa fa-angle-down"></i></span>
              <span class="sp-sorting-asc"><i class="fa fa-angle-up"></i></span>
            </a>
          </th>
          <!--/* 広さ (spaciousness) */-->
          <th scope="col">
            <span th:text="${fields['f0xx'].label}">Label</span>
          </th>
          <!--/* 価格 (price) */-->
          <th scope="col">
            <span th:text="${fields['f0xx'].label}">Label</span>
          </th>
          <!--/* 備考・詳細 (remarksDetail) */-->
          <th scope="col">
            <span th:text="${fields['f0xx'].label}">Label</span>
          </th>
          <!--/* 物件資料 (propertyData) */-->
          <th scope="col">
            <span th:text="${fields['f0xx'].label}">Label</span>
          </th>
        </tr>
      </thead>
      <tbody>
        <tr th:each="record, stat : ${pageRecords}">
          <!--/* 物件名 (propertyName) */-->
          <sp:record-data-field name="f0xx"></sp:record-data-field>
          <td>
            <span th:text="${record['f0xx']}">Example</span>
          </td>
          <!--/* 広さ (spaciousness) */-->
          <sp:record-data-field name="f0xx"></sp:record-data-field>
          <td>
            <span th:text="${record['f0xx']}">Example</span>
          </td>
          <!--/* 価格 (price) */-->
          <sp:record-data-field name="f0xx"></sp:record-data-field>
          <td>
            <span th:text="${record['f0xx']}">Example</span>
          </td>
          <!--/* 備考・詳細 (remarksDetail) */-->
          <sp:record-data-field name="f0xx"></sp:record-data-field>
          <td>
            <span th:text="${record['f0xx']}">Example</span>
          </td>
          <!--/* 物件資料 (propertyData) */-->
          <sp:record-data-field name="f0xx"></sp:record-data-field>
          <td th:with="files=${record['f0xx']}" th:remove="${files == null ? 'body' : 'none'}">
            <th:block th:if="${files.size == 1}" th:with="file=${files[0]}">
              <a class="sp-form-file-bold-link" th:title="|${file.fileName} (${file.fileSize})|" th:text="${file.fileName}" th:href="${file.fileUrl}"></a>
              <span class="sp-form-file-text-label" th:text="|(${file.fileSize})|">Example</span>
            </th:block>
            <span class="sp-form-file-text-label" th:if="${files.size gt 1}" th:text="|${files.size} files|">Example</span>
          </td>
        </tr>
      </tbody>
    </table>
    <div class="sp-record-list-no-records" th:if="${recordList.totalRecordCount == 0}">
      表示できるデータがありません
    </div>
  </div>
  <div class="sp-record-list-parts sp-record-list-pagination">
    <div class="sp-record-list-pagination-left"></div>
    <div class="sp-record-list-pagination-center">
      <ul class="sp-page-navs" th:with="pageNavItemSize = 5" th:if="${recordList.totalRecordCount != 0}">
        <li class="sp-page-nav-item" th:if="!${pagination.isFirstPage}">
          <a th:href="${pagination.firstPageLink}">&lt;&lt;</a>
        </li>
        <li class="sp-page-nav-item" th:if="!${pagination.isFirstPage}">
          <a th:href="${pagination.prevPageLink}">&lt;</a>
        </li>
        <li class="sp-page-nav-item" th:each="item : ${pagination.getPrevPageNavItems(pageNavItemSize)}">
          <a th:text="${item.pageNum}" th:href="${item.link}">Page Number</a>
        </li>
        <li class="sp-page-nav-item sp-page-nav-current">
          <span th:text="${pagination.currentPageNum}">Page Number</span>
        </li>
        <li class="sp-page-nav-item" th:each="item : ${pagination.getNextPageNavItems(pageNavItemSize)}">
          <a th:text="${item.pageNum}" th:href="${item.link}">Page Number</a>
        </li>
        <li class="sp-page-nav-more" th:if="${pagination.showEllipsis}">...</li>
        <li class="sp-page-nav-item" th:if="!${pagination.isLastPage}">
          <a th:href="${pagination.nextPageLink}">&gt;</a>
        </li>
        <li class="sp-page-nav-item" th:if="!${pagination.isLastPage} and !${recordList.recordCountLimitExceeded}">
          <a th:href="${pagination.lastPageLink}">&gt;&gt;</a>
        </li>
      </ul>
    </div>
    <div class="sp-record-list-pagination-right"></div>
  </div>
</div>

CSS
:root {
  /*=============================
	カスタムプロパティ
  ==============================*/
  --background-color: #FFFFFF; /* ページの背景色 */
  --main-color: #0D60DB; /* メインカラー */
  --table-border: 1.5px solid #EBEBEB; /* レコードリストの枠線(外周) */
  --table-shadow: 0 2px 5px rgba(0,0,0,0.2); /* レコードリストの影 */
  --mobile-table-width: 200%; /* スマホ表示時のレコードリストの横幅 */
  --th-color:#FFFFFF; /* ヘッダ行の背景色 */
  --th-txtcolor:#333333;/* ヘッダ行の文字色 */
  --th-col-border: none; /* ヘッダ行の縦線 */
  --th-bottom-border: 1.5px solid #EBEBEB; /* ヘッダ行の下線 */
  --data-color: #FFFFFF; /* データ行の背景色 */
  --even-color: #FFFFFF; /* データ行の背景色(偶数行) */
  --hover-color: #E9F6FF; /* データ行の背景色(マウスオーバー時) */
  --data-padding: 16px; /* データ行の余白(上下) */
  --link-color: #4286F4; /* リンク列の文字色 */
  --row-border: 1.5px solid #EBEBEB; /* リストの横線 */
  --col-border: none; /* リストの縦線 */
  --border-radius: 12px; /* 角の丸さ */
  word-break: break-all;

  /*------ 項目ごとの横幅を固定したい場合は合計100%になるよう調整 -------*/
  --col01-width: ; /* 項目1 */
  --col02-width: ; /* 項目2 */
  --col03-width: ; /* 項目3 */
  --col04-width: ; /* 項目4 */
  --col05-width: ; /* 項目5 */
  --col06-width: ; /* 項目6 */
  --col07-width: ; /* 項目7 */
  --col08-width: ; /* 項目8 */
  --col09-width: ; /* 項目9 */
  --col10-width: ; /* 項目10 */
}

body{
  background: var(--background-color);
}

.sp-record-list-container {
  color:#333333;
  width: clamp(452px, 60%, 800px);
  margin:0 auto;
}

.sp-record-list-container .sp-html-parts p { margin:0; }

.sp-record-list-container .sp-record-list-parts {
  margin: 0 1rem .5rem;
}

.sp-record-list-container .sp-record-list-table {
  line-height:1.15;
  border-collapse:collapse;
  width:100%;
  height: 100%;
  margin-bottom:1rem;
  color:#333333;
  border-radius: var(--border-radius);
  border: var(--table-border);
  border-collapse: separate;
  border-spacing: 0;
  box-shadow: var(--table-shadow);
  overflow: hidden;
}

.sp-record-list-container .sp-record-list-table caption {
  padding-top:0.75rem;
  padding-bottom:0.75rem;
  color:#6c757d;
  text-align:left;
  caption-side:bottom;
}

.sp-record-list-container .sp-record-list-table a { text-decoration:none; }

.sp-record-list-container .sp-record-list-table a:hover { text-decoration:underline; }

.sp-record-list-container .sp-record-list-table th,
.sp-record-list-container .sp-record-list-table td {
  vertical-align:top;
  border-top:var(--row-border);
}

.sp-record-list-container .sp-record-list-table td:not(:last-child) {
  border-right: var(--col-border);
}

.sp-record-list-container .sp-record-list-table th {
  text-align:inherit;
  padding: 1.0rem 0.75rem;
}

.sp-record-list-container .sp-record-list-table td {
  padding: var(--data-padding) 0.75rem;
}

.sp-record-list-container .sp-record-list-table thead th {
  background: var(--th-color);
  color:var(--th-txtcolor);
  padding: calc(var(--data-padding) * 1.2) 0.75rem;
  font-weight:bold;
  vertical-align:top;
  border-bottom:var(--th-bottom-border);
  text-align:left;
}

.sp-record-list-container .sp-record-list-table thead th:not(:last-child){ border-right: var(--th-col-border); }

.sp-record-list-container .sp-record-list-table thead th:nth-child(1) { width: var(--col01-width);}
.sp-record-list-container .sp-record-list-table thead th:nth-child(2) { width: var(--col02-width);}
.sp-record-list-container .sp-record-list-table thead th:nth-child(3) { width: var(--col03-width);}
.sp-record-list-container .sp-record-list-table thead th:nth-child(4) { width: var(--col04-width);}
.sp-record-list-container .sp-record-list-table thead th:nth-child(5) { width: var(--col05-width);}
.sp-record-list-container .sp-record-list-table thead th:nth-child(6) { width: var(--col06-width);}
.sp-record-list-container .sp-record-list-table thead th:nth-child(7) { width: var(--col07-width);}
.sp-record-list-container .sp-record-list-table thead th:nth-child(8) { width: var(--col08-width);}
.sp-record-list-container .sp-record-list-table thead th:nth-child(9) { width: var(--col09-width);}
.sp-record-list-container .sp-record-list-table thead th:nth-child(10) { width: var(--col10-width);}

.sp-record-list-container .sp-record-list-table thead th.sp-nowrap { white-space:nowrap; }

.sp-record-list-container .sp-record-list-table thead th.sp-nowrap-truncate { white-space:nowrap; }

.sp-record-list-container .sp-record-list-table thead th.sp-nowrap-truncate a>span:first-child {
  display:inline-block;
  vertical-align:middle;
  max-width:12rem;
  overflow:hidden;
  text-overflow:ellipsis;
}

.sp-record-list-container .sp-record-list-table thead th a {
  color:inherit;
  text-decoration:none;
}

.sp-record-list-container .sp-record-list-table thead th a .sp-sorting-asc,
.sp-record-list-container .sp-record-list-table thead th a .sp-sorting-desc { color: var(--th-txtcolor); }

.sp-record-list-container .sp-record-list-table thead th a .sp-sorting-asc .fa,
.sp-record-list-container .sp-record-list-table thead th a .sp-sorting-desc .fa { font-weight:bold; }

.sp-record-list-container .sp-record-list-table thead th a .sp-sorting-desc { visibility:hidden; }

.sp-record-list-container .sp-record-list-table thead th a .sp-sorting-asc { display:none; }

.sp-record-list-container .sp-record-list-table thead th a.sp-desc-sorted .sp-sorting-desc { visibility:visible; }

.sp-record-list-container .sp-record-list-table thead th a.sp-asc-sorted .sp-sorting-asc { display:inline; }

.sp-record-list-container .sp-record-list-table thead th a.sp-asc-sorted .sp-sorting-desc { display:none; }

.sp-record-list-container .sp-record-list-table thead th a:hover {
  color:#333333;
  text-decoration:none;
}

.sp-record-list-container .sp-record-list-table thead th a:hover:not(.sp-sorted) .sp-sorting-desc { visibility:visible; }

.sp-record-list-container .sp-record-list-table tbody+tbody { border-top:2px solid #dddddd; }

.sp-record-list-container .sp-record-list-table tbody tr td{
  transition: .1s;
}

.sp-record-list-container .sp-record-list-table tbody tr:hover td{
  background:var(--hover-color);
}

.sp-record-list-container .sp-record-list-table tbody tr{
  background: var(--data-color);
}

.sp-record-list-container .sp-record-list-table tbody tr:nth-child(even){
  background: var(--even-color);
}

.sp-record-list-container .sp-record-list-table tr:first-child th,
.sp-record-list-container .sp-record-list-table tr:first-child td { border-top:0; }

.sp-record-list-container .sp-record-list-table td a:not(.sp-form-file-bold-link) {
  color: var(--link-color);
  font-weight:bold;
  display: inline-block;
  width: 100%;
  height: 100%;
  padding: var(--data-padding) 0.75rem;
  margin: calc(-1 * var(--data-padding)) -0.75rem;
  transition: .1s;
}

.sp-record-list-container .sp-record-list-table td span:nth-child(n+2) { margin-left:.1rem; }

.sp-record-list-container .sp-record-list-table a.sp-form-file-bold-link {
  text-decoration:none;
  color: var(--link-color);
  cursor:pointer;
  font-weight:bold;
}

.sp-record-list-container .sp-record-list-table a.sp-form-file-bold-link:hover {
  text-decoration:underline;
}

.sp-form-file-text-label { color:#6c757d; }

.sp-record-list-container .sp-table-sm th,
.sp-record-list-container .sp-table-sm td { padding:0.3rem; }

.sp-record-list-container .sp-table-bordered { border:1px solid #dddddd; }

.sp-record-list-container .sp-table-bordered th,
.sp-record-list-container .sp-table-bordered td { border:1px solid #dddddd; }

.sp-record-list-container .sp-table-bordered thead th,
.sp-record-list-container .sp-table-bordered thead td { border-bottom-width:2px; }

.sp-record-list-container .sp-table-borderless th,
.sp-record-list-container .sp-table-borderless td,
.sp-record-list-container .sp-table-borderless tbody+tbody { border:0; }

.sp-record-list-container .sp-record-list-no-records {
  margin:6.25rem auto;
  text-align:center;
  color:#808080;
}

.sp-record-list-pagination {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:justify;
  -ms-flex-pack:justify;
  justify-content:space-between;
  -webkit-box-align:center;
  -ms-flex-align:center;
  align-items:center;
}

.sp-record-list-pagination .sp-record-list-pagination-left,
.sp-record-list-pagination .sp-record-list-pagination-center,
.sp-record-list-pagination .sp-record-list-pagination-right {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-align:center;
  -ms-flex-align:center;
  align-items:center;
}

.sp-record-list-pagination .sp-record-list-pagination-left>*,
.sp-record-list-pagination .sp-record-list-pagination-center>*,
.sp-record-list-pagination .sp-record-list-pagination-right>* { margin:0 .5rem; }

.sp-record-list-pagination .sp-record-list-pagination-left {
  -webkit-box-pack:start;
  -ms-flex-pack:start;
  justify-content:flex-start;
}

.sp-record-list-pagination .sp-record-list-pagination-center {
  -webkit-box-pack:center;
  -ms-flex-pack:center;
  justify-content:center;
}

.sp-record-list-pagination .sp-record-list-pagination-right {
  -webkit-box-pack:end;
  -ms-flex-pack:end;
  justify-content:flex-end;
}

.sp-record-list-pagination .sp-form-control {
  -webkit-appearance:none;
  -moz-appearance:none;
  appearance:none;
  font-family:inherit;
  font-size:1rem;
  line-height:1.5;
  padding:.3rem .7rem;
  color:#333333;
  -webkit-box-sizing:border-box;
  box-sizing:border-box;
  width:100%;
  margin: 1px 1px calc(0.2rem + 1px);
  border:1px solid #dddddd;
  border-radius:calc(var(--border-radius) / 1.2);
  box-sizing:border-box;
  outline:none;
}

.sp-record-list-pagination .sp-form-control:focus {
  margin: 0 0 0.2rem;
  border: 2px solid var(--main-color);
}

.sp-record-list-pagination .sp-form-inline .sp-form-control {
  display:inline-block;
  width:auto;
  vertical-align:middle;
}

.sp-record-list-pagination select.sp-form-control,
.sp-record-list-pagination option.sp-form-control {
  -webkit-appearance:none;
  -moz-appearance:none;
  appearance:none;
  padding-right:1.5rem;
}

.sp-record-list-pagination select.sp-form-control::-ms-expand { display:none; }

.sp-record-list-pagination .sp-form-dropdown { position:relative; }

.sp-record-list-pagination .sp-form-dropdown-inline {
  position:relative;
  display:inline-block;
}

.sp-record-list-pagination .sp-form-dropdown-icon {
  display:block;
  position:absolute;
  top:1rem;
  right:.5rem;
  line-height:0;
  pointer-events:none;
}

.sp-record-list-pagination .sp-form-dropdown-icon:after {
  content:"";
  display:block;
  border-top:.333rem solid #888888;
  border-right:.333rem solid transparent;
  border-left:.333rem solid transparent;
}

.sp-record-list-pagination ul.sp-page-navs {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  padding-left:0;
  list-style:none;
}

.sp-record-list-pagination ul.sp-page-navs li.sp-page-nav-item {
  line-height:1.25rem;
  text-align:center;
  -webkit-user-select:none;
  -moz-user-select:none;
  -ms-user-select:none;
  user-select:none;
  white-space:nowrap;
}

.sp-record-list-pagination ul.sp-page-navs li.sp-page-nav-item a,
.sp-record-list-pagination ul.sp-page-navs li.sp-page-nav-item span {
  display:inline-block;
  margin:0 0.2rem;
  padding:.375rem .75rem;
  border-radius:calc(var(--border-radius) / 1.2);
  color:var(--main-color);
  font-weight: bold;
}

.sp-record-list-pagination ul.sp-page-navs li.sp-page-nav-item a .fa,
.sp-record-list-pagination ul.sp-page-navs li.sp-page-nav-item span .fa {
  font-size:1.125rem;
  width:1rem;
}

.sp-record-list-pagination ul.sp-page-navs li.sp-page-nav-item a { text-decoration:none; }

.sp-record-list-pagination ul.sp-page-navs li.sp-page-nav-item a:hover { background-color:rgba(0,0,0,0.075); }

.sp-record-list-pagination ul.sp-page-navs li.sp-page-nav-item span {
  background-color:rgba(0,0,0,0.075);
  color: var(--main-color);
  font-weight: bold;
}

.sp-record-list-pagination ul.sp-page-navs li.sp-page-nav-item.sp-page-nav-current span {
  background-color:var(--main-color);
  border-color:var(--main-color);
  color:#ffffff;
}

.sp-record-list-pagination ul.sp-page-navs li.sp-page-nav-more {
  line-height:1rem;
  text-align:center;
  margin:0 .2rem;
  padding:.375rem .3rem;
}

@media (max-width: 765px) {
  .sp-record-list-container .sp-record-list-parts {
    margin: 0 0 .5rem;
  }

  .sp-record-list-container [class="sp-record-list-parts"]{
    overflow-x: auto;
  }

  .sp-record-list-container .sp-record-list-table {
    width: var(--mobile-table-width);
    font-size: .9em;
    box-shadow: unset;

  }
}

HTMLの「"f0xx"」には、物件マスタDB内の対応するフィールドIDを記載ください。
手順2:資料ダウンロードページへのブロック埋め込み
資料ダウンロードページに作成したブロックを埋め込みます。
HTML
<!-- ヘッダ -->
<sp:block name="fcb0xxxx"></sp:block>
<!-- 資料ダウンロード一覧 -->
<h1>資料ダウンロードページ</h1>
<sp:block name="rlb0xxxx"></sp:block>
<!-- フッター -->
<sp:block name="fcb0xxxx"></sp:block>

CSS
h2 {
    text-align: center;
}

h1 {
    text-align: center;
}

.reserve_attention {
    display: block;
    text-align: center;
    margin: 0.5rem 0;
}

.url-button {
    width: auto;
    /* font-size:0.875rem; */
    padding:0.5rem 0;
    text-align:center;
    text-decoration:none;
    flex: 1;

    color: #ffffff;
    background-color: #0D60DB;
    border: 1.0px solid #0D60DB;
    border-radius: calc(12px / 1.2);
}

.button-l {
    padding:0.5rem 6%;
    margin-right: 0.5rem;
}

.button-r {
    padding:0.5rem 5%;
    margin-left: 0.5rem;
}

.button {
    padding:0.5rem 5%;
}

.sp-url-button {
    text-align: center;
    width: auto;
    margin: 1.5rem auto;
    /* border: 1px solid #dddddd; */
}

「HTMLの「"fcb0xxxx"」、「"rib0xxxx"」、「"ifb0xxxx"」には、それぞれ作成した「ヘッダ」「内覧予約物件詳細」「資料請求フォームブロック」「フッター」のIDを記載ください。
HTMLの「'p0xxxxx'」には内覧予約トップページのIDを記載ください。
HTMLの「"fcb0xxxx"」、「"rlb0xxxx"」には、それぞれヘッダ、ダウンロード資料一覧、フッターのIDを記載ください。

最後に

設定後は動作確認を必ず行い、動作に問題がないか確認をしてください。
また、不具合やほかのやり方が知りたい等あれば、下記の「コンテンツに関しての要望はこちら」からご連絡ください。

サイト設計・構築が完了したので次はユーザ・アプリロール・グループ設定に進みます。
関連記事はこちら

解決しない場合はこちら コンテンツに関しての
要望はこちら