@charset "UTF-8";

/* ============================================================
   兼子歯科医院 — styles.css
   方針: Accessible & Ethical + Minimalism（WCAG AAA を基準）
   コントラスト比は白背景に対する実測値をコメントに記載
   ============================================================ */

:root{
  /* --- 背景 --- */
  --white:#FFFFFF;
  --usumizu:#F4F9FC;            /* セクションを交互に敷く淡い水色 */

  /* --- 文字（すべて白背景で AAA = 7:1 以上） --- */
  --sumi:#14303D;               /* 本文     13.8:1  AAA */
  --sumi-70:#4A5964;            /* 補助文    7.2:1  AAA */
  --sumi-45:#7C8A94;            /* 註釈のみ。本文には使わない */

  /* --- 青 --- */
  --ai:#005B8C;                 /* 主色。見出し・ボタン地・リンク  7.3:1 AAA
                                   白抜き文字を載せても 7.3:1 で AAA */
  --ai-dark:#00486F;            /* hover / active */
  --ai-mid:#0077B6;             /* 医療ブルー。アイコン・強調 */

  /* --- 装飾専用（文字色には絶対に使わない） --- */
  --mizu:#7FB3C8;
  --mizu-pale:#D6EAF3;
  --line:#E3EAEF;

  /* --- ステータス --- */
  --midori:#05734F;             /* 診療日  6.9:1（太字・アイコン併用で担保） */
  --midori-pale:#E6F4EF;

  /* --- タイポグラフィ --- */
  --jp:"Noto Sans JP","Hiragino Kaku Gothic ProN","Yu Gothic",sans-serif;
  --latin:"Figtree",system-ui,-apple-system,sans-serif;

  /* --- レイアウト --- */
  --wrap:1120px;
  --gutter:clamp(1.25rem,5vw,3rem);
  --header-h:68px;

  /* --- Accessible & Ethical の要求値 --- */
  --focus-ring:3px;
  --tap:44px;

  --radius:14px;
  --shadow-s:0 1px 2px rgba(20,48,61,.06);
  --shadow-m:0 4px 16px rgba(20,48,61,.07);
}

/* ------------------------------------------------------------
   Reset
   ------------------------------------------------------------ */
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth; scroll-padding-top:calc(var(--header-h) + 16px)}
body{
  margin:0;
  background:var(--white);
  color:var(--sumi);
  font-family:var(--jp);
  font-size:1rem;              /* 16px 以上（iOS の自動ズーム回避） */
  line-height:1.8;
  font-feature-settings:"palt";
  -webkit-font-smoothing:antialiased;
}
img,svg{display:block;max-width:100%;height:auto}
h1,h2,h3,p,ul,ol,dl,dd,figure{margin:0}
ul,ol{padding:0;list-style:none}
a{color:inherit}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
table{border-collapse:collapse;width:100%}

/* 数字・英字は Figtree ＋ 等幅数字。電話番号と時刻がガタつかない */
.num{
  font-family:var(--latin);
  font-variant-numeric:tabular-nums;
  font-weight:600;
  letter-spacing:.01em;
}

/* ------------------------------------------------------------
   a11y ユーティリティ
   ------------------------------------------------------------ */
:focus-visible{
  outline:var(--focus-ring) solid var(--ai);
  outline-offset:3px;
  border-radius:4px;
}

.visually-hidden{
  position:absolute;width:1px;height:1px;
  padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;
}

.skip-link{
  position:absolute;left:50%;top:0;
  transform:translate(-50%,-120%);
  z-index:1000;
  padding:.75rem 1.25rem;
  background:var(--ai);color:#fff;
  font-weight:700;text-decoration:none;
  border-radius:0 0 8px 8px;
  transition:transform .18s ease-out;
}
.skip-link:focus-visible{transform:translate(-50%,0)}

.wrap{
  width:min(100% - var(--gutter) * 2, var(--wrap));
  margin-inline:auto;
}

/* ------------------------------------------------------------
   ボタン
   ------------------------------------------------------------ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.55em;
  min-height:var(--tap);
  padding:.7rem 1.4rem;
  border-radius:999px;
  font-weight:700;
  text-decoration:none;
  line-height:1.4;
  border:2px solid transparent;
  transition:background-color .2s ease-out, border-color .2s ease-out, color .2s ease-out;
}
.btn svg{width:1.15em;height:1.15em;flex:none}
.btn__ext{width:1em;height:1em;opacity:.75}

.btn--primary{background:var(--ai);color:#fff}          /* 白抜き 7.3:1 AAA */
.btn--outline{background:transparent;color:var(--ai);border-color:var(--mizu)}

.btn--lg{padding:.95rem 1.9rem;font-size:1.0625rem}

@media (hover:hover){
  .btn--primary:hover{background:var(--ai-dark)}
  .btn--outline:hover{background:var(--usumizu);border-color:var(--ai)}
}
.btn--primary:active{background:var(--ai-dark)}
.btn--outline:active{background:var(--usumizu)}

.btn-row{display:flex;flex-wrap:wrap;gap:.85rem;margin-top:1.75rem}

.link{
  color:var(--ai);
  text-decoration:underline;
  text-underline-offset:3px;
  text-decoration-thickness:1px;
}
@media (hover:hover){.link:hover{color:var(--ai-dark)}}

/* 単独で置かれた電話番号リンクは、文中リンクではなくタップ導線。
   44px のタッチターゲットを確保する（AAA / 高齢の患者さんが押す動線） */
.deflist dd .link,
.footer__tel .link{
  display:inline-flex;
  align-items:center;
  min-height:var(--tap);
}

/* ------------------------------------------------------------
   ヘッダー
   ------------------------------------------------------------ */
.header{
  position:sticky;top:0;z-index:100;
  background:rgba(255,255,255,.9);
  backdrop-filter:blur(8px);
  border-bottom:1px solid transparent;
  transition:border-color .2s ease-out, box-shadow .2s ease-out;
}
.header.is-solid{
  background:var(--white);
  border-bottom-color:var(--line);
  box-shadow:var(--shadow-s);
}
.header__inner{
  width:min(100% - var(--gutter) * 2, var(--wrap));
  margin-inline:auto;
  min-height:var(--header-h);
  display:flex;align-items:center;justify-content:space-between;gap:1rem;
}

.brand{
  display:inline-flex;align-items:center;gap:.6rem;
  min-height:var(--tap);
  text-decoration:none;
  color:var(--sumi);
}
.brand__mark{
  display:grid;place-items:center;
  width:36px;height:36px;flex:none;
  border-radius:10px;
  background:var(--mizu-pale);
  color:var(--ai);
}
.brand__mark svg{width:22px;height:22px}
.brand__name{font-weight:700;font-size:1.125rem;letter-spacing:.02em}

.nav{display:flex;align-items:center;gap:1.5rem}
.nav__list{display:flex;align-items:center;gap:.25rem}
.nav__list a{
  display:inline-flex;align-items:center;
  min-height:var(--tap);
  padding:0 .8rem;
  font-weight:500;
  text-decoration:none;
  border-radius:8px;
  transition:color .2s ease-out, background-color .2s ease-out;
}
@media (hover:hover){
  .nav__list a:hover{color:var(--ai);background:var(--usumizu)}
}
.nav__tel{padding:.6rem 1.15rem;font-size:.9375rem}

/* ハンバーガー */
.hamburger{
  display:none;
  width:var(--tap);height:var(--tap);
  padding:0;
  place-items:center;
  border-radius:10px;
}
.hamburger span{
  display:block;width:22px;height:2px;
  background:var(--sumi);border-radius:2px;
  transition:transform .22s ease-out, opacity .18s ease-out;
}
.hamburger span + span{margin-top:5px}
.hamburger[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.hamburger[aria-expanded="true"] span:nth-child(2){opacity:0}
.hamburger[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

/* ------------------------------------------------------------
   ヒーロー（写真なし。余白と淡い水色の図形だけで清潔感を出す）
   ------------------------------------------------------------ */
.hero{position:relative;overflow:hidden;background:var(--white)}
.hero__deco{
  position:absolute;inset:0;
  pointer-events:none;
  background:
    radial-gradient(60% 55% at 88% 8%,  var(--mizu-pale) 0%, transparent 62%),
    radial-gradient(45% 40% at 4% 92%,  var(--mizu-pale) 0%, transparent 60%);
  opacity:.85;
}
.hero__inner{
  position:relative;
  padding-block:clamp(3.5rem,9vw,6.5rem) clamp(3rem,7vw,5rem);
  /* 日本語には ch を使わない。ch は欧文「0」の幅が基準で、
     全角文字ではおよそ半分の幅にしかならず、見出しが不自然に折り返す。 */
  max-width:46rem;
}
.hero__eyebrow{
  font-size:.9375rem;font-weight:700;
  color:var(--ai);
  letter-spacing:.06em;
  margin-bottom:1rem;
}
.hero__title{
  font-size:clamp(1.9rem,1.2rem + 3.2vw,3.15rem);
  line-height:1.45;
  font-weight:700;
  letter-spacing:.01em;
  margin-bottom:1.5rem;
  word-break:auto-phrase;      /* 対応ブラウザでは文節で折り返す。非対応は通常折返しにフォールバック */
}
.hero__lead{
  color:var(--sumi-70);
  font-size:clamp(1rem,.97rem + .18vw,1.0625rem);
  max-width:30em;              /* 全角およそ30字 */
}
.hero__facts{
  display:flex;flex-wrap:wrap;gap:.5rem;
  margin-top:1.75rem;
}
.hero__facts li{
  display:inline-flex;align-items:center;
  padding:.4rem .9rem;
  background:var(--white);
  border:1px solid var(--mizu);
  border-radius:999px;
  font-size:.9375rem;font-weight:500;
}
.hero__facts strong{font-weight:700;color:var(--ai)}
.hero__note{
  margin-top:1rem;
  font-size:.875rem;
  color:var(--sumi-70);
}

/* ------------------------------------------------------------
   信頼バッジ帯
   ------------------------------------------------------------ */
.trust{
  border-block:1px solid var(--line);
  background:var(--usumizu);
  padding-block:1.75rem;
}
.trust__list{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:1rem;
}
.trust__item{
  display:flex;align-items:center;gap:.75rem;
  justify-content:center;
  text-align:left;
}
.trust__icon{
  display:grid;place-items:center;
  width:40px;height:40px;flex:none;
  border-radius:50%;
  background:var(--white);
  color:var(--ai-mid);
  border:1px solid var(--mizu);
}
.trust__icon svg{width:21px;height:21px}
.trust__text{font-weight:700;font-size:.9375rem;line-height:1.4}
.trust__sub{
  display:block;
  font-weight:400;font-size:.8125rem;
  color:var(--sumi-70);
}

/* ------------------------------------------------------------
   セクション共通
   ------------------------------------------------------------ */
.section{padding-block:clamp(3.5rem,8vw,6rem)}
.section--tint{background:var(--usumizu)}

.section__head{margin-bottom:clamp(2rem,4vw,3rem)}
.section__en{
  font-family:var(--latin);
  font-size:.8125rem;font-weight:700;
  letter-spacing:.18em;
  color:var(--ai-mid);
  margin-bottom:.5rem;
}
.section__title{
  font-size:clamp(1.5rem,1.2rem + 1.4vw,2.125rem);
  font-weight:700;
  line-height:1.4;
  letter-spacing:.02em;
}
.section__title::after{
  content:"";
  display:block;
  width:40px;height:3px;
  margin-top:.9rem;
  background:var(--mizu);
  border-radius:2px;
}
.section__lead{
  margin-top:1.1rem;
  color:var(--sumi-70);
  max-width:34em;              /* 全角およそ34字 */
  word-break:auto-phrase;
}

/* ------------------------------------------------------------
   診療案内カード
   ------------------------------------------------------------ */
.cards{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:clamp(1rem,2vw,1.5rem);
}
.card{
  padding:clamp(1.5rem,3vw,2rem);
  background:var(--white);
  border:1px solid var(--line);
  border-radius:var(--radius);
  box-shadow:var(--shadow-s);
}
.card__icon{
  display:grid;place-items:center;
  width:48px;height:48px;
  margin-bottom:1.1rem;
  border-radius:12px;
  background:var(--mizu-pale);
  color:var(--ai);
}
.card__icon svg{width:26px;height:26px}
.card__title{
  font-size:1.1875rem;font-weight:700;
  margin-bottom:.7rem;
}
.card__body{
  color:var(--sumi-70);
  font-size:.9375rem;
  line-height:1.85;
}

/* ------------------------------------------------------------
   当院について
   ------------------------------------------------------------ */
.about{
  max-width:44rem;
  padding:clamp(1.75rem,4vw,2.75rem);
  background:var(--white);
  border:1px solid var(--line);
  border-radius:var(--radius);
}
.about__text + .about__text{margin-top:1.4rem}
.about__text{
  color:var(--sumi-70);
  line-height:1.95;
}

/* ------------------------------------------------------------
   通いやすさ
   ------------------------------------------------------------ */
.feats{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:clamp(1.25rem,3vw,2.25rem);
}
.feat__title{
  display:flex;align-items:center;gap:.7rem;
  font-size:1.0625rem;font-weight:700;
  margin-bottom:.6rem;
}
.feat__icon{
  display:grid;place-items:center;
  width:36px;height:36px;flex:none;
  border-radius:9px;
  background:var(--mizu-pale);
  color:var(--ai);
}
.feat__icon svg{width:20px;height:20px}
.feat__body{
  color:var(--sumi-70);
  font-size:.9375rem;
  padding-left:calc(36px + .7rem);
}
.feat__body .num{color:var(--ai)}

/* お知らせ（2階・階段の正直な案内） */
.notice{
  display:flex;gap:.9rem;
  margin-top:clamp(2rem,4vw,3rem);
  padding:1.25rem 1.4rem;
  background:var(--usumizu);
  border:1px solid var(--mizu);
  border-left:4px solid var(--ai);
  border-radius:10px;
}
.section--tint .notice{background:var(--white)}
.notice__icon{
  flex:none;
  color:var(--ai);
  padding-top:.15rem;
}
.notice__icon svg{width:22px;height:22px}
.notice__body{
  font-size:.9375rem;
  color:var(--sumi-70);
  line-height:1.85;
}
.notice__body strong{color:var(--sumi);font-weight:700}

/* ------------------------------------------------------------
   診療時間テーブル
   ------------------------------------------------------------ */
.table-wrap{
  background:var(--white);
  border:1px solid var(--line);
  border-radius:var(--radius);
  overflow:hidden;
}
.hours{font-size:.9375rem}
.hours th,.hours td{
  padding:.95rem 1rem;
  text-align:center;
  border-bottom:1px solid var(--line);
}
.hours thead th{
  background:var(--ai);
  color:#fff;                       /* 白抜き 7.3:1 AAA */
  font-weight:700;
  border-bottom:0;
  white-space:nowrap;
}
.hours .th__time{
  display:block;
  font-size:.8125rem;font-weight:600;
  opacity:.92;
}
.hours tbody th{
  font-weight:700;
  background:var(--usumizu);
  white-space:nowrap;
  width:8.5rem;
}
.hours tbody tr:last-child th,
.hours tbody tr:last-child td{border-bottom:0}
.hours tr.is-closed td,
.hours tr.is-closed th{color:var(--sumi-45)}
.hours tr.is-closed th{background:#F0F3F5}

/* 診療/休診は色だけに頼らず、必ずテキストで示す（color-not-only） */
.mark{
  display:inline-flex;align-items:center;gap:.35em;
  font-weight:700;
}
.mark::before{
  content:"";
  width:9px;height:9px;border-radius:50%;
  flex:none;
}
.mark--open{color:var(--midori)}
.mark--open::before{background:var(--midori)}
.mark--closed{color:var(--sumi-45);font-weight:500}
.mark--closed::before{
  background:transparent;
  border:1.5px solid currentColor;
}

.tag{
  display:inline-block;
  margin-left:.35em;
  padding:.1em .55em;
  font-size:.75rem;font-weight:700;
  color:var(--ai);
  background:var(--mizu-pale);
  border-radius:999px;
  vertical-align:.08em;
}

.hours__note{
  margin-top:1.25rem;
  font-size:.9375rem;
  color:var(--sumi-70);
}
.hours__note strong{color:var(--sumi)}

/* ------------------------------------------------------------
   アクセス
   ------------------------------------------------------------ */
.access{
  display:grid;
  grid-template-columns:1.15fr .85fr;
  gap:clamp(1.5rem,3vw,2.5rem);
  align-items:start;
}
.map{
  position:relative;
  aspect-ratio:16/9;
  border-radius:var(--radius);
  overflow:hidden;
  border:1px solid var(--line);
  box-shadow:var(--shadow-m);
}
.map iframe{position:absolute;inset:0;width:100%;height:100%;border:0}

.deflist__row{
  display:grid;
  grid-template-columns:5.5rem 1fr;
  gap:1rem;
  padding:.9rem 0;
  border-bottom:1px solid var(--line);
}
.deflist__row:first-child{padding-top:0}
.deflist dt{
  font-weight:700;
  font-size:.875rem;
  color:var(--sumi-70);
  padding-top:.1em;
}
.deflist dd{margin:0;font-size:.9375rem;line-height:1.8}

/* ------------------------------------------------------------
   フッター
   ------------------------------------------------------------ */
.footer{
  background:var(--usumizu);
  border-top:1px solid var(--line);
  padding-top:clamp(2.5rem,5vw,3.5rem);
}
.footer__inner{
  display:flex;flex-wrap:wrap;gap:2rem;
  justify-content:space-between;
  padding-bottom:2.5rem;
}
.footer__name{
  font-size:1.1875rem;font-weight:700;
  margin-bottom:.75rem;
}
.footer__addr,.footer__hours{
  font-size:.875rem;
  color:var(--sumi-70);
  line-height:1.85;
}
.footer__tel{margin:.5rem 0 .9rem;font-size:1.0625rem}
.footer__nav ul{display:grid;gap:.15rem}
.footer__nav a{
  display:inline-flex;align-items:center;
  min-height:var(--tap);
  padding-inline:.2rem;
  font-size:.9375rem;font-weight:500;
  text-decoration:none;
}
@media (hover:hover){.footer__nav a:hover{color:var(--ai);text-decoration:underline;text-underline-offset:3px}}

.footer__copy{
  border-top:1px solid var(--line);
  padding:1.25rem var(--gutter);
  text-align:center;
  font-size:.8125rem;
  color:var(--sumi-70);
}

/* ------------------------------------------------------------
   モバイル固定CTAバー（768px 以下のみ）
   ------------------------------------------------------------ */
.cta-bar{
  display:none;
  position:fixed;left:0;right:0;bottom:0;
  z-index:90;
  gap:.5rem;
  padding:.55rem .75rem calc(.55rem + env(safe-area-inset-bottom));
  background:rgba(255,255,255,.96);
  backdrop-filter:blur(8px);
  border-top:1px solid var(--line);
  box-shadow:0 -2px 12px rgba(20,48,61,.07);
}
.cta-bar__btn{
  flex:1;
  display:inline-flex;align-items:center;justify-content:center;gap:.4em;
  min-height:var(--tap);
  border-radius:10px;
  font-size:.9375rem;font-weight:700;
  text-decoration:none;
  color:var(--ai);
  background:var(--white);
  border:2px solid var(--mizu);
}
.cta-bar__btn svg{width:1.15em;height:1.15em;flex:none}
.cta-bar__btn--primary{
  background:var(--ai);
  color:#fff;
  border-color:var(--ai);
}

/* ------------------------------------------------------------
   出現アニメーション（Subtle。1セクションにつき控えめに）
   ------------------------------------------------------------ */
.reveal{
  opacity:0;
  transform:translateY(16px);
  transition:opacity .5s ease-out, transform .5s ease-out;
}
.reveal.is-visible{opacity:1;transform:none}

/* ============================================================
   レスポンシブ  1440 / 1024 / 768 / 375
   ============================================================ */

@media (max-width:1024px){
  .access{grid-template-columns:1fr}
  .map{aspect-ratio:16/10}
}

@media (max-width:900px){
  .nav__list{gap:0}
  .nav__list a{padding:0 .6rem;font-size:.9375rem}
  .nav{gap:1rem}
}

@media (max-width:768px){
  :root{--header-h:60px}

  /* --- ナビをドロワー化 --- */
  .hamburger{display:grid}
  .nav{
    display:none;
    position:absolute;left:0;right:0;top:100%;
    flex-direction:column;align-items:stretch;
    gap:.5rem;
    padding:1rem var(--gutter) 1.5rem;
    background:var(--white);
    border-bottom:1px solid var(--line);
    box-shadow:var(--shadow-m);
  }
  .nav.is-open{display:flex}
  .nav__list{flex-direction:column;align-items:stretch;gap:0}
  .nav__list a{
    padding:0 .5rem;
    font-size:1rem;
    border-bottom:1px solid var(--line);
    border-radius:0;
  }
  .nav__tel{margin-top:.75rem}

  /* --- レイアウトを1カラムへ --- */
  .cards,.feats{grid-template-columns:1fr}

  .trust__list{
    grid-template-columns:repeat(2,1fr);
    gap:1.1rem .75rem;
  }
  .trust__item{justify-content:flex-start}

  .hero__inner{padding-block:2.75rem 3rem}
  .hero__facts li{font-size:.875rem}

  .feat__body{padding-left:0}

  /* --- 診療時間テーブル：横スクロールさせず、詰めて収める --- */
  .hours{font-size:.875rem}
  .hours th,.hours td{padding:.75rem .5rem}
  .hours tbody th{width:auto;white-space:nowrap}
  .hours thead th:first-child{width:5.5rem}
  .tag{display:block;margin:.25rem auto 0;width:fit-content}

  .deflist__row{grid-template-columns:4.5rem 1fr;gap:.75rem}

  .footer__inner{flex-direction:column;gap:1.5rem}

  /* --- 固定CTAバーを出し、その分だけ下に余白を確保 --- */
  .cta-bar{display:flex}
  body{padding-bottom:calc(var(--tap) + 1.4rem + env(safe-area-inset-bottom))}
  .footer__copy{padding-bottom:1.25rem}
}

@media (max-width:420px){
  .btn{width:100%}
  .btn-row{flex-direction:column}
  .cta-bar__btn{width:auto}      /* 固定バーは横並びのまま */
  .hero__title{font-size:1.75rem}
  .hours th,.hours td{padding:.7rem .35rem}
  .mark::before{width:8px;height:8px}
}

/* ============================================================
   モーション設定を尊重（必須）
   ============================================================ */
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
  .reveal{opacity:1 !important;transform:none !important}
}
