診療案内

診療時間表・お知らせ・アクセスなど、医院サイトの必須情報パーツ

診療時間表

スマホでも崩れない診療時間テーブル。休診マスは自動でグレー表示になります。

コード・使い方を見る
<div class="ht-wrap">
  <table class="ht-table">
    <caption>診療時間</caption>
    <thead>
      <tr><th>診療時間</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th><th>日祝</th></tr>
    </thead>
    <tbody>
      <tr>
        <th>9:00〜12:30</th>
        <td>●</td><td>●</td><td>●</td><td>●</td><td>●</td><td>●</td><td class="ht-off">-</td>
      </tr>
      <tr>
        <th>14:30〜18:30</th>
        <td>●</td><td>●</td><td class="ht-off">-</td><td>●</td><td>●</td><td>▲</td><td class="ht-off">-</td>
      </tr>
    </tbody>
  </table>
  <p class="ht-note">▲ 土曜午後は 14:00〜17:00 / 休診日:水曜午後・日曜・祝日</p>
</div>
.ht-wrap {
  --ht-accent: #2f8f9d;   /* メインカラー(医院のテーマ色に変更してください) */
  --ht-off-bg: #f3f4f6;   /* 休診マスの背景色 */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 640px;
  margin: 0 auto;
}
.ht-table { width: 100%; border-collapse: collapse; background: #fff; box-shadow: 0 2px 12px rgba(0,0,0,.06); border-radius: 10px; overflow: hidden; }
.ht-table caption { font-weight: 700; font-size: 1.05rem; color: var(--ht-accent); padding: .6em; letter-spacing: .1em; }
.ht-table th, .ht-table td { border: 1px solid #e5e7eb; padding: .65em .4em; text-align: center; font-size: .92rem; }
.ht-table thead th { background: var(--ht-accent); color: #fff; font-weight: 600; }
.ht-table tbody th { background: #fafafa; font-weight: 600; white-space: nowrap; }
.ht-table td { color: var(--ht-accent); font-weight: 700; }
.ht-table td.ht-off { background: var(--ht-off-bg); color: #b0b6bd; font-weight: 400; }
.ht-note { font-size: .8rem; color: #6b7280; margin-top: .6em; text-align: center; }
@media (max-width: 480px) {
  .ht-table th, .ht-table td { padding: .5em .25em; font-size: .8rem; }
}

休診お知らせバー

ページ上部に固定表示できる、休診日などのお知らせバーです。×ボタンで閉じられます。

コード・使い方を見る
<div class="nb-bar">
  <p class="nb-text"><span class="nb-badge">お知らせ</span>8月13日〜15日は休診いたします。ご不便をおかけしますが、よろしくお願いいたします。</p>
  <button type="button" class="nb-close" aria-label="お知らせを閉じる">×</button>
</div>
.nb-bar {
  --nb-bg: #c0392b;   /* バーの背景色(医院のテーマ色や注意喚起色に変更してください) */
  --nb-color: #ffffff; /* 文字色 */
  display: flex;
  align-items: center;
  gap: .75em;
  width: 100%;
  box-sizing: border-box;
  background: var(--nb-bg);
  color: var(--nb-color);
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  padding: .7em 1em;
  position: relative;
}
.nb-bar.nb-hidden { display: none; }
.nb-text {
  flex: 1;
  margin: 0;
  font-size: .92rem;
  line-height: 1.6;
}
.nb-badge {
  display: inline-block;
  background: rgba(255, 255, 255, .18);
  border-radius: 4px;
  padding: .1em .6em;
  font-size: .82em;
  font-weight: 700;
  letter-spacing: .05em;
  margin-right: .6em;
}
.nb-close {
  flex-shrink: 0;
  appearance: none;
  border: none;
  background: transparent;
  color: var(--nb-color);
  font-size: 1.3rem;
  line-height: 1;
  cursor: pointer;
  padding: .2em .4em;
  border-radius: 4px;
  opacity: .85;
  transition: opacity .15s, background-color .15s;
}
.nb-close:hover,
.nb-close:focus-visible {
  opacity: 1;
  background: rgba(255, 255, 255, .18);
  outline: none;
}
@media (max-width: 480px) {
  .nb-bar { padding: .6em .8em; gap: .5em; }
  .nb-text { font-size: .82rem; line-height: 1.5; }
  .nb-badge { display: block; width: fit-content; margin: 0 0 .3em; }
  .nb-close { font-size: 1.15rem; }
}

/* ▼ ページ上部に固定(追従)させたい場合:
   この下の「.nb-bar { ... }」の1行を、このコメントの終わり(すぐ下の行)より
   さらに下に、まるごとコピーして貼り付けてください。
.nb-bar { position: sticky; top: 0; z-index: 9999; }
*/
(function () {
  document.querySelectorAll('.nb-close').forEach(function (btn) {
    btn.addEventListener('click', function () {
      var bar = btn.closest('.nb-bar');
      if (bar) bar.classList.add('nb-hidden');
    });
  });
})();

アクセス(地図+住所カード)

地図と住所・電話・最寄駅・駐車場情報を並べて表示するアクセス案内です。スマホでは自動的に縦に並びます。

コード・使い方を見る
<div class="am-wrap">
  <div class="am-map">
    <iframe
      src="https://www.google.com/maps?q=%E6%9D%B1%E4%BA%AC%E9%A7%85&output=embed"
      loading="lazy"
      title="みなと総合クリニックの地図(東京駅周辺・プレースホルダ)"
      referrerpolicy="no-referrer-when-downgrade"
    ></iframe>
  </div>
  <div class="am-card">
    <h3 class="am-title">アクセス</h3>
    <dl class="am-list">
      <div class="am-row">
        <dt>住所</dt>
        <dd>〒000-0000<br>東京都港区0-0-0</dd>
      </div>
      <div class="am-row">
        <dt>電話</dt>
        <dd><a href="tel:0300000000">03-0000-0000</a></dd>
      </div>
      <div class="am-row">
        <dt>最寄駅</dt>
        <dd>◯◯駅 ◯◯口から徒歩3分</dd>
      </div>
      <div class="am-row">
        <dt>駐車場</dt>
        <dd>提携駐車場あり(3台分・診療中は無料)</dd>
      </div>
    </dl>
  </div>
</div>
.am-wrap {
  --am-accent: #2f8f9d; /* アクセントカラー(見出し・アイコン等に使用、医院のテーマ色に変更してください) */
  display: flex;
  gap: 1.25rem;
  max-width: 880px;
  margin: 0 auto;
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
}
.am-map {
  flex: 1 1 55%;
  min-width: 0;
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 2px 12px rgba(0, 0, 0, .08);
  background: #f3f4f6;
}
.am-map iframe {
  width: 100%;
  height: 100%;
  min-height: 260px;
  border: 0;
  display: block;
}
.am-card {
  flex: 1 1 45%;
  min-width: 0;
  background: #fff;
  border: 1px solid #e5e7eb;
  border-radius: 12px;
  padding: 1.4rem 1.5rem;
  box-shadow: 0 2px 12px rgba(0, 0, 0, .06);
}
.am-title {
  margin: 0 0 .9rem;
  font-size: 1.05rem;
  font-weight: 700;
  color: var(--am-accent);
  letter-spacing: .05em;
  border-left: 4px solid var(--am-accent);
  padding-left: .6em;
}
.am-list { margin: 0; }
.am-row {
  display: flex;
  gap: 1em;
  padding: .65em 0;
  border-bottom: 1px dashed #e5e7eb;
}
.am-row:last-child { border-bottom: none; }
.am-row dt {
  flex: 0 0 4.5em;
  font-size: .85rem;
  font-weight: 700;
  color: var(--am-accent);
}
.am-row dd {
  margin: 0;
  flex: 1;
  font-size: .92rem;
  color: #333;
  line-height: 1.6;
}
.am-row dd a {
  color: #333;
  text-decoration: none;
  font-weight: 700;
}
.am-row dd a:hover { text-decoration: underline; }

@media (max-width: 640px) {
  .am-wrap { flex-direction: column; }
  .am-map iframe { min-height: 220px; }
  .am-card { padding: 1.1rem 1.2rem; }
}

院内設備リスト

設備名と一言説明をカードで並べる、院内設備の紹介グリッドです。

コード・使い方を見る
<div class="fl-wrap">
  <h3 class="fl-title">院内設備のご案内</h3>
  <p class="fl-lead">みなと総合クリニックでは、安心して通っていただけるよう設備を整えています。</p>
  <ul class="fl-grid">
    <li class="fl-card">
      <span class="fl-icon" aria-hidden="true">🚪</span>
      <h4 class="fl-name">個室診療室</h4>
      <p class="fl-desc">プライバシーに配慮した完全個室で、周りを気にせずご相談いただけます。</p>
    </li>
    <li class="fl-card">
      <span class="fl-icon" aria-hidden="true">🖥️</span>
      <h4 class="fl-name">最新CT</h4>
      <p class="fl-desc">高精細な最新CT装置を導入し、迅速で正確な検査を行います。</p>
    </li>
    <li class="fl-card">
      <span class="fl-icon" aria-hidden="true">🧸</span>
      <h4 class="fl-name">キッズスペース</h4>
      <p class="fl-desc">絵本やおもちゃを備えたキッズスペースで、お子様連れでも安心です。</p>
    </li>
    <li class="fl-card">
      <span class="fl-icon" aria-hidden="true">♿</span>
      <h4 class="fl-name">バリアフリー</h4>
      <p class="fl-desc">段差のない院内とスロープ完備で、車椅子やベビーカーでもスムーズに移動できます。</p>
    </li>
  </ul>
</div>
.fl-wrap {
  --fl-accent: #2f8f9d; /* アクセントカラー(見出し・アイコン背景に使用、医院のテーマ色に変更してください) */
  --fl-columns: 4;      /* グリッドの列数(PC表示時。2〜4程度を推奨) */
  max-width: 960px;
  margin: 0 auto;
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  text-align: center;
}
.fl-title {
  margin: 0 0 .5rem;
  font-size: 1.2rem;
  font-weight: 700;
  color: var(--fl-accent);
  letter-spacing: .06em;
}
.fl-lead {
  margin: 0 0 1.6rem;
  font-size: .92rem;
  color: #6b7280;
}
.fl-grid {
  display: grid;
  grid-template-columns: repeat(var(--fl-columns), 1fr);
  gap: 1.1rem;
  list-style: none;
  margin: 0;
  padding: 0;
}
.fl-card {
  background: #fff;
  border: 1px solid #e5e7eb;
  border-radius: 12px;
  padding: 1.6rem 1.2rem;
  box-shadow: 0 2px 10px rgba(0, 0, 0, .05);
  transition: transform .18s ease, box-shadow .18s ease;
}
.fl-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 6px 18px rgba(0, 0, 0, .09);
}
.fl-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 3rem;
  height: 3rem;
  border-radius: 50%;
  background: #eef6f7; /* アイコン背景色(薄め。--fl-accent の系統色に合わせて変更してください) */
  font-size: 1.4rem;
  margin-bottom: .8rem;
}
.fl-name {
  margin: 0 0 .5rem;
  font-size: .98rem;
  font-weight: 700;
  color: #1f2937;
}
.fl-desc {
  margin: 0;
  font-size: .85rem;
  line-height: 1.7;
  color: #6b7280;
  text-align: left;
}
@media (max-width: 640px) {
  .fl-grid { grid-template-columns: repeat(2, 1fr); gap: .8rem; }
  .fl-card { padding: 1.2rem .9rem; }
}
@media (max-width: 400px) {
  .fl-grid { grid-template-columns: 1fr; }
}

受診の流れ

初診の流れを4ステップで示す、番号バッジ付きのステップフローです。PCでは横並び、スマホでは縦並びに切り替わります。

コード・使い方を見る
<div class="fs-wrap">
  <h3 class="fs-title">初診の流れ</h3>
  <ol class="fs-list">
    <li class="fs-step">
      <span class="fs-num" aria-hidden="true">1</span>
      <div class="fs-body">
        <h4 class="fs-heading">ご予約</h4>
        <p class="fs-desc">お電話またはWEB予約フォームより、ご希望の日時をご連絡ください。</p>
      </div>
    </li>
    <li class="fs-step">
      <span class="fs-num" aria-hidden="true">2</span>
      <div class="fs-body">
        <h4 class="fs-heading">ご来院・受付</h4>
        <p class="fs-desc">保険証をご持参のうえ、受付にて問診票のご記入をお願いいたします。</p>
      </div>
    </li>
    <li class="fs-step">
      <span class="fs-num" aria-hidden="true">3</span>
      <div class="fs-body">
        <h4 class="fs-heading">診察・検査</h4>
        <p class="fs-desc">医師が丁寧に診察いたします。必要に応じて各種検査を行います。</p>
      </div>
    </li>
    <li class="fs-step">
      <span class="fs-num" aria-hidden="true">4</span>
      <div class="fs-body">
        <h4 class="fs-heading">お会計・次回予約</h4>
        <p class="fs-desc">お会計後、必要な場合は次回のご予約をお取りいただけます。</p>
      </div>
    </li>
  </ol>
</div>
.fs-wrap {
  --fs-accent: #2f8f9d; /* 番号バッジ・線の色(医院のテーマ色に変更してください) */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 960px;
  margin: 0 auto;
  box-sizing: border-box;
}
.fs-wrap * { box-sizing: border-box; }
.fs-title {
  margin: 0 0 1.4em;
  text-align: center;
  font-size: 1.2rem;
  font-weight: 700;
  color: #2d3339;
  letter-spacing: .06em;
}
.fs-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  align-items: stretch;
  gap: 0;
}
.fs-step {
  position: relative;
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 0 1em;
}
.fs-step + .fs-step::before {
  content: "";
  position: absolute;
  top: 22px;
  left: -50%;
  width: 100%;
  height: 2px;
  background: var(--fs-accent);
  opacity: .35;
}
.fs-num {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: var(--fs-accent);
  color: #fff;
  font-size: 1.15rem;
  font-weight: 700;
  margin-bottom: .8em;
  position: relative;
  z-index: 1;
  flex-shrink: 0;
}
.fs-body {
  min-width: 0;
}
.fs-heading {
  margin: 0 0 .4em;
  font-size: 1rem;
  font-weight: 700;
  color: #2d3339;
}
.fs-desc {
  margin: 0;
  font-size: .86rem;
  line-height: 1.7;
  color: #6b7280;
}

@media (max-width: 720px) {
  .fs-list {
    flex-direction: column;
    gap: 1.4em;
  }
  .fs-step {
    flex-direction: row;
    align-items: flex-start;
    text-align: left;
    padding: 0;
  }
  .fs-step + .fs-step::before {
    top: -0.7em;
    left: 21px;
    width: 2px;
    height: 1.4em;
  }
  .fs-num {
    margin: 0 1em 0 0;
  }
  .fs-body { flex: 1; }
  .fs-heading { margin-top: .3em; }
}

@media (max-width: 375px) {
  .fs-num { width: 38px; height: 38px; font-size: 1rem; }
  .fs-desc { font-size: .82rem; }
}

診療科目一覧

診療科目をアイコン付きで一覧表示するグリッドです。PCは3列、スマホは1〜2列に切り替わります。

コード・使い方を見る
<div class="dl-wrap">
  <h3 class="dl-title">診療科目</h3>
  <ul class="dl-grid">
    <li class="dl-item">
      <span class="dl-icon" aria-hidden="true">🩺</span>
      <h4 class="dl-name">内科</h4>
      <p class="dl-desc">風邪や生活習慣病など幅広く対応します。</p>
    </li>
    <li class="dl-item">
      <span class="dl-icon" aria-hidden="true">🧸</span>
      <h4 class="dl-name">小児科</h4>
      <p class="dl-desc">お子さまの発熱・体調不良を診察します。</p>
    </li>
    <li class="dl-item">
      <span class="dl-icon" aria-hidden="true">🧴</span>
      <h4 class="dl-name">皮膚科</h4>
      <p class="dl-desc">湿疹・かぶれなどのお肌のお悩みに。</p>
    </li>
    <li class="dl-item">
      <span class="dl-icon" aria-hidden="true">🌼</span>
      <h4 class="dl-name">アレルギー科</h4>
      <p class="dl-desc">花粉症や食物アレルギーの検査・治療。</p>
    </li>
    <li class="dl-item">
      <span class="dl-icon" aria-hidden="true">📋</span>
      <h4 class="dl-name">健康診断</h4>
      <p class="dl-desc">各種健診・人間ドックを実施しています。</p>
    </li>
    <li class="dl-item">
      <span class="dl-icon" aria-hidden="true">💉</span>
      <h4 class="dl-name">予防接種</h4>
      <p class="dl-desc">インフルエンザなど各種予防接種に対応。</p>
    </li>
  </ul>
</div>
.dl-wrap {
  --dl-accent: #2f8f9d; /* アイコンの色(医院のテーマ色に変更してください) */
  --dl-columns: 3;      /* PC表示時の列数 */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 960px;
  margin: 0 auto;
  box-sizing: border-box;
}
.dl-wrap * { box-sizing: border-box; }
.dl-title {
  margin: 0 0 1.2em;
  text-align: center;
  font-size: 1.2rem;
  font-weight: 700;
  color: #2d3339;
  letter-spacing: .06em;
}
.dl-grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(var(--dl-columns), 1fr);
  gap: 1em;
}
.dl-item {
  background: #fff;
  border: 1px solid #eef0f2;
  border-radius: 12px;
  padding: 1.6em 1.2em;
  text-align: center;
  box-shadow: 0 2px 10px rgba(0,0,0,.04);
}
.dl-icon {
  display: block;
  font-size: 1.8rem;
  line-height: 1;
  margin-bottom: .5em;
  color: var(--dl-accent);
}
.dl-name {
  margin: 0 0 .4em;
  font-size: 1rem;
  font-weight: 700;
  color: #2d3339;
}
.dl-desc {
  margin: 0;
  font-size: .84rem;
  line-height: 1.7;
  color: #6b7280;
}

@media (max-width: 720px) {
  .dl-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 480px) {
  .dl-grid { grid-template-columns: 1fr; gap: .8em; }
  .dl-item { padding: 1.2em 1em; }
}

保険診療・自費診療の案内

保険診療と自費診療の違い、それぞれの持ち物を左右2列で整理した案内表です。

コード・使い方を見る
<div class="ii-wrap">
  <h3 class="ii-title">保険診療・自費診療について</h3>
  <div class="ii-cols">
    <div class="ii-col">
      <p class="ii-tag ii-tag-ins">保険診療</p>
      <p class="ii-desc">健康保険証をご提示いただくことで、保険適用の範囲内で診療を受けていただけます。</p>
      <p class="ii-sub">お持ちいただくもの</p>
      <ul class="ii-list">
        <li>健康保険証</li>
        <li>各種医療証(お持ちの方)</li>
        <li>お薬手帳</li>
        <li>紹介状(ある場合)</li>
      </ul>
    </div>
    <div class="ii-col">
      <p class="ii-tag ii-tag-self">自費診療</p>
      <p class="ii-desc">保険適用外の検査・治療は自費診療となります。事前にお見積りをご案内いたします。</p>
      <p class="ii-sub">お持ちいただくもの</p>
      <ul class="ii-list">
        <li>本人確認書類</li>
        <li>診察券(2回目以降)</li>
        <li>お支払い方法(現金・カード)</li>
      </ul>
    </div>
  </div>
  <p class="ii-note">※ 保険証をお忘れの場合、その日は一旦全額自己負担となり、後日精算となります。ご不明な点はお電話(03-0000-0000)にてお問い合わせください。</p>
</div>
.ii-wrap {
  --ii-ins: #2f8f9d;    /* 保険診療タグの色(医院のテーマ色に変更してください) */
  --ii-self: #b98b3e;   /* 自費診療タグの色 */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 760px;
  margin: 0 auto;
  box-sizing: border-box;
}
.ii-wrap * { box-sizing: border-box; }
.ii-title {
  margin: 0 0 1em;
  text-align: center;
  font-size: 1.2rem;
  font-weight: 700;
  color: #2d3339;
  letter-spacing: .06em;
}
.ii-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.2em;
}
.ii-col {
  background: #fff;
  border: 1px solid #eef0f2;
  border-radius: 12px;
  padding: 1.5em 1.4em;
  box-shadow: 0 2px 10px rgba(0,0,0,.04);
}
.ii-tag {
  display: inline-block;
  margin: 0 0 .8em;
  padding: .3em .9em;
  border-radius: 999px;
  font-size: .82rem;
  font-weight: 700;
  color: #fff;
  letter-spacing: .05em;
}
.ii-tag-ins { background: var(--ii-ins); }
.ii-tag-self { background: var(--ii-self); }
.ii-desc {
  margin: 0 0 1em;
  font-size: .88rem;
  line-height: 1.8;
  color: #4a5158;
}
.ii-sub {
  margin: 0 0 .5em;
  font-size: .82rem;
  font-weight: 700;
  color: #2d3339;
  border-left: 3px solid #dfe3e6;
  padding-left: .5em;
}
.ii-list {
  margin: 0;
  padding: 0;
  list-style: none;
}
.ii-list li {
  position: relative;
  padding-left: 1.2em;
  font-size: .85rem;
  line-height: 1.9;
  color: #4a5158;
}
.ii-list li::before {
  content: "✓";
  position: absolute;
  left: 0;
  color: #8a9199;
  font-weight: 700;
}
.ii-note {
  margin: 1.2em 0 0;
  padding: .9em 1.1em;
  background: #f7f8f9;
  border-radius: 8px;
  font-size: .78rem;
  line-height: 1.8;
  color: #6b7280;
}

@media (max-width: 560px) {
  .ii-cols { grid-template-columns: 1fr; }
  .ii-col { padding: 1.2em 1.1em; }
}

初診時の持ち物チェックリスト

初診の患者さまに向けて、持ち物をチェックボックス風の見た目で分かりやすく案内するリストです。

コード・使い方を見る
<div class="fv-wrap">
  <h3 class="fv-title">初診の方へ ― 持ち物チェックリスト</h3>
  <p class="fv-lead">ご来院前に、下記の持ち物をご確認ください。</p>
  <ul class="fv-list">
    <li class="fv-item">
      <span class="fv-box" aria-hidden="true"></span>
      <span class="fv-text">健康保険証</span>
    </li>
    <li class="fv-item">
      <span class="fv-box" aria-hidden="true"></span>
      <span class="fv-text">各種医療証(お持ちの方のみ)</span>
    </li>
    <li class="fv-item">
      <span class="fv-box" aria-hidden="true"></span>
      <span class="fv-text">お薬手帳・服用中のお薬</span>
    </li>
    <li class="fv-item">
      <span class="fv-box" aria-hidden="true"></span>
      <span class="fv-text">紹介状(他院からの場合)</span>
    </li>
    <li class="fv-item">
      <span class="fv-box" aria-hidden="true"></span>
      <span class="fv-text">筆記用具(問診票のご記入用)</span>
    </li>
  </ul>
  <p class="fv-note">当日は受付にて問診票のご記入をお願いしております。ご来院の10分前を目安にお越しください。</p>
</div>
.fv-wrap {
  --fv-accent: #2f8f9d;  /* チェックボックスの色(医院のテーマ色に変更してください) */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 520px;
  margin: 0 auto;
  background: #fff;
  border: 1px solid #eef0f2;
  border-radius: 14px;
  padding: 1.8em 1.6em;
  box-shadow: 0 2px 14px rgba(0,0,0,.05);
  box-sizing: border-box;
}
.fv-wrap * { box-sizing: border-box; }
.fv-title {
  margin: 0 0 .5em;
  font-size: 1.1rem;
  font-weight: 700;
  color: #2d3339;
  letter-spacing: .04em;
}
.fv-lead {
  margin: 0 0 1.2em;
  font-size: .85rem;
  color: #6b7280;
}
.fv-list {
  margin: 0 0 1.4em;
  padding: 0;
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: .7em;
}
.fv-item {
  display: flex;
  align-items: center;
  gap: .8em;
  padding: .7em .9em;
  background: #f7f8f9;
  border-radius: 8px;
}
.fv-box {
  flex: 0 0 auto;
  width: 1.2em;
  height: 1.2em;
  border: 2px solid var(--fv-accent);
  border-radius: 5px;
  background: #fff;
  position: relative;
}
.fv-box::after {
  content: "";
  position: absolute;
  top: 46%;
  left: 50%;
  width: .35em;
  height: .65em;
  border-right: 2px solid var(--fv-accent);
  border-bottom: 2px solid var(--fv-accent);
  transform: translate(-50%, -60%) rotate(45deg);
  opacity: 0;
}
.fv-item:hover .fv-box::after { opacity: .35; }
.fv-text {
  font-size: .9rem;
  color: #2d3339;
  font-weight: 500;
}
.fv-note {
  margin: 0;
  padding-top: 1em;
  border-top: 1px dashed #e5e7eb;
  font-size: .78rem;
  line-height: 1.8;
  color: #6b7280;
}

@media (max-width: 480px) {
  .fv-wrap { padding: 1.4em 1.1em; }
  .fv-item { padding: .6em .7em; }
}

院内フロアマップ

受付・診察室・レントゲン室・お手洗いなどを簡易的な区画図で示す院内フロアマップです。

コード・使い方を見る
<div class="fm-wrap">
  <h3 class="fm-title">院内フロアマップ</h3>
  <div class="fm-grid">
    <div class="fm-room fm-r-entrance">
      <span class="fm-icon" aria-hidden="true">🚪</span>
      <span class="fm-label">入口</span>
    </div>
    <div class="fm-room fm-r-reception">
      <span class="fm-icon" aria-hidden="true">🛎️</span>
      <span class="fm-label">受付・待合室</span>
    </div>
    <div class="fm-room fm-r-room1">
      <span class="fm-icon" aria-hidden="true">🩺</span>
      <span class="fm-label">診察室 1</span>
    </div>
    <div class="fm-room fm-r-room2">
      <span class="fm-icon" aria-hidden="true">🩺</span>
      <span class="fm-label">診察室 2</span>
    </div>
    <div class="fm-room fm-r-xray">
      <span class="fm-icon" aria-hidden="true">📷</span>
      <span class="fm-label">レントゲン室</span>
    </div>
    <div class="fm-room fm-r-toilet">
      <span class="fm-icon" aria-hidden="true">🚻</span>
      <span class="fm-label">お手洗い</span>
    </div>
  </div>
  <p class="fm-note">※ 簡易図のため実際の形状とは異なります。院内では案内表示もございますので、スタッフまでお気軽にお声がけください。</p>
</div>
.fm-wrap {
  --fm-accent: #2f8f9d;      /* 部屋の枠線・アイコンの色(医院のテーマ色に変更してください) */
  --fm-room-bg: #f7f8f9;     /* 部屋の背景色 */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 640px;
  margin: 0 auto;
  box-sizing: border-box;
}
.fm-wrap * { box-sizing: border-box; }
.fm-title {
  margin: 0 0 1em;
  text-align: center;
  font-size: 1.2rem;
  font-weight: 700;
  color: #2d3339;
  letter-spacing: .06em;
}
.fm-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: repeat(3, 84px);
  gap: 8px;
  padding: 12px;
  background: #eef0f2;
  border-radius: 14px;
}
.fm-room {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: .3em;
  background: var(--fm-room-bg);
  border: 2px solid var(--fm-accent);
  border-radius: 8px;
  text-align: center;
  padding: .4em;
}
.fm-icon { font-size: 1.4rem; line-height: 1; }
.fm-label { font-size: .74rem; font-weight: 700; color: #2d3339; }

.fm-r-entrance  { grid-column: 1 / 3; grid-row: 3 / 4; }
.fm-r-reception { grid-column: 3 / 5; grid-row: 2 / 4; background: #fff; }
.fm-r-room1     { grid-column: 1 / 3; grid-row: 1 / 2; }
.fm-r-room2     { grid-column: 1 / 3; grid-row: 2 / 3; }
.fm-r-xray      { grid-column: 3 / 4; grid-row: 1 / 2; }
.fm-r-toilet    { grid-column: 4 / 5; grid-row: 1 / 2; }

.fm-note {
  margin: 1em 0 0;
  font-size: .78rem;
  line-height: 1.8;
  color: #6b7280;
  text-align: center;
}

@media (max-width: 480px) {
  .fm-grid {
    grid-template-columns: repeat(2, 1fr);
    grid-template-rows: repeat(6, 72px);
  }
  .fm-r-entrance  { grid-column: 1 / 3; grid-row: 6 / 7; }
  .fm-r-reception { grid-column: 1 / 3; grid-row: 5 / 6; }
  .fm-r-room1     { grid-column: 1 / 2; grid-row: 1 / 2; }
  .fm-r-room2     { grid-column: 2 / 3; grid-row: 1 / 2; }
  .fm-r-xray      { grid-column: 1 / 2; grid-row: 2 / 3; }
  .fm-r-toilet    { grid-column: 2 / 3; grid-row: 2 / 3; }
  .fm-icon { font-size: 1.2rem; }
  .fm-label { font-size: .68rem; }
}

駐車場・提携パーキング案内

専用駐車場と提携コインパーキングの台数・料金・案内を2枚のカードで並べた駐車場案内です。

コード・使い方を見る
<div class="pg-wrap">
  <h3 class="pg-title">駐車場のご案内</h3>
  <div class="pg-cards">
    <div class="pg-card">
      <p class="pg-tag">専用駐車場</p>
      <p class="pg-num">6<span class="pg-unit">台</span></p>
      <dl class="pg-detail">
        <div class="pg-row"><dt>営業時間</dt><dd>診療時間内</dd></div>
        <div class="pg-row"><dt>料金</dt><dd>無料</dd></div>
        <div class="pg-row"><dt>場所</dt><dd>建物裏手</dd></div>
      </dl>
    </div>
    <div class="pg-card">
      <p class="pg-tag pg-tag-alt">提携コインパーキング</p>
      <p class="pg-num">満車時<span class="pg-unit">はこちら</span></p>
      <dl class="pg-detail">
        <div class="pg-row"><dt>名称</dt><dd>タイムズ港0-0-0</dd></div>
        <div class="pg-row"><dt>料金</dt><dd>受付で駐車券をご提示ください(2時間分サービス)</dd></div>
        <div class="pg-row"><dt>距離</dt><dd>徒歩1分</dd></div>
      </dl>
    </div>
  </div>
  <a class="pg-btn" href="https://maps.google.com/" target="_blank" rel="noopener">地図で見る</a>
  <p class="pg-note">満車の際は近隣のコインパーキングをご利用のうえ、受付にてお申し出ください。</p>
</div>
.pg-wrap {
  --pg-accent: #2f8f9d;  /* メインカラー(医院のテーマ色に変更してください) */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 640px;
  margin: 0 auto;
  text-align: center;
  box-sizing: border-box;
}
.pg-wrap * { box-sizing: border-box; }
.pg-title {
  margin: 0 0 1em;
  font-size: 1.2rem;
  font-weight: 700;
  color: #2d3339;
  letter-spacing: .06em;
}
.pg-cards {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1em;
  text-align: left;
}
.pg-card {
  background: #fff;
  border: 1px solid #eef0f2;
  border-radius: 12px;
  padding: 1.4em 1.3em;
  box-shadow: 0 2px 10px rgba(0,0,0,.04);
}
.pg-tag {
  display: inline-block;
  margin: 0 0 .6em;
  padding: .25em .8em;
  border-radius: 999px;
  background: var(--pg-accent);
  color: #fff;
  font-size: .76rem;
  font-weight: 700;
  letter-spacing: .04em;
}
.pg-tag-alt { background: #8a9199; }
.pg-num {
  margin: 0 0 .8em;
  font-size: 1.6rem;
  font-weight: 700;
  color: var(--pg-accent);
  line-height: 1;
}
.pg-unit {
  font-size: .8rem;
  font-weight: 500;
  color: #6b7280;
  margin-left: .2em;
}
.pg-detail { margin: 0; padding-top: .8em; border-top: 1px dashed #e5e7eb; }
.pg-row {
  display: flex;
  gap: .6em;
  padding: .3em 0;
  font-size: .8rem;
}
.pg-row dt { flex: 0 0 3.6em; color: #8a9199; font-weight: 700; }
.pg-row dd { margin: 0; color: #4a5158; line-height: 1.6; }

.pg-btn {
  display: inline-block;
  margin: 1.4em 0 .8em;
  padding: .75em 2.2em;
  background: var(--pg-accent);
  color: #fff;
  font-size: .9rem;
  font-weight: 700;
  text-decoration: none;
  border-radius: 999px;
  letter-spacing: .04em;
  transition: opacity .2s ease;
}
.pg-btn:hover { opacity: .85; }

.pg-note {
  margin: 0;
  font-size: .78rem;
  line-height: 1.8;
  color: #6b7280;
}

@media (max-width: 520px) {
  .pg-cards { grid-template-columns: 1fr; }
}

今月の休診カレンダー

当月の休診日・祝日をひと目で確認できる7列カレンダーです。凡例つきで色分け表示します。

コード・使い方を見る
<div class="hc-wrap">
  <h3 class="hc-title">2026年7月 休診カレンダー</h3>
  <div class="hc-grid">
    <span class="hc-dow">日</span><span class="hc-dow">月</span><span class="hc-dow">火</span><span class="hc-dow">水</span><span class="hc-dow">木</span><span class="hc-dow">金</span><span class="hc-dow">土</span>

    <span class="hc-day hc-blank"></span>
    <span class="hc-day">1</span>
    <span class="hc-day">2</span>
    <span class="hc-day hc-off">3</span>
    <span class="hc-day">4</span>
    <span class="hc-day">5</span>
    <span class="hc-day">6</span>

    <span class="hc-day">7</span>
    <span class="hc-day">8</span>
    <span class="hc-day">9</span>
    <span class="hc-day hc-off">10</span>
    <span class="hc-day">11</span>
    <span class="hc-day">12</span>
    <span class="hc-day">13</span>

    <span class="hc-day">14</span>
    <span class="hc-day">15</span>
    <span class="hc-day">16</span>
    <span class="hc-day hc-off">17</span>
    <span class="hc-day">18</span>
    <span class="hc-day hc-holiday">19</span>
    <span class="hc-day">20</span>

    <span class="hc-day">21</span>
    <span class="hc-day">22</span>
    <span class="hc-day">23</span>
    <span class="hc-day hc-off">24</span>
    <span class="hc-day">25</span>
    <span class="hc-day">26</span>
    <span class="hc-day">27</span>

    <span class="hc-day">28</span>
    <span class="hc-day">29</span>
    <span class="hc-day">30</span>
    <span class="hc-day hc-off">31</span>
  </div>
  <ul class="hc-legend">
    <li><span class="hc-dot hc-dot-off" aria-hidden="true"></span>休診日(水曜)</li>
    <li><span class="hc-dot hc-dot-holiday" aria-hidden="true"></span>祝日</li>
  </ul>
  <p class="hc-note">日曜・祝日・水曜は休診です。年末年始・お盆等の臨時休診は別途お知らせいたします。</p>
</div>
.hc-wrap {
  --hc-accent: #2f8f9d;    /* 見出し・凡例の色(医院のテーマ色に変更してください) */
  --hc-off-bg: #fdeaea;    /* 休診日の背景色 */
  --hc-off-fg: #c0392b;    /* 休診日の文字色 */
  --hc-holiday-bg: #fdf3d8; /* 祝日の背景色 */
  --hc-holiday-fg: #b98b3e; /* 祝日の文字色 */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 480px;
  margin: 0 auto;
  background: #fff;
  border: 1px solid #eef0f2;
  border-radius: 14px;
  padding: 1.6em 1.5em;
  box-shadow: 0 2px 12px rgba(0,0,0,.05);
  box-sizing: border-box;
}
.hc-wrap * { box-sizing: border-box; }
.hc-title {
  margin: 0 0 1em;
  text-align: center;
  font-size: 1.05rem;
  font-weight: 700;
  color: var(--hc-accent);
  letter-spacing: .06em;
}
.hc-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
}
.hc-dow {
  text-align: center;
  font-size: .74rem;
  font-weight: 700;
  color: #8a9199;
  padding-bottom: .4em;
}
.hc-day {
  display: flex;
  align-items: center;
  justify-content: center;
  aspect-ratio: 1 / 1;
  border-radius: 8px;
  background: #f7f8f9;
  font-size: .82rem;
  color: #2d3339;
}
.hc-blank { background: transparent; }
.hc-off { background: var(--hc-off-bg); color: var(--hc-off-fg); font-weight: 700; }
.hc-holiday { background: var(--hc-holiday-bg); color: var(--hc-holiday-fg); font-weight: 700; }

.hc-legend {
  display: flex;
  gap: 1.4em;
  justify-content: center;
  margin: 1.1em 0 0;
  padding: 0;
  list-style: none;
  font-size: .76rem;
  color: #4a5158;
}
.hc-legend li { display: flex; align-items: center; gap: .4em; }
.hc-dot { width: .8em; height: .8em; border-radius: 3px; }
.hc-dot-off { background: var(--hc-off-bg); border: 1px solid var(--hc-off-fg); }
.hc-dot-holiday { background: var(--hc-holiday-bg); border: 1px solid var(--hc-holiday-fg); }

.hc-note {
  margin: 1em 0 0;
  padding-top: .9em;
  border-top: 1px dashed #e5e7eb;
  font-size: .76rem;
  line-height: 1.8;
  color: #6b7280;
  text-align: center;
}

@media (max-width: 400px) {
  .hc-wrap { padding: 1.2em 1em; }
  .hc-day { font-size: .74rem; }
  .hc-legend { gap: .9em; font-size: .7rem; }
}

お知らせティッカー(横流れ)

複数のお知らせを横に流してループ表示するティッカーです。ホバーで一時停止し、動きを抑える設定の方には縦リストで表示します。

コード・使い方を見る
<div class="nt-wrap">
  <span class="nt-badge">お知らせ</span>
  <div class="nt-viewport">
    <ul class="nt-track">
      <li class="nt-item">8月13日〜15日は休診いたします。</li>
      <li class="nt-item">インフルエンザ予防接種の予約を開始しました。</li>
      <li class="nt-item">WEB予約システムをリニューアルいたしました。</li>
      <li class="nt-item">駐車場は建物裏手に6台分ご用意しております。</li>
    </ul>
  </div>
</div>
.nt-wrap {
  --nt-accent: #2f8f9d;   /* バッジ・文字の色(医院のテーマ色に変更してください) */
  --nt-speed: 18s;        /* 1周にかかる時間(数値を大きくするほどゆっくり流れます) */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 640px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  gap: .9em;
  background: #fff;
  border: 1px solid #eef0f2;
  border-radius: 999px;
  padding: .5em .5em .5em 1.1em;
  box-shadow: 0 2px 10px rgba(0,0,0,.05);
  box-sizing: border-box;
}
.nt-wrap * { box-sizing: border-box; }
.nt-badge {
  flex: 0 0 auto;
  background: var(--nt-accent);
  color: #fff;
  font-size: .78rem;
  font-weight: 700;
  letter-spacing: .04em;
  padding: .4em 1em;
  border-radius: 999px;
}
.nt-viewport {
  flex: 1 1 auto;
  overflow: hidden;
  position: relative;
  height: 1.6em;
}
.nt-track {
  margin: 0;
  padding: 0;
  list-style: none;
  display: flex;
  align-items: center;
  white-space: nowrap;
  position: absolute;
  left: 0;
  top: 0;
  animation: nt-scroll var(--nt-speed) linear infinite;
}
.nt-wrap.is-paused .nt-track { animation-play-state: paused; }
.nt-item {
  padding: 0 2.5em 0 0;
  font-size: .86rem;
  color: #2d3339;
  line-height: 1.6em;
}

@keyframes nt-scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

@media (max-width: 480px) {
  .nt-wrap { padding: .45em .45em .45em .9em; gap: .6em; border-radius: 14px; }
  .nt-badge { font-size: .72rem; padding: .35em .8em; }
  .nt-item { font-size: .8rem; }
}

/* 動きを控えるモード:横スクロールをやめて縦リスト表示に切り替え */
@media (prefers-reduced-motion: reduce) {
  .nt-wrap { align-items: flex-start; border-radius: 14px; padding: .9em 1em; }
  .nt-viewport { height: auto; overflow: visible; }
  .nt-track {
    position: static;
    display: block;
    white-space: normal;
    animation: none !important;
    transform: none !important;
  }
  .nt-item {
    display: block;
    padding: .35em 0;
    line-height: 1.7;
  }
  .nt-item:not(:last-child) { border-bottom: 1px dashed #e5e7eb; }
}
(function () {
  var reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;

  function NewsTicker(root) {
    this.root = root;
    this.viewport = root.querySelector('.nt-viewport');
    this.track = root.querySelector('.nt-track');

    if (!this.viewport || !this.track) return;

    if (!reduceMotion) {
      this.duplicateItems();
    }
    this.bindEvents();
  }

  // シームレスにループさせるため、items一式をもう1セット複製してtrackに追加する
  NewsTicker.prototype.duplicateItems = function () {
    var items = Array.prototype.slice.call(this.track.children);
    if (items.length === 0) return;
    items.forEach(function (item) {
      var clone = item.cloneNode(true);
      clone.setAttribute('aria-hidden', 'true');
      this.track.appendChild(clone);
    }, this);
  };

  NewsTicker.prototype.bindEvents = function () {
    var self = this;
    this.root.addEventListener('mouseenter', function () {
      self.root.classList.add('is-paused');
    });
    this.root.addEventListener('mouseleave', function () {
      self.root.classList.remove('is-paused');
    });
    this.root.addEventListener('focusin', function () {
      self.root.classList.add('is-paused');
    });
    this.root.addEventListener('focusout', function () {
      self.root.classList.remove('is-paused');
    });
  };

  document.querySelectorAll('.nt-wrap').forEach(function (root) {
    new NewsTicker(root);
  });
})();

健康診断コース比較表

基本・充実・人間ドックの3コースを検査項目の○×と料金で比較できる表です。横スクロールでスマホでも見やすく表示します。

コード・使い方を見る
<div class="cm-wrap">
  <h3 class="cm-title">健康診断コースのご案内</h3>
  <div class="cm-scroll">
    <table class="cm-table">
      <caption class="cm-caption">検査項目・料金の比較</caption>
      <thead>
        <tr>
          <th class="cm-col-label"><span class="cm-sr">検査項目</span></th>
          <th>基本コース</th>
          <th class="cm-col-featured">充実コース</th>
          <th>人間ドック</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>身体測定・血圧</th>
          <td class="cm-yes">○</td>
          <td class="cm-yes cm-col-featured">○</td>
          <td class="cm-yes">○</td>
        </tr>
        <tr>
          <th>血液検査(基本項目)</th>
          <td class="cm-yes">○</td>
          <td class="cm-yes cm-col-featured">○</td>
          <td class="cm-yes">○</td>
        </tr>
        <tr>
          <th>尿検査</th>
          <td class="cm-yes">○</td>
          <td class="cm-yes cm-col-featured">○</td>
          <td class="cm-yes">○</td>
        </tr>
        <tr>
          <th>胸部レントゲン</th>
          <td class="cm-no">×</td>
          <td class="cm-yes cm-col-featured">○</td>
          <td class="cm-yes">○</td>
        </tr>
        <tr>
          <th>心電図</th>
          <td class="cm-no">×</td>
          <td class="cm-yes cm-col-featured">○</td>
          <td class="cm-yes">○</td>
        </tr>
        <tr>
          <th>腹部エコー</th>
          <td class="cm-no">×</td>
          <td class="cm-no cm-col-featured">×</td>
          <td class="cm-yes">○</td>
        </tr>
        <tr>
          <th>胃カメラ</th>
          <td class="cm-no">×</td>
          <td class="cm-no cm-col-featured">×</td>
          <td class="cm-yes">○</td>
        </tr>
        <tr class="cm-price-row">
          <th>料金(税込)</th>
          <td>8,800円</td>
          <td class="cm-col-featured">16,500円</td>
          <td>33,000円</td>
        </tr>
      </tbody>
    </table>
  </div>
  <p class="cm-note">※ 料金は目安です。オプション検査(腫瘍マーカー等)も承っております。詳しくは受付までお問い合わせください。</p>
</div>
.cm-wrap {
  --cm-accent: #2f8f9d;      /* ヘッダー・強調色(医院のテーマ色に変更してください) */
  --cm-featured-bg: #eaf6f7; /* 「充実コース」列の背景色 */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 720px;
  margin: 0 auto;
  box-sizing: border-box;
}
.cm-wrap * { box-sizing: border-box; }
.cm-title {
  margin: 0 0 1em;
  text-align: center;
  font-size: 1.2rem;
  font-weight: 700;
  color: #2d3339;
  letter-spacing: .06em;
}
.cm-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.cm-table {
  width: 100%;
  min-width: 480px;
  border-collapse: collapse;
  background: #fff;
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 2px 12px rgba(0,0,0,.06);
}
.cm-caption { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }
.cm-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }
.cm-table th, .cm-table td {
  border: 1px solid #eef0f2;
  padding: .7em .6em;
  text-align: center;
  font-size: .85rem;
}
.cm-table thead th {
  background: var(--cm-accent);
  color: #fff;
  font-weight: 700;
  white-space: nowrap;
}
.cm-table tbody th {
  background: #fafbfb;
  text-align: left;
  font-weight: 600;
  color: #2d3339;
  white-space: nowrap;
}
.cm-col-featured { background: var(--cm-featured-bg); }
.cm-table thead th.cm-col-featured { background: var(--cm-accent); position: relative; }
.cm-table thead th.cm-col-featured::after {
  content: "人気";
  position: absolute;
  top: -.6em;
  right: .3em;
  background: #b98b3e;
  color: #fff;
  font-size: .62rem;
  font-weight: 700;
  padding: .15em .5em;
  border-radius: 999px;
}
.cm-yes { color: var(--cm-accent); font-weight: 700; }
.cm-no { color: #c3c8cd; }
.cm-price-row th, .cm-price-row td {
  font-weight: 700;
  color: #2d3339;
  background: #fafbfb;
}
.cm-price-row td.cm-col-featured { background: var(--cm-featured-bg); color: var(--cm-accent); }

.cm-note {
  margin: 1em 0 0;
  font-size: .78rem;
  line-height: 1.8;
  color: #6b7280;
  text-align: center;
}

@media (max-width: 480px) {
  .cm-table th, .cm-table td { padding: .55em .4em; font-size: .76rem; }
}

WEB予約の使い方(4ステップ)

初めての方でも迷わないWEB予約の操作手順を、画面イメージ付きの4ステップで案内するカードです。

コード・使い方を見る
<div class="ob-wrap">
  <p class="ob-heading">WEB予約のご利用方法</p>
  <ol class="ob-steps">
    <li class="ob-step">
      <span class="ob-num">1</span>
      <img class="ob-shot" src="https://placehold.co/240x150?text=STEP1" alt="予約サイトのトップ画面">
      <p class="ob-label">「WEB予約」を選択</p>
      <p class="ob-desc">みなと総合クリニックのサイトから予約ボタンを押します。</p>
    </li>
    <li class="ob-step">
      <span class="ob-num">2</span>
      <img class="ob-shot" src="https://placehold.co/240x150?text=STEP2" alt="診療科選択画面">
      <p class="ob-label">診療科を選ぶ</p>
      <p class="ob-desc">受診したい診療科と担当医をお選びください。</p>
    </li>
    <li class="ob-step">
      <span class="ob-num">3</span>
      <img class="ob-shot" src="https://placehold.co/240x150?text=STEP3" alt="日時選択画面">
      <p class="ob-label">希望日時を選ぶ</p>
      <p class="ob-desc">カレンダーから空いている日時を選択します。</p>
    </li>
    <li class="ob-step">
      <span class="ob-num">4</span>
      <img class="ob-shot" src="https://placehold.co/240x150?text=STEP4" alt="予約完了画面">
      <p class="ob-label">予約完了</p>
      <p class="ob-desc">確認メールが届いたら予約は完了です。</p>
    </li>
  </ol>
</div>
.ob-wrap {
  --ob-accent: #2f8f9d;   /* 番号バッジ・見出しの色(医院のテーマ色に変更してください) */
  --ob-card-bg: #f8fafb;  /* カードの背景色 */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 960px;
  margin: 0 auto;
  box-sizing: border-box;
}
.ob-wrap * { box-sizing: border-box; }
.ob-heading {
  margin: 0 0 1.2em;
  text-align: center;
  font-size: 1.2rem;
  font-weight: 700;
  color: #2d3339;
  letter-spacing: .06em;
}
.ob-steps {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1em;
}
.ob-step {
  position: relative;
  background: var(--ob-card-bg);
  border-radius: 12px;
  padding: 1.6em 1em 1.2em;
  text-align: center;
}
.ob-num {
  position: absolute;
  top: -14px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--ob-accent);
  color: #fff;
  font-size: .95rem;
  font-weight: 700;
  box-shadow: 0 2px 6px rgba(0,0,0,.12);
}
.ob-shot {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 8px;
  margin: .6em 0 .9em;
  border: 1px solid #e5e7eb;
}
.ob-label {
  margin: 0 0 .35em;
  font-size: .95rem;
  font-weight: 700;
  color: var(--ob-accent);
}
.ob-desc {
  margin: 0;
  font-size: .8rem;
  line-height: 1.7;
  color: #6b7280;
}

@media (max-width: 720px) {
  .ob-steps { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 375px) {
  .ob-steps { grid-template-columns: 1fr; gap: .9em; }
  .ob-heading { font-size: 1.05rem; }
}

急患・夜間休日案内ブロック

夜間・休日の急な体調不良に備え、緊急連絡先と注意事項を落ち着いた配色で伝える案内ブロックです。

コード・使い方を見る
<div class="em-wrap">
  <p class="em-title"><span class="em-icon" aria-hidden="true">+</span>急患・夜間休日の対応について</p>
  <div class="em-body">
    <a class="em-tel" href="tel:0300000000">
      <span class="em-tel-label">緊急連絡先</span>
      <span class="em-tel-num">03-0000-0000</span>
    </a>
    <dl class="em-list">
      <div class="em-row">
        <dt>対応時間</dt>
        <dd>夜間・休日を含め 24時間受付</dd>
      </div>
      <div class="em-row">
        <dt>対象</dt>
        <dd>当院にかかりつけの方の急な発熱・痛み等</dd>
      </div>
      <div class="em-row">
        <dt>ご注意</dt>
        <dd>意識障害・強い胸痛など生命に関わる症状は、まず119番へご連絡ください。</dd>
      </div>
    </dl>
  </div>
</div>
.em-wrap {
  --em-accent: #a13b3b;   /* 見出し・電話番号の色(落ち着いた赤系。テーマに合わせて変更してください) */
  --em-bg: #fbf2f2;       /* ブロック全体の背景色 */
  --em-border: #e3c3c3;   /* 枠線の色 */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 640px;
  margin: 0 auto;
  box-sizing: border-box;
  background: var(--em-bg);
  border: 1px solid var(--em-border);
  border-radius: 12px;
  padding: 1.4em 1.6em;
}
.em-wrap * { box-sizing: border-box; }
.em-title {
  display: flex;
  align-items: center;
  gap: .5em;
  margin: 0 0 1em;
  font-size: 1.05rem;
  font-weight: 700;
  color: var(--em-accent);
}
.em-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--em-accent);
  color: #fff;
  font-size: .85rem;
  font-weight: 700;
  flex-shrink: 0;
}
.em-tel {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-decoration: none;
  background: #fff;
  border: 1px solid var(--em-border);
  border-radius: 10px;
  padding: .8em 1em;
  margin-bottom: 1.1em;
  transition: background-color .2s ease;
}
.em-tel:hover { background: #fff7f7; }
.em-tel-label {
  font-size: .78rem;
  color: #8a6a6a;
  letter-spacing: .08em;
}
.em-tel-num {
  font-size: 1.6rem;
  font-weight: 700;
  color: var(--em-accent);
  letter-spacing: .03em;
}
.em-list {
  margin: 0;
  padding: 0;
}
.em-row {
  display: flex;
  gap: .4em;
  padding: .5em 0;
  border-top: 1px solid var(--em-border);
  font-size: .86rem;
  line-height: 1.7;
}
.em-row:first-child { border-top: none; }
.em-row dt {
  flex-shrink: 0;
  width: 5.2em;
  font-weight: 700;
  color: var(--em-accent);
}
.em-row dd {
  margin: 0;
  color: #4a4040;
}

@media (max-width: 375px) {
  .em-wrap { padding: 1.1em 1.1em; }
  .em-tel-num { font-size: 1.35rem; }
  .em-row { flex-direction: column; gap: .15em; }
  .em-row dt { width: auto; }
}

バリアフリー対応アイコン一覧

車椅子・エレベーター・多目的トイレなど、院内のバリアフリー設備をアイコンで一覧できる案内ブロックです。

コード・使い方を見る
<div class="ac-wrap">
  <p class="ac-title">バリアフリー対応について</p>
  <ul class="ac-grid">
    <li class="ac-item">
      <span class="ac-icon" aria-hidden="true">♿</span>
      <p class="ac-label">車椅子対応</p>
      <p class="ac-state ac-ok">対応可</p>
    </li>
    <li class="ac-item">
      <span class="ac-icon" aria-hidden="true">🛗</span>
      <p class="ac-label">エレベーター</p>
      <p class="ac-state ac-ok">設置あり</p>
    </li>
    <li class="ac-item">
      <span class="ac-icon" aria-hidden="true">🚻</span>
      <p class="ac-label">多目的トイレ</p>
      <p class="ac-state ac-ok">1階に設置</p>
    </li>
    <li class="ac-item">
      <span class="ac-icon" aria-hidden="true">🚼</span>
      <p class="ac-label">ベビーカー</p>
      <p class="ac-state ac-ok">そのまま入室可</p>
    </li>
    <li class="ac-item">
      <span class="ac-icon" aria-hidden="true">🧸</span>
      <p class="ac-label">お子様連れ</p>
      <p class="ac-state ac-ok">キッズスペースあり</p>
    </li>
  </ul>
  <p class="ac-note">ご不明な点やご要望がございましたら、事前にお電話でお気軽にご相談ください。</p>
</div>
.ac-wrap {
  --ac-accent: #2f8f9d;  /* 見出し・OKラベルの色(医院のテーマ色に変更してください) */
  --ac-icon-bg: #eef6f7; /* アイコン円の背景色 */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 720px;
  margin: 0 auto;
  box-sizing: border-box;
}
.ac-wrap * { box-sizing: border-box; }
.ac-title {
  margin: 0 0 1.1em;
  text-align: center;
  font-size: 1.15rem;
  font-weight: 700;
  color: #2d3339;
  letter-spacing: .05em;
}
.ac-grid {
  list-style: none;
  margin: 0 0 1em;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: .8em;
}
.ac-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  background: #fff;
  border: 1px solid #e5e7eb;
  border-radius: 12px;
  padding: 1em .5em;
}
.ac-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: var(--ac-icon-bg);
  font-size: 1.6rem;
  margin-bottom: .6em;
}
.ac-label {
  margin: 0 0 .3em;
  font-size: .82rem;
  font-weight: 700;
  color: #2d3339;
}
.ac-state {
  margin: 0;
  font-size: .74rem;
}
.ac-state.ac-ok { color: var(--ac-accent); font-weight: 700; }
.ac-note {
  margin: 0;
  text-align: center;
  font-size: .78rem;
  color: #6b7280;
  line-height: 1.7;
}

@media (max-width: 720px) {
  .ac-grid { grid-template-columns: repeat(3, 1fr); }
}

@media (max-width: 375px) {
  .ac-grid { grid-template-columns: repeat(2, 1fr); gap: .6em; }
  .ac-icon { width: 44px; height: 44px; font-size: 1.4rem; }
  .ac-title { font-size: 1rem; }
}

オンライン診療案内カード

対象者・利用の流れ・必要なものをまとめて伝え、予約ボタンにつなげるオンライン診療の案内カードです。

コード・使い方を見る
<div class="tm-card">
  <div class="tm-head">
    <span class="tm-badge">オンライン診療</span>
    <p class="tm-title">ご自宅から診療を受けられます</p>
  </div>
  <div class="tm-section">
    <p class="tm-heading">対象となる方</p>
    <p class="tm-text">再診の方・症状が安定している慢性疾患の方(初診は原則来院をお願いしています)</p>
  </div>
  <div class="tm-section">
    <p class="tm-heading">ご利用の流れ</p>
    <ol class="tm-flow">
      <li>WEBまたはお電話でオンライン診療を予約</li>
      <li>予約時間にビデオ通話アプリへ接続</li>
      <li>診察後、お薬は自宅または薬局へお届け</li>
    </ol>
  </div>
  <div class="tm-section">
    <p class="tm-heading">必要なもの</p>
    <p class="tm-text">スマートフォンまたはパソコン(カメラ・マイク付き)/健康保険証/お手持ちのお薬手帳</p>
  </div>
  <a class="tm-btn" href="#">オンライン診療を予約する</a>
</div>
.tm-card {
  --tm-accent: #2f8f9d;   /* バッジ・見出し・ボタンの色(医院のテーマ色に変更してください) */
  --tm-bg: #ffffff;       /* カード背景色 */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 480px;
  margin: 0 auto;
  box-sizing: border-box;
  background: var(--tm-bg);
  border: 1px solid #e5e7eb;
  border-radius: 14px;
  padding: 1.6em 1.6em 1.8em;
  box-shadow: 0 2px 14px rgba(0,0,0,.05);
}
.tm-card * { box-sizing: border-box; }
.tm-head { margin-bottom: 1.2em; }
.tm-badge {
  display: inline-block;
  background: var(--tm-accent);
  color: #fff;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .08em;
  padding: .3em .8em;
  border-radius: 999px;
  margin-bottom: .6em;
}
.tm-title {
  margin: 0;
  font-size: 1.1rem;
  font-weight: 700;
  color: #2d3339;
  line-height: 1.5;
}
.tm-section { margin-bottom: 1.1em; }
.tm-heading {
  margin: 0 0 .35em;
  font-size: .82rem;
  font-weight: 700;
  color: var(--tm-accent);
}
.tm-text {
  margin: 0;
  font-size: .85rem;
  line-height: 1.75;
  color: #4b5563;
}
.tm-flow {
  margin: 0;
  padding-left: 1.2em;
  font-size: .85rem;
  line-height: 1.9;
  color: #4b5563;
}
.tm-flow li::marker {
  color: var(--tm-accent);
  font-weight: 700;
}
.tm-btn {
  display: block;
  text-align: center;
  text-decoration: none;
  background: var(--tm-accent);
  color: #fff;
  font-size: .92rem;
  font-weight: 700;
  padding: .85em 1em;
  border-radius: 999px;
  margin-top: 1.4em;
  transition: opacity .2s ease;
}
.tm-btn:hover { opacity: .85; }

@media (max-width: 375px) {
  .tm-card { padding: 1.3em 1.2em 1.5em; }
  .tm-title { font-size: 1rem; }
}

予防接種スケジュール表

ワクチンの種類と推奨時期・接種回数を一覧できるスケジュール表です。スマホでは横スクロールで表示されます。

コード・使い方を見る
<div class="vs-wrap">
  <p class="vs-title">予防接種スケジュールの目安</p>
  <div class="vs-table-scroll">
    <table class="vs-table">
      <thead>
        <tr>
          <th>ワクチン</th>
          <th>推奨時期</th>
          <th>接種回数</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td class="vs-name">インフルエンザ</td>
          <td>10月〜12月</td>
          <td>年1回</td>
        </tr>
        <tr>
          <td class="vs-name">肺炎球菌(成人)</td>
          <td>65歳の誕生月前後</td>
          <td>1回</td>
        </tr>
        <tr>
          <td class="vs-name">麻しん風しん(MR)</td>
          <td>1歳・年長児</td>
          <td>2回</td>
        </tr>
        <tr>
          <td class="vs-name">B型肝炎</td>
          <td>生後2・3・7〜8か月</td>
          <td>3回</td>
        </tr>
        <tr>
          <td class="vs-name">子宮頸がん(HPV)</td>
          <td>小学6年〜高校1年相当</td>
          <td>2〜3回</td>
        </tr>
      </tbody>
    </table>
  </div>
  <p class="vs-note">※ 時期・回数は目安です。詳しくは診察時に医師へご相談ください。</p>
</div>
.vs-wrap {
  --vs-accent: #2f8f9d;    /* 見出し行・見出し文字の色(医院のテーマ色に変更してください) */
  --vs-stripe: #f6fafb;    /* 偶数行のストライプ色 */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 640px;
  margin: 0 auto;
  box-sizing: border-box;
}
.vs-wrap * { box-sizing: border-box; }
.vs-title {
  margin: 0 0 1em;
  text-align: center;
  font-size: 1.1rem;
  font-weight: 700;
  color: #2d3339;
  letter-spacing: .05em;
}
.vs-table-scroll {
  overflow-x: auto;
  border-radius: 10px;
  box-shadow: 0 2px 10px rgba(0,0,0,.05);
}
.vs-table {
  width: 100%;
  border-collapse: collapse;
  background: #fff;
  min-width: 420px;
}
.vs-table th,
.vs-table td {
  padding: .7em .8em;
  font-size: .86rem;
  text-align: left;
  border-bottom: 1px solid #eef0f2;
}
.vs-table thead th {
  background: var(--vs-accent);
  color: #fff;
  font-weight: 700;
  white-space: nowrap;
}
.vs-table tbody tr:nth-child(even) { background: var(--vs-stripe); }
.vs-table tbody tr:last-child td { border-bottom: none; }
.vs-name {
  font-weight: 700;
  color: var(--vs-accent);
  white-space: nowrap;
}
.vs-note {
  margin: .8em 0 0;
  font-size: .76rem;
  color: #6b7280;
  text-align: center;
}

@media (max-width: 375px) {
  .vs-table th, .vs-table td { padding: .55em .6em; font-size: .78rem; }
  .vs-title { font-size: 1rem; }
}

待ち時間・混雑状況カード

現在の待ち時間の目安と受付人数、混雑度を一目で伝える静的サンプルの案内カードです。

コード・使い方を見る
<div class="wt-card">
  <p class="wt-title">現在の混雑状況</p>
  <div class="wt-main">
    <div class="wt-metric">
      <span class="wt-value">約20分</span>
      <span class="wt-label">お待ち時間の目安</span>
    </div>
    <div class="wt-divider" aria-hidden="true"></div>
    <div class="wt-metric">
      <span class="wt-value">8<span class="wt-unit">人</span></span>
      <span class="wt-label">受付済み人数</span>
    </div>
  </div>
  <div class="wt-gauge" role="img" aria-label="混雑度:やや混み合っています">
    <span class="wt-gauge-fill" style="width: 60%;"></span>
  </div>
  <p class="wt-status">やや混み合っています</p>
  <p class="wt-updated">最終更新:14:20 時点(自動更新ではありません)</p>
</div>
.wt-card {
  --wt-accent: #2f8f9d;   /* 数値・見出しの色(医院のテーマ色に変更してください) */
  --wt-gauge-bg: #eef0f2; /* 混雑ゲージの背景色 */
  --wt-gauge-fill: #e0a447; /* 混雑ゲージの塗りの色(黄〜橙が視認しやすい) */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 400px;
  margin: 0 auto;
  box-sizing: border-box;
  background: #fff;
  border: 1px solid #e5e7eb;
  border-radius: 14px;
  padding: 1.5em 1.6em 1.4em;
  text-align: center;
  box-shadow: 0 2px 12px rgba(0,0,0,.05);
}
.wt-card * { box-sizing: border-box; }
.wt-title {
  margin: 0 0 1em;
  font-size: .95rem;
  font-weight: 700;
  color: #2d3339;
  letter-spacing: .06em;
}
.wt-main {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1.2em;
  margin-bottom: 1.1em;
}
.wt-metric {
  display: flex;
  flex-direction: column;
  align-items: center;
}
.wt-value {
  font-size: 1.7rem;
  font-weight: 700;
  color: var(--wt-accent);
  line-height: 1.2;
}
.wt-unit { font-size: 1rem; margin-left: .1em; }
.wt-label {
  font-size: .72rem;
  color: #6b7280;
  margin-top: .3em;
}
.wt-divider {
  width: 1px;
  height: 40px;
  background: #e5e7eb;
}
.wt-gauge {
  width: 100%;
  height: 10px;
  border-radius: 999px;
  background: var(--wt-gauge-bg);
  overflow: hidden;
  margin-bottom: .6em;
}
.wt-gauge-fill {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--wt-gauge-fill);
}
.wt-status {
  margin: 0 0 .3em;
  font-size: .85rem;
  font-weight: 700;
  color: #4b5563;
}
.wt-updated {
  margin: 0;
  font-size: .7rem;
  color: #9aa1a9;
}

@media (max-width: 375px) {
  .wt-card { padding: 1.2em 1.1em 1.2em; }
  .wt-value { font-size: 1.4rem; }
  .wt-main { gap: .8em; }
}

診療科ごとの診療時間タブ

内科・小児科・皮膚科など、診療科を切り替えて診療時間を確認できるタブ形式の案内です。

コード・使い方を見る
<div class="dh-wrap">
  <div class="dh-tablist" role="tablist" aria-label="診療科ごとの診療時間">
    <button class="dh-tab" type="button" role="tab" aria-selected="true">内科</button>
    <button class="dh-tab" type="button" role="tab" aria-selected="false" tabindex="-1">小児科</button>
    <button class="dh-tab" type="button" role="tab" aria-selected="false" tabindex="-1">皮膚科</button>
  </div>

  <div class="dh-panel" role="tabpanel">
    <table class="dh-table">
      <thead>
        <tr><th>時間帯</th><th>月〜金</th><th>土</th><th>日祝</th></tr>
      </thead>
      <tbody>
        <tr><th>9:00〜12:30</th><td>●</td><td>●</td><td class="dh-off">-</td></tr>
        <tr><th>14:30〜18:00</th><td>●</td><td class="dh-off">-</td><td class="dh-off">-</td></tr>
      </tbody>
    </table>
    <p class="dh-note">担当医:みなと 太郎</p>
  </div>

  <div class="dh-panel" role="tabpanel" hidden>
    <table class="dh-table">
      <thead>
        <tr><th>時間帯</th><th>月〜金</th><th>土</th><th>日祝</th></tr>
      </thead>
      <tbody>
        <tr><th>9:30〜12:00</th><td>●</td><td>●</td><td class="dh-off">-</td></tr>
        <tr><th>15:00〜17:30</th><td>●</td><td class="dh-off">-</td><td class="dh-off">-</td></tr>
      </tbody>
    </table>
    <p class="dh-note">担当医:みなと 花子</p>
  </div>

  <div class="dh-panel" role="tabpanel" hidden>
    <table class="dh-table">
      <thead>
        <tr><th>時間帯</th><th>月〜金</th><th>土</th><th>日祝</th></tr>
      </thead>
      <tbody>
        <tr><th>10:00〜13:00</th><td>●</td><td class="dh-off">-</td><td class="dh-off">-</td></tr>
        <tr><th>15:00〜18:30</th><td>●</td><td>▲</td><td class="dh-off">-</td></tr>
      </tbody>
    </table>
    <p class="dh-note">▲ 土曜は 15:00〜17:00 のみ/担当医:港見 誠</p>
  </div>
</div>
.dh-wrap {
  --dh-accent: #2f8f9d;  /* タブ選択中の色(医院のテーマ色に変更してください) */
  --dh-off-bg: #f3f4f6;  /* 休診マスの背景色 */
  font-family: "Noto Sans JP", "Hiragino Kaku Gothic ProN", sans-serif;
  max-width: 560px;
  margin: 0 auto;
  box-sizing: border-box;
}
.dh-wrap * { box-sizing: border-box; }
.dh-tablist {
  display: flex;
  gap: .4em;
  margin-bottom: 0;
  border-bottom: 2px solid #e5e7eb;
}
.dh-tab {
  flex: 1;
  appearance: none;
  border: none;
  background: transparent;
  font: inherit;
  font-size: .88rem;
  font-weight: 700;
  color: #8a919a;
  padding: .75em .5em;
  cursor: pointer;
  position: relative;
  border-radius: 8px 8px 0 0;
  transition: color .2s ease, background-color .2s ease;
}
.dh-tab:hover { background: #f8fafb; }
.dh-tab:focus-visible {
  outline: 2px solid var(--dh-accent);
  outline-offset: -2px;
}
.dh-tab[aria-selected="true"] {
  color: var(--dh-accent);
}
.dh-tab[aria-selected="true"]::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -2px;
  height: 2px;
  background: var(--dh-accent);
}
.dh-panel {
  background: #fff;
  padding: 1.1em 0 0;
}
.dh-table {
  width: 100%;
  border-collapse: collapse;
}
.dh-table th, .dh-table td {
  border: 1px solid #e5e7eb;
  padding: .6em .4em;
  text-align: center;
  font-size: .88rem;
}
.dh-table thead th {
  background: #fafafa;
  color: #2d3339;
  font-weight: 700;
}
.dh-table tbody th {
  background: #fafafa;
  font-weight: 600;
  white-space: nowrap;
}
.dh-table td { color: var(--dh-accent); font-weight: 700; }
.dh-table td.dh-off { background: var(--dh-off-bg); color: #b0b6bd; font-weight: 400; }
.dh-note {
  margin: .7em 0 0;
  font-size: .78rem;
  color: #6b7280;
  text-align: center;
}

@media (max-width: 375px) {
  .dh-tab { font-size: .8rem; padding: .65em .3em; }
  .dh-table th, .dh-table td { padding: .5em .25em; font-size: .78rem; }
}
(function () {
  function DeptHoursTabs(root) {
    this.root = root;
    this.tabs = Array.prototype.slice.call(root.querySelectorAll('.dh-tab'));
    this.panels = Array.prototype.slice.call(root.querySelectorAll('.dh-panel'));

    if (this.tabs.length === 0 || this.tabs.length !== this.panels.length) return;

    this.bindEvents();
  }

  DeptHoursTabs.prototype.select = function (index, focusTab) {
    var count = this.tabs.length;
    var next = (index + count) % count;

    this.tabs.forEach(function (tab, i) {
      var active = i === next;
      tab.setAttribute('aria-selected', String(active));
      tab.tabIndex = active ? 0 : -1;
    });
    this.panels.forEach(function (panel, i) {
      if (i === next) {
        panel.removeAttribute('hidden');
      } else {
        panel.setAttribute('hidden', '');
      }
    });

    if (focusTab) this.tabs[next].focus();
  };

  DeptHoursTabs.prototype.bindEvents = function () {
    var self = this;

    this.tabs.forEach(function (tab, i) {
      tab.addEventListener('click', function () {
        self.select(i, false);
      });

      tab.addEventListener('keydown', function (e) {
        var currentIndex = self.tabs.indexOf(tab);
        if (e.key === 'ArrowRight') {
          e.preventDefault();
          self.select(currentIndex + 1, true);
        } else if (e.key === 'ArrowLeft') {
          e.preventDefault();
          self.select(currentIndex - 1, true);
        } else if (e.key === 'Home') {
          e.preventDefault();
          self.select(0, true);
        } else if (e.key === 'End') {
          e.preventDefault();
          self.select(self.tabs.length - 1, true);
        }
      });
    });
  };

  document.querySelectorAll('.dh-wrap').forEach(function (root) {
    new DeptHoursTabs(root);
  });
})();