/* Minimal patient-booking foundation.  Keep staff/schedule rules out of the
   public reservation document; patient-booking-theme.css owns the visual skin. */
:root {
  --booking-base-line: #d7dbe2;
  --booking-base-muted: #4b5563;
  --booking-base-primary: #3478f6;
  --booking-base-danger: #b91c1c;
  --booking-base-font: "Hiragino Sans", "Yu Gothic UI", "Meiryo", sans-serif;
}
*, *::before, *::after { box-sizing: border-box; }
html, body { min-height: 100%; margin: 0; }
html {
  font-size: 100%;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}
/* Safari does not consistently apply the iOS Dynamic Type preference to rem
   units unless the root uses an Apple text style. Limit the workaround to
   touch devices so desktop typography is unchanged. */
@supports (font: -apple-system-body) {
  @media (hover: none) {
    html { font: -apple-system-body; }
  }
}
body { font-family: var(--booking-base-font); font-size: 1rem; color: #1f2937; background: #fff; }
button, input, select, textarea { font: inherit; }
button { cursor: pointer; }
button:disabled { cursor: not-allowed; }
a { color: var(--booking-base-primary); text-decoration: none; }
.hidden { display: none !important; }

.jr-header { position: sticky; top: 0; z-index: 30; display: flex; align-items: center; justify-content: space-between; min-height: 48px; padding: 0 16px; background: #3478f6; color: #fff; }
.jr-brand, .jr-tel { display: inline-flex; align-items: center; gap: 10px; min-width: 0; color: inherit; font-weight: 700; }
.jr-tooth { display: inline-block; width: 24px; height: 24px; border-radius: 55% 55% 48% 48%; background: #fff; transform: rotate(180deg); }
.jr-tel::before { content: "☎"; font-size: 18px; }
.jr-page { width: min(540px, 100%); min-height: calc(100vh - 48px); margin: 0 auto; padding: 28px 16px 88px; background: #fff; }
.jr-flow { background: #f1f1f1; }
.jr-card { padding: 16px; background: #fff; }
.jr-welcome { padding-top: 28px; }
.jr-card h1, .jr-card h2, .jr-card h3 { margin: 0 0 20px; font-weight: 700; letter-spacing: 0; }
.jr-card h1 { font-size: 22px; line-height: 1.35; text-align: center; }
.jr-card h2 { font-size: 20px; }
.jr-kicker { margin: 0 0 14px; }
.jr-intro { margin: 20px 0 36px; color: var(--booking-base-muted); }
.jr-home-info { display: grid; grid-template-columns: 1fr 1fr; margin-bottom: 46px; border-top: 1px solid var(--booking-base-line); border-bottom: 1px solid var(--booking-base-line); }
.jr-home-info p { margin: 0; padding: 16px 18px; }
.jr-home-info p + p { border-left: 1px solid var(--booking-base-line); }
.jr-home-info strong { display: block; }
.jr-notice { display: grid; gap: 12px; line-height: 1.75; color: var(--booking-base-muted); }
.jr-notice p { margin: 0; }
.jr-notice strong { display: block; color: #1f2937; }
.jr-notice .danger { color: var(--booking-base-danger); }
.jr-home-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 28px; }
.jr-policy { margin-top: 24px; padding: 14px; color: #374151; background: #f3f4f6; line-height: 1.6; }
.jr-policy p { margin: 0; }
.jr-home-contact { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 14px; }
.jr-home-contact a { text-decoration: underline; }
.jr-btn { display: inline-flex; align-items: center; justify-content: center; min-height: 56px; border: 1px solid var(--booking-base-line); border-radius: 5px; padding: 0 18px; background: #fff; font-size: 16px; font-weight: 700; }
.jr-btn-primary { border-color: var(--booking-base-primary); color: #fff; background: var(--booking-base-primary); }
.jr-btn-primary:disabled, .jr-btn-primary.disabled { border-color: #b8b8b8; background: #b8b8b8; }
.jr-btn-outline { color: #1f2937; }

.jr-stepper { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; align-items: start; height: 75px; margin: -28px -16px 0; padding: 13px 0 0; background: #f1f1f1; }
.jr-step { position: relative; display: grid; justify-items: center; gap: 6px; color: #b5b5b5; font-size: 11px; }
.jr-step::before { content: ""; position: absolute; top: 14px; right: 0; left: 0; z-index: 0; height: 1px; background: #d4d4d4; }
.jr-step:first-child::before { left: 50%; }
.jr-step:last-child::before { right: 50%; }
.jr-step span { z-index: 1; display: grid; place-items: center; width: 28px; height: 28px; border-radius: 999px; background: #fff; color: #c0c0c0; font-weight: 700; }
.jr-step.is-active span { color: #fff; background: var(--booking-base-primary); }
.jr-step.is-active small, .jr-step.is-done small { color: #222; }
.jr-step.is-done span { color: var(--booking-base-primary); }

.jr-toggle { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 28px; }
.jr-toggle button, .jr-time-list button { min-height: 56px; border: 1px solid var(--booking-base-line); border-radius: 5px; background: #fff; font-size: 16px; font-weight: 700; }
.jr-toggle button.is-selected, .jr-time-list button.is-selected { color: #fff; background: var(--booking-base-primary); }
.jr-field { display: grid; gap: 8px; margin-bottom: 20px; }
.jr-field > span { font-weight: 700; }
.jr-field strong { display: inline-flex; margin-left: 6px; padding: 2px 5px; border-radius: 2px; color: #fff; background: #ef4444; font-size: 12px; }
.jr-input { width: 100%; min-height: 56px; border: 1px solid var(--booking-base-line); border-radius: 5px; padding: 0 12px; background: #fff; font-size: 16px; }
textarea.jr-input { padding-top: 12px; line-height: 1.5; }
.jr-field:has(.jr-input:invalid) .jr-input, .jr-input.is-error { border-color: #dc2626; }
.jr-field-hint, .jr-field-error { font-size: 13px; line-height: 1.5; }
.jr-field-hint { color: var(--booking-base-muted); }
.jr-field-error { min-height: 1.5em; color: var(--booking-base-danger); }
.jr-add-patient, .jr-link-button { width: 100%; min-height: 42px; border: 0; color: #1f2937; background: transparent; font-weight: 700; }
.jr-returning-summary { margin-bottom: 12px; padding: 16px; border: 1px solid #e5e7eb; background: #f9fafb; }
.jr-returning-summary.is-ready { border-color: #bfdbfe; background: #eff6ff; }
.jr-target { display: grid; gap: 4px; margin-bottom: 28px; padding: 14px; background: #f0f0f0; }
.jr-target em { color: #dc2626; font-size: 12px; font-style: normal; }
.jr-month { display: grid; grid-template-columns: 44px 1fr 44px; align-items: center; height: 40px; border: 1px solid var(--booking-base-line); border-bottom: 0; text-align: center; }
.jr-month button { border: 0; background: #fff; font-size: 30px; line-height: 1; }
.jr-calendar { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); border-top: 1px solid var(--booking-base-line); border-left: 1px solid var(--booking-base-line); }
.jr-week, .jr-day { display: grid; place-items: center; min-height: 47px; border-right: 1px solid var(--booking-base-line); border-bottom: 1px solid var(--booking-base-line); background: #fff; color: #374151; }
.jr-week { min-height: 30px; font-weight: 700; }
.jr-week.sun { color: var(--booking-base-danger); }
.jr-week.sat { color: #0f766e; }
.jr-day { gap: 1px; }
.jr-day em { color: #be185d; font-size: 18px; font-style: normal; }
.jr-day.close em { color: #555; }
.jr-day.outside { color: #9ca3af; }
.jr-day.is-selected { color: #fff; background: var(--booking-base-primary); }
.jr-day.is-selected em { color: #fff; }
.jr-legend { display: grid; gap: 6px; margin: 12px 0 0; color: #374151; }
.jr-availability-error { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px; margin: -10px 0 18px; border: 1px solid #d8b2a8; color: var(--booking-base-danger); background: #fff8f6; }
.jr-availability-error p { margin: 0; }
.jr-calendar-loader { padding: 20px 0; color: var(--booking-base-muted); }
.jr-time-sheet { position: fixed; right: 0; bottom: 72px; left: 0; z-index: 40; width: min(720px, 100%); max-height: calc(100vh - 120px); margin: 0 auto; overflow: auto; padding: 22px 16px 12px; background: #fff; box-shadow: 0 -8px 24px rgb(0 0 0 / 15%); }
.jr-time-list { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 24px; }
.jr-time-list button { min-width: 74px; padding: 0 14px; }
.jr-time-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.jr-form-stack { padding-bottom: 20px; }
.jr-name-pair { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 0; padding: 0; border: 0; }
.jr-name-pair legend { grid-column: 1 / -1; width: 100%; margin-bottom: 2px; padding: 0; color: #374151; font-weight: 700; }
.jr-birthday { display: grid; grid-template-columns: 1.1fr 1fr 1fr; gap: 8px; }
.jr-input-with-suffix { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 10px; }
.jr-confirm { display: grid; grid-template-columns: 105px 1fr; border-top: 1px solid #e5e7eb; }
.jr-confirm dt, .jr-confirm dd { margin: 0; padding: 12px 0; border-bottom: 1px solid #e5e7eb; }
.jr-confirm dt { color: #6b7280; font-weight: 700; }
.jr-inline-note { padding: 12px; background: #f3f4f6; line-height: 1.6; }
.jr-inline-note.danger { color: var(--booking-base-danger); }
.jr-sms-box { display: grid; gap: 8px; padding: 16px; margin-bottom: 18px; background: #f3f4f6; }
.jr-sms-box p { margin: 0; }
.jr-mock-code strong { font-size: 24px; }
.jr-done { display: grid; gap: 14px; }
.jr-done-main { font-size: 18px; font-weight: 800; }
.jr-lookup-list { display: grid; gap: 10px; margin-top: 18px; }
.jr-lookup-card { display: grid; gap: 6px; padding: 12px; border: 1px solid var(--booking-base-line); border-radius: 5px; }
.jr-footer { position: fixed; right: 0; bottom: 0; left: 0; z-index: 35; display: grid; grid-template-columns: 1fr 1fr; gap: 12px; height: 72px; padding: 12px max(12px, calc((100vw - 540px) / 2 + 12px)); border-top: 1px solid var(--booking-base-line); background: #fff; }
.jr-footer.jr-footer-single { grid-template-columns: 1fr; }
.jr-confirmation-email { display: grid; gap: 12px; margin-top: 8px; padding-top: 20px; border-top: 1px solid var(--booking-base-line); }
.jr-confirmation-email p { margin: 0; }
.jr-modal-backdrop { position: fixed; inset: 0; z-index: 60; display: grid; align-items: center; justify-items: center; padding: 16px; background: rgb(0 0 0 / 45%); }
.jr-modal { position: relative; display: grid; gap: 16px; width: min(720px, 100%); padding: 24px; background: #fff; box-shadow: 0 20px 50px rgb(0 0 0 / 25%); }
.jr-modal-close { position: absolute; top: 16px; right: 18px; border: 0; background: transparent; font-size: 30px; line-height: 1; }
.jr-busy-status { min-height: 1.5em; margin: 0; }
.booking-busy { cursor: progress; }

.toast-container { position: fixed; right: 12px; bottom: 12px; z-index: 40; display: flex; flex-direction: column; gap: 8px; }
.toast { min-width: 220px; max-width: 360px; padding: 10px 12px; border-radius: 8px; color: #fff; opacity: 0; transform: translateY(6px); transition: opacity .16s ease, transform .16s ease; }
.toast.is-visible { opacity: 1; transform: translateY(0); }
.toast-info { background: #244a6b; }
.toast-success { background: #1f7a4d; }
.toast-warning { background: #b7791f; }
.toast-error { background: #c64545; }

@media (max-width: 640px) {
  .jr-home-info, .jr-home-actions { grid-template-columns: 1fr; }
  .jr-home-info p + p { border-top: 1px solid var(--booking-base-line); border-left: 0; }
  .jr-page { width: 100%; padding-right: 20px; padding-left: 20px; }
  .jr-card { padding-right: 0; padding-left: 0; }
  .jr-time-list { display: grid; grid-template-columns: repeat(3, 1fr); }
  .jr-time-list button { min-width: 0; }
  .jr-confirm { grid-template-columns: 88px 1fr; }
  .jr-footer { height: 76px; padding-bottom: calc(12px + env(safe-area-inset-bottom)); }
  .jr-modal { padding: 26px 20px; }
}

/* Patient-facing reservation theme: aligned with the v9 Nakayama Dental homepage. */
.public-booking-page {
  --booking-navy: #174d72;
  --booking-ink: #27465d;
  --booking-muted: #617684;
  --booking-line: #c9dbe4;
  --booking-mist: #f5fafc;
  --booking-pale: #eaf5f8;
  --booking-alert: #8a3d31;
  --booking-focus: #b45628;
  --booking-serif: "Noto Serif JP", "Yu Mincho", YuMincho, "Hiragino Mincho ProN", serif;
  --booking-sans: "Noto Sans JP", "Hiragino Sans", "Yu Gothic", sans-serif;
  color: var(--booking-ink);
  background: var(--booking-mist);
  font-family: var(--booking-sans);
  font-size: 15px;
  line-height: 1.85;
}

.public-booking-page :focus-visible { outline: 3px solid var(--booking-focus); outline-offset: 3px; }
.public-booking-page .jr-header { height: 76px; padding: 0 max(20px, calc((100% - 1040px) / 2)); background: rgba(255, 255, 255, .96); border-bottom: 1px solid rgba(23, 77, 114, .15); color: var(--booking-ink); }
.public-booking-page .jr-busy-status { position: fixed; z-index: 30; top: 80px; left: 50%; min-height: 0; margin: 0; transform: translateX(-50%); color: var(--booking-navy); font-size: 13px; font-weight: 700; pointer-events: none; }
.public-booking-page .jr-busy-status:not(:empty) { padding: 9px 14px; border: 1px solid #9fc3d5; background: #f3fbff; box-shadow: 0 8px 20px rgba(23,77,114,.12); }
.public-booking-page.booking-busy { cursor: progress; }
.public-booking-page .jr-brand { gap: 10px; color: var(--booking-navy); text-decoration: none; }
.public-booking-page .jr-brand strong { display: block; font-family: var(--booking-serif); font-size: 19px; font-weight: 500; letter-spacing: .07em; }
.public-booking-page .jr-brand small { display: block; margin-top: 2px; color: var(--booking-muted); font-family: Georgia, serif; font-size: 8px; letter-spacing: .18em; }
.public-booking-page .jr-tooth { width: 24px; height: 24px; border: 1px solid var(--booking-navy); border-radius: 50%; background: radial-gradient(circle at 35% 35%, transparent 0 19%, var(--booking-navy) 20% 24%, transparent 25% 100%); transform: none; }
.public-booking-page .jr-home-link { display: inline-flex; gap: 9px; align-items: center; color: var(--booking-navy); font-size: 12px; text-decoration: none; }

.public-booking-page .jr-page { width: min(760px, 100%); min-height: calc(100vh - 76px); margin: 0 auto; padding: clamp(48px, 7vw, 88px) 28px 112px; background: #fff; }
.public-booking-page .jr-page.jr-home { width: min(860px, 100%); padding-top: clamp(56px, 9vw, 112px); }
.public-booking-page .jr-flow { background: #fff; }
.public-booking-page .jr-card { padding: 0; background: transparent; }
.public-booking-page .jr-card h1, .public-booking-page .jr-card h2, .public-booking-page .jr-card h3 { color: var(--booking-navy); font-family: var(--booking-serif); font-weight: 500; letter-spacing: .05em; }
.public-booking-page .jr-card h1 { font-size: clamp(34px, 5vw, 52px); line-height: 1.35; text-align: left; }
.public-booking-page .jr-card h2 { margin-bottom: 34px; font-size: clamp(26px, 3vw, 35px); line-height: 1.45; }
.public-booking-page .jr-card h3 { font-size: 19px; }
.public-booking-page .jr-kicker { margin: 0 0 14px; color: var(--booking-navy); font-family: Georgia, serif; font-size: 10px; letter-spacing: .2em; }
.public-booking-page .jr-intro { max-width: 510px; margin: 20px 0 36px; color: var(--booking-muted); }
.public-booking-page .jr-home-info { display: grid; grid-template-columns: 1fr 1fr; margin: 0 0 46px; border-top: 1px solid var(--booking-line); border-bottom: 1px solid var(--booking-line); }
.public-booking-page .jr-home-info p { margin: 0; padding: 16px 18px; font-size: 13px; }
.public-booking-page .jr-home-info p + p { border-left: 1px solid var(--booking-line); }
.public-booking-page .jr-home-info strong { display: block; margin-bottom: 3px; color: var(--booking-muted); font-size: 10px; font-weight: 500; letter-spacing: .08em; }
.public-booking-page .jr-home-info small { color: var(--booking-muted); font-size: 10px; }
.public-booking-page .jr-notice { gap: 0; margin: 0; border-top: 1px solid var(--booking-line); }
.public-booking-page .jr-notice p { margin: 0; padding: 16px 0; border-bottom: 1px solid var(--booking-line); color: var(--booking-muted); font-size: 13px; }
.public-booking-page .jr-notice strong { display: block; margin-bottom: 3px; color: var(--booking-ink); font-family: var(--booking-serif); font-size: 15px; font-weight: 500; }
.public-booking-page .jr-notice .danger { color: var(--booking-alert); }
.public-booking-page .jr-notice .danger strong { color: var(--booking-alert); }
.public-booking-page .jr-home-actions { grid-template-columns: minmax(210px, 1fr) minmax(210px, 1fr); gap: 12px; margin-top: 42px; }
.public-booking-page .jr-policy { margin-top: 30px; padding: 14px 0 0; background: transparent; color: var(--booking-muted); font-size: 11px; }
.public-booking-page .jr-policy p { margin: 0; }

.public-booking-page .jr-btn { min-height: 54px; border: 1px solid var(--booking-navy); border-radius: 0; padding: 12px 19px; color: var(--booking-navy); background: #fff; font-size: 14px; font-weight: 700; transition: background .18s ease, color .18s ease, transform .18s ease; }
.public-booking-page .jr-btn:hover:not(:disabled) { color: #fff; background: var(--booking-navy); transform: translateY(-1px); }
.public-booking-page .jr-btn-primary { color: #fff; background: var(--booking-navy); }
.public-booking-page .jr-btn-primary:disabled, .public-booking-page .jr-btn-primary.disabled { border-color: #a9b9c3; background: #a9b9c3; }
.public-booking-page .jr-btn-outline { color: var(--booking-navy); }

.public-booking-page .jr-stepper { height: auto; margin: 0 0 58px; padding: 0; background: transparent; }
.public-booking-page .jr-step { gap: 8px; color: #9babb4; font-size: 10px; }
.public-booking-page .jr-step::before { top: 11px; background: var(--booking-line); }
.public-booking-page .jr-step span { width: 23px; height: 23px; border: 1px solid var(--booking-line); border-radius: 0; color: var(--booking-muted); background: #fff; font-family: Georgia, serif; font-size: 10px; }
.public-booking-page .jr-step.is-active span { border-color: var(--booking-navy); background: var(--booking-navy); color: #fff; }
.public-booking-page .jr-step.is-done span { border-color: var(--booking-navy); color: var(--booking-navy); }
.public-booking-page .jr-step.is-active small, .public-booking-page .jr-step.is-done small { color: var(--booking-navy); }

.public-booking-page .jr-toggle { gap: 0; margin-bottom: 34px; border: 1px solid var(--booking-line); }
.public-booking-page .jr-toggle button { min-height:64px; border: 0; border-left: 1px solid var(--booking-line); border-radius: 0; color: var(--booking-muted); background: #fff; font-family: var(--booking-serif); font-size: 18px; font-weight: 500; }
.public-booking-page .jr-toggle button:first-child { border-left: 0; }
.public-booking-page .jr-toggle button.is-selected, .public-booking-page .jr-time-list button.is-selected { color: #fff; background: var(--booking-navy); }
.public-booking-page .jr-field { gap: 8px; margin-bottom: 24px; }
.public-booking-page .jr-field > span { color: var(--booking-ink); font-size: 13px; font-weight: 700; }
.public-booking-page .jr-field strong { border-radius: 0; background: transparent; color: var(--booking-alert); font-size: 10px; }
.public-booking-page .jr-input { min-height: 54px; border: 1px solid var(--booking-line); border-radius: 0; padding: 0 15px; color: var(--booking-ink); font-size: 16px; }
.public-booking-page textarea.jr-input { padding-top: 14px; }
.public-booking-page .jr-input:focus { border-color: var(--booking-navy); box-shadow: 0 0 0 3px rgba(23,77,114,.1); outline: 0; }
.public-booking-page .jr-readonly-field { display: flex; align-items: center; background: #f4f7f9; color: var(--booking-ink); }
.public-booking-page .jr-returning-summary, .public-booking-page .jr-target { padding: 18px; margin-bottom: 28px; border: 1px solid var(--booking-line); background: var(--booking-mist); }
.public-booking-page .jr-returning-summary.is-ready { border-color: #9fc3d5; background: var(--booking-pale); }
.public-booking-page .jr-link-button, .public-booking-page .jr-add-patient { color: var(--booking-navy); font-size: 13px; text-decoration: underline; text-underline-offset: 4px; }
.public-booking-page .jr-target { display:grid; grid-template-columns:auto 1fr auto; gap:4px 14px; align-items:center; }
.public-booking-page .jr-target strong { color:var(--booking-navy); font-family:var(--booking-serif); font-size:18px; font-weight:500; }
.public-booking-page .jr-target span { grid-column:2 / -1; }
.public-booking-page .jr-target small { color:var(--booking-muted); }
.public-booking-page .jr-target em { grid-column:1 / -1; margin-top:4px; color:var(--booking-alert); font-size:11px; }
.public-booking-page .jr-availability-error { display:flex; justify-content:space-between; gap:16px; align-items:center; padding:16px; margin:-10px 0 18px; border:1px solid #d8b2a8; color:var(--booking-alert); background:#fff8f6; }
.public-booking-page .jr-availability-error p { margin:0; font-size:13px; }
.public-booking-page .jr-availability-error .jr-btn { min-height:42px; flex:none; }
.public-booking-page .jr-turnstile-recovery { display:grid; gap:12px; margin:-22px 0 24px; padding:16px; border:1px solid #d8b2a8; color:var(--booking-alert); background:#fff8f6; }
.public-booking-page .jr-turnstile-recovery p { margin:0; font-size:14px; line-height:1.7; }
.public-booking-page .jr-turnstile-recovery code { padding:2px 4px; border-radius:3px; background:#fff; font-size:.9em; }
.public-booking-page .jr-turnstile-recovery .jr-btn { width:100%; min-height:46px; }
.public-booking-page .jr-month { height:54px; border-color:var(--booking-line); background:#fff; }
.public-booking-page .jr-month button { color:var(--booking-navy); background:#fff; }
.public-booking-page .jr-calendar { border-color:var(--booking-line); }
.public-booking-page .jr-week, .public-booking-page .jr-day { min-height:58px; border-color:var(--booking-line); color:var(--booking-ink); }
.public-booking-page .jr-week { min-height:34px; color:var(--booking-muted); font-size:11px; }
.public-booking-page .jr-week.sun { color:var(--booking-alert); }.public-booking-page .jr-week.sat { color:var(--booking-navy); }
.public-booking-page .jr-day { transition:background .15s,color .15s; }.public-booking-page .jr-day:not(:disabled):hover { background:var(--booking-pale); }.public-booking-page .jr-day em { color:var(--booking-navy); font-family:Georgia,serif; font-size:16px; }.public-booking-page .jr-day.few em { color:#ad7523; }.public-booking-page .jr-day.close { color:#a8b6bd; background:#fafcfd; }.public-booking-page .jr-day.close em { color:#a8b6bd; }.public-booking-page .jr-day.error, .public-booking-page .jr-day.stale { color:#8d5a26; background:#fffaf0; }.public-booking-page .jr-day.error em { color:#b42318; }.public-booking-page .jr-day.stale em { color:#ad7523; }.public-booking-page .jr-day.loading { color:#82929b; background:#f6f9fa; }.public-booking-page .jr-day.loading em { color:#82929b; }.public-booking-page .jr-day.is-selected { background:var(--booking-navy); color:#fff; }.public-booking-page .jr-day.is-selected em { color:#fff; }.public-booking-page .jr-legend { grid-template-columns:repeat(3,1fr); gap:8px; color:var(--booking-muted); font-size:11px; }
.public-booking-page .jr-time-sheet { right:0; bottom:82px; left:0; width:100%; max-height:calc(100vh - 170px); transform:none; padding:28px max(20px,calc((100vw - 704px)/2)) 24px; border-top:1px solid var(--booking-line); box-shadow:0 -14px 40px rgba(23,77,114,.16); }.public-booking-page .jr-time-sheet h3 { margin:0 0 16px; color:var(--booking-navy); font-family:var(--booking-serif); font-size:23px; font-weight:500; }.public-booking-page .jr-time-list { gap:8px; }.public-booking-page .jr-time-list button { min-width:78px; min-height:48px; border:1px solid var(--booking-line); border-radius:0; color:var(--booking-navy); background:#fff; }.public-booking-page .jr-time-actions { gap:10px; }
.public-booking-page .jr-confirm { grid-template-columns:130px 1fr; border-top-color:var(--booking-line); }.public-booking-page .jr-confirm dt, .public-booking-page .jr-confirm dd { padding:14px 0; border-bottom-color:var(--booking-line); }.public-booking-page .jr-confirm dt { color:var(--booking-muted); font-size:12px; }.public-booking-page .jr-inline-note, .public-booking-page .jr-sms-box { padding:16px; background:var(--booking-mist); color:var(--booking-muted); }.public-booking-page .jr-inline-note.danger { color:var(--booking-alert); }.public-booking-page .jr-sms-box { gap:10px; margin-bottom:22px; border-left:2px solid var(--booking-navy); }.public-booking-page .jr-mock-code strong { color:var(--booking-navy); }.public-booking-page .jr-done { gap:20px; }.public-booking-page .jr-done-main { padding:18px; color:var(--booking-navy); background:var(--booking-pale); font-family:var(--booking-serif); font-size:20px; font-weight:500; }
.public-booking-page .jr-footer { height:82px; gap:10px; padding:14px max(20px,calc((100vw - 704px)/2)); border-top-color:var(--booking-line); background:rgba(255,255,255,.96); backdrop-filter:blur(10px); }.public-booking-page .jr-footer .jr-btn { min-height:52px; }.public-booking-page .jr-modal-backdrop { background:rgba(23,77,114,.38); }.public-booking-page .jr-modal { width:min(560px,100%); padding:34px; border:1px solid var(--booking-line); box-shadow:0 20px 50px rgba(23,77,114,.2); }.public-booking-page .jr-modal h2 { margin:0; color:var(--booking-navy); font-family:var(--booking-serif); font-weight:500; }.public-booking-page .jr-modal-close { color:var(--booking-navy); }.public-booking-page .toast-container { bottom:94px; }.public-booking-page .toast { border-radius:0; box-shadow:0 10px 30px rgba(23,77,114,.18); }
.public-booking-page:has(.jr-time-sheet) .jr-footer { display:none; }
/* Keep the time-choice actions reachable on short iPhone viewports.  The
   sheet itself scrolls when the list is taller than the viewport; a sticky
   action row prevents users from having to hunt below the fold. */
.public-booking-page .jr-time-actions {
  position: sticky;
  bottom: 0;
  z-index: 2;
  padding: 12px 0 4px;
  background: linear-gradient(to bottom, rgba(255,255,255,0), #fff 14px);
}
@media (max-width: 640px) { .public-booking-page { font-size:14px; }.public-booking-page .jr-header { height:66px; padding:0 20px; }.public-booking-page .jr-busy-status { top:70px; width:calc(100% - 40px); text-align:center; }.public-booking-page .jr-brand strong { font-size:16px; }.public-booking-page .jr-home-link { font-size:10px; }.public-booking-page .jr-page, .public-booking-page .jr-page.jr-home { min-height:calc(100vh - 66px); padding:42px 20px 102px; }.public-booking-page .jr-card h1 { font-size:35px; }.public-booking-page .jr-card h2 { margin-bottom:26px; font-size:27px; }.public-booking-page .jr-home-info { grid-template-columns:1fr; margin-bottom:34px; }.public-booking-page .jr-home-info p + p { border-top:1px solid var(--booking-line); border-left:0; }.public-booking-page .jr-home-actions { grid-template-columns:1fr; margin-top:32px; }.public-booking-page .jr-stepper { margin-bottom:40px; }.public-booking-page .jr-step small { font-size:8px; }.public-booking-page .jr-toggle button { min-height:58px; font-size:16px; }.public-booking-page .jr-target { grid-template-columns:1fr auto; }.public-booking-page .jr-target span { grid-column:1 / -1; }.public-booking-page .jr-availability-error { display:grid; }.public-booking-page .jr-availability-error .jr-btn { width:100%; }.public-booking-page .jr-week, .public-booking-page .jr-day { min-height:49px; font-size:12px; }.public-booking-page .jr-legend { grid-template-columns:1fr; gap:2px; }.public-booking-page .jr-time-sheet { bottom:76px; max-height:calc(100vh - 142px); padding:22px 20px 18px; }.public-booking-page .jr-time-list { display:grid; grid-template-columns:repeat(3,1fr); }.public-booking-page .jr-time-list button { min-width:0; }.public-booking-page .jr-confirm { grid-template-columns:88px 1fr; }.public-booking-page .jr-footer { height:76px; padding:12px 20px calc(12px + env(safe-area-inset-bottom)); }.public-booking-page .jr-modal { padding:26px 20px; } }

/* Readability pass: the base booking stylesheet has competing body rules, so
   this explicit body selector is intentional. Patient copy follows the root
   Dynamic Type size; only the dense six-item progress strip stays compact. */
body.public-booking-page {
  color: var(--booking-ink);
  font-size: 1rem;
  line-height: 1.8;
}

.public-booking-page {
  --booking-muted: #3f5b68;
}

.public-booking-page .jr-home-link,
.public-booking-page .jr-intro,
.public-booking-page .jr-home-info p,
.public-booking-page .jr-notice p,
.public-booking-page .jr-notice strong,
.public-booking-page .jr-btn,
.public-booking-page .jr-field > span,
.public-booking-page .jr-link-button,
.public-booking-page .jr-add-patient,
.public-booking-page .jr-target,
.public-booking-page .jr-target span,
.public-booking-page .jr-availability-error p,
.public-booking-page .jr-week,
.public-booking-page .jr-day,
.public-booking-page .jr-legend,
.public-booking-page .jr-time-list button,
.public-booking-page .jr-confirm dt,
.public-booking-page .jr-confirm dd,
.public-booking-page .jr-inline-note,
.public-booking-page .jr-sms-box,
.public-booking-page .jr-footer .jr-btn {
  font-size: 1rem;
  line-height: 1.7;
}

.public-booking-page .jr-intro,
.public-booking-page .jr-notice p,
.public-booking-page .jr-inline-note,
.public-booking-page .jr-sms-box {
  text-wrap: pretty;
}

.public-booking-page .jr-home-info strong,
.public-booking-page .jr-home-info small,
.public-booking-page .jr-target small,
.public-booking-page .jr-field strong,
.public-booking-page .jr-target em {
  font-size: .875rem;
  line-height: 1.7;
}

.public-booking-page .jr-home-info strong,
.public-booking-page .jr-field strong {
  font-size: 1rem;
}

.public-booking-page .jr-policy {
  font-size: .9375rem;
  line-height: 1.7;
}

.public-booking-page .jr-step {
  font-size: .75rem;
}

.public-booking-page .jr-input {
  font-size: 1rem;
}

.public-booking-page .jr-brand strong {
  white-space: nowrap;
}

@media (max-width: 640px) {
  body.public-booking-page {
    font-size: 1rem;
  }

  .public-booking-page .jr-header {
    padding-inline: 12px;
  }

  .public-booking-page .jr-home-link {
    font-size: 14px;
  }

  .public-booking-page .jr-home-link,
  .public-booking-page .jr-btn,
  .public-booking-page .jr-field > span,
  .public-booking-page .jr-link-button,
  .public-booking-page .jr-add-patient,
  .public-booking-page .jr-target,
  .public-booking-page .jr-target span,
  .public-booking-page .jr-availability-error p,
  .public-booking-page .jr-week,
  .public-booking-page .jr-day,
  .public-booking-page .jr-time-list button,
  .public-booking-page .jr-confirm dt,
  .public-booking-page .jr-confirm dd,
  .public-booking-page .jr-inline-note,
  .public-booking-page .jr-sms-box,
  .public-booking-page .jr-footer .jr-btn {
    font-size: 1rem;
  }

  .public-booking-page .jr-home-info strong {
    font-size: 1rem;
  }

  .public-booking-page .jr-home-info small {
    font-size: .9375rem;
  }

  /* Six Japanese step labels need 64px each at 16px, which forced the last
     character onto a second line on iPhone. Keep the normal label compact and
     let the strip scroll only when Dynamic Type makes the labels wider. */
  .public-booking-page .jr-stepper {
    grid-auto-columns: minmax(3.5rem, 1fr);
    overflow-x: auto;
    overscroll-behavior-inline: contain;
    scrollbar-width: none;
  }

  .public-booking-page .jr-stepper::-webkit-scrollbar {
    display: none;
  }

  .public-booking-page .jr-step {
    min-width: 0;
    gap: 4px;
    font-size: .75rem;
  }

  .public-booking-page .jr-step small {
    max-width: none;
    font-size: .75rem;
    line-height: 1.35;
    letter-spacing: -.02em;
    white-space: nowrap;
  }

  .public-booking-page .jr-legend {
    font-size: .875rem;
  }
}

/* The Turnstile mount is intentionally reachable while a risk-based challenge
   is running. Once the completion view exists it must never obscure the result,
   even if the provider iframe finishes after the booking UI has advanced. */
body.public-booking-page:has(.jr-done) #jr-public-turnstile {
  display: none !important;
  visibility: hidden !important;
  pointer-events: none !important;
}

@media (max-width: 360px) {
  .public-booking-page .jr-home-link {
    display: none;
  }
}
