/* Shared screens: the patient's phone and the practice's back office. Used on the journey page and on the real Aldbridge Dental demo site. */

/* ---------- the patient's phone ---------- */
.ph-frame { position: relative; width: 310px; height: 640px; background: #0b0c10; border-radius: 42px; padding: 10px; box-shadow: 0 30px 70px -24px #000, 0 0 0 1px rgba(255, 255, 255, .14); }
.ph-notch { position: absolute; top: 18px; left: 50%; transform: translateX(-50%); width: 92px; height: 22px; border-radius: 999px; background: #0b0c10; z-index: 3; }
.ph-screen { position: relative; height: 100%; background: #f4f6f5; border-radius: 34px; overflow: hidden; display: flex; flex-direction: column; color: #10201e; font-family: Inter, system-ui, sans-serif; }
.ph-status { display: flex; justify-content: space-between; align-items: center; padding: 14px 22px 4px; font-size: 12.5px; }
.ph-status span { color: #5a6b68; }
.ph-head { display: flex; justify-content: space-between; align-items: end; gap: 8px; padding: 10px 16px 10px; border-bottom: 1px solid #e0e6e4; background: #fff; }
.ph-head b { font-size: 20px; display: block; letter-spacing: -.01em; }
.ph-head small { color: #5a6b68; font-size: 12px; }
.ph-pick { display: grid; gap: 2px; font-size: 10.5px; color: #5a6b68; text-transform: uppercase; letter-spacing: .06em; }
.ph-pick select { font: inherit; font-size: 12.5px; text-transform: none; letter-spacing: 0; border: 1px solid #d3dcd9; border-radius: 8px; padding: 4px 6px; background: #fff; color: #10201e; max-width: 130px; }
.ph-thread { flex: 1; overflow-y: auto; padding: 14px 14px 18px; display: flex; flex-direction: column; gap: 10px; }
.ph-empty { color: #5a6b68; font-size: 13.5px; text-align: center; margin: auto 10px; }
.ph-msg { background: #fff; border: 1px solid #e0e6e4; border-radius: 16px 16px 16px 4px; padding: 10px 12px; max-width: 94%; box-shadow: 0 1px 2px rgba(10, 47, 44, .06); animation: ph-in .35s ease; }
@keyframes ph-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.ph-label { font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase; color: #0f766e; font-weight: 700; margin-bottom: 3px; }
.ph-text { font-size: 14px; line-height: 1.4; }
.ph-msg.book { border-color: #9bd3c9; background: #eefaf7; }
.ph-msg.remind .ph-label { color: #4057c9; }
.ph-msg.invoice .ph-label { color: #a1640a; }
.ph-msg.warn { border-color: #f1c98e; background: #fff8ec; } .ph-msg.warn .ph-label { color: #a1640a; }
.ph-msg.escalate { border-color: #efa9a0; background: #fff3f1; } .ph-msg.escalate .ph-label { color: #b42318; }
.ph-btn { margin-top: 8px; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; border: 0; border-radius: 999px; padding: 8px 14px; background: #0f766e; color: #fff; }
.ph-btn.alt { background: #10201e; }
.ph-btn:hover { filter: brightness(1.12); }
.ph-sheet { position: absolute; inset: 0; background: rgba(10, 47, 44, .45); display: flex; align-items: flex-end; z-index: 4; }
.ph-sheet[hidden] { display: none; }
.ph-sheet-in { width: 100%; background: #fff; border-radius: 22px 22px 0 0; padding: 16px 16px 22px; max-height: 80%; overflow-y: auto; box-shadow: 0 -10px 30px rgba(0, 0, 0, .2); }
.ph-sheet-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
.ph-sheet-top b { font-size: 17px; }
.ph-x { font: inherit; font-size: 22px; line-height: 1; border: 0; background: #eef3f1; border-radius: 50%; width: 30px; height: 30px; cursor: pointer; color: #10201e; }
.ph-big { font-weight: 700; font-size: 16px; margin: 4px 0; }
.ph-sm { color: #5a6b68; font-size: 13px; margin: 0 0 10px; }
.ph-slots { display: grid; gap: 8px; }
.ph-slot { font: inherit; font-weight: 600; font-size: 14px; text-align: left; cursor: pointer; background: #f4f6f5; border: 1px solid #d3dcd9; border-radius: 12px; padding: 11px 13px; color: #10201e; }
.ph-slot:hover { border-color: #0f766e; background: #e6f4f1; }
.ph-link { font: inherit; font-size: 13px; color: #b42318; background: none; border: 0; margin-top: 12px; cursor: pointer; text-decoration: underline; }
.ph-inv { border: 1px solid #e0e6e4; border-radius: 12px; padding: 10px 12px; margin-bottom: 8px; }
.ph-inv.late { border-color: #efa9a0; background: #fff3f1; } .ph-inv.paid { border-color: #9bd3c9; background: #eefaf7; }
.ph-inv-top { display: flex; justify-content: space-between; font-size: 13px; } .ph-inv p { margin: 2px 0; font-size: 13.5px; }
.ph-amt { font-weight: 800; font-size: 17px !important; }
.ph-howto { background: #e6f4f1; border-radius: 12px; padding: 10px 12px; font-size: 13px; margin-top: 10px; } .ph-howto p { margin: 4px 0 0; color: #34504b; }

/* ---------- the practice's back office (its own look: teal and mint) ---------- */
.hub { container-type: inline-size; background: #fbfaf7; color: #10201e; border-radius: 22px; overflow: hidden; border: 1px solid #d9e4e1; box-shadow: 0 30px 70px -30px #000; font-family: Inter, system-ui, sans-serif; font-size: 14.5px; line-height: 1.5; min-height: 720px; display: flex; flex-direction: column; }
.hub * { box-sizing: border-box; }
.hub-bar { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 10px; padding: 14px 20px; background: #0a2f2c; color: #fff; }
.hub-brand { display: flex; align-items: center; gap: 12px; }
.hub-mark { width: 38px; height: 38px; border-radius: 11px; background: #0f766e; display: grid; place-items: center; font-family: Fraunces, Georgia, serif; font-weight: 600; font-size: 22px; }
.hub-brand b { font-family: Fraunces, Georgia, serif; font-size: 18px; display: block; letter-spacing: -.01em; }
.hub-brand small { color: #9ac7bf; font-size: 12px; }
.hub-meta { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.hub-sys { font-size: 12px; font-weight: 700; padding: 4px 11px; border-radius: 999px; background: rgba(61, 220, 151, .18); color: #7cf0bd; }
.hub-sys.warn { background: rgba(242, 179, 61, .2); color: #f7cf7d; } .hub-sys.bad { background: rgba(255, 99, 99, .2); color: #ff9c9c; }
.hub-clock { font-size: 13px; color: #cfe5e0; }
.hub-tabs { display: flex; flex-wrap: wrap; gap: 2px; padding: 0 14px; background: #e6f4f1; border-bottom: 1px solid #cfe3de; }
.hub-tab { font: inherit; font-weight: 600; cursor: pointer; border: 0; background: none; color: #34504b; padding: 12px 14px; border-bottom: 3px solid transparent; }
.hub-tab i { font-style: normal; background: #c2410c; color: #fff; border-radius: 999px; font-size: 11px; padding: 1px 7px; margin-left: 4px; }
.hub-tab.on { color: #0a2f2c; border-bottom-color: #0f766e; } .hub-tab:hover { color: #0f766e; }
.hub-body { padding: 18px 20px 26px; flex: 1; }
.hub h3 { font-family: Fraunces, Georgia, serif; font-size: 17px; margin: 0 0 10px; letter-spacing: -.01em; font-weight: 600; display: flex; align-items: center; gap: 8px; }
.hub .kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-bottom: 18px; }
.hub .kpis.three { grid-template-columns: repeat(3, minmax(0, 1fr)); margin: 14px 0; }
.hub .kpi { background: #fff; border: 1px solid #dde7e4; border-radius: 12px; padding: 12px 14px; display: grid; gap: 2px; }
.hub .kpi b { font-family: Fraunces, Georgia, serif; font-size: 26px; line-height: 1.05; }
.hub .kpi span { font-size: 12.5px; color: #5a6b68; } .hub .kpi em { font-style: normal; font-size: 12px; color: #0f766e; font-weight: 600; }
.hub .kpi.bad b { color: #b42318; } .hub .kpi.good b { color: #0f766e; }
.hub .cols { display: grid; grid-template-columns: 1.4fr 1fr; gap: 20px; }
.hub ul { list-style: none; margin: 0; padding: 0; }
.hub .needs { display: grid; gap: 8px; }
.hub .needs li { background: #fff; border: 1px solid #dde7e4; border-left: 4px solid #3ddc97; border-radius: 10px; padding: 9px 12px; }
.hub .needs li.bad { border-left-color: #c2410c; } .hub .needs li.warn { border-left-color: #f2b33d; } .hub .needs li.ok { border-left-color: #3ddc97; color: #34504b; } .hub .needs li.good { border-left-color: #3ddc97; }
.hub .plain { display: grid; gap: 6px; } .hub .plain li { padding: 6px 0; border-bottom: 1px solid #e8eeec; } .hub .muted { color: #5a6b68; }
.hub .empty { color: #5a6b68; padding: 24px 6px; text-align: center; }
.hub .board { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.hub .lane { background: #f0f5f3; border: 1px solid #dde7e4; border-radius: 14px; padding: 10px; min-height: 240px; min-width: 0; }
.hub .count { background: #fff; border-radius: 999px; font-size: 11.5px; padding: 1px 8px; color: #5a6b68; font-family: Inter, sans-serif; font-weight: 700; }
.hub .pcard { background: #fff; border: 1px solid #dde7e4; border-radius: 12px; padding: 10px 11px; margin-bottom: 8px; }
.hub .pcard header { margin-bottom: 4px; }
.hub .hchips { display: flex; flex-wrap: wrap; gap: 5px; margin: 4px 0; }
.hub .hchip { font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 999px; background: #eef3f1; color: #34504b; white-space: nowrap; }
.hub .hchip.hot { background: #c2410c; color: #fff; } .hub .hchip.person { background: #fff1d6; color: #8a5a00; } .hub .hchip.owes { background: #ffe3de; color: #b42318; } .hub .hchip.merge { background: #e8eaff; color: #3b49c9; }
.hub .em { font-size: 12px; color: #5a6b68; margin: 2px 0; overflow-wrap: anywhere; } .hub .pnote { font-size: 13px; margin: 4px 0 6px; }
.hub footer { display: flex; flex-wrap: wrap; gap: 6px; }
.hub .mini { font: inherit; font-size: 12.5px; font-weight: 600; cursor: pointer; border: 1px solid #c4d6d2; background: #fff; color: #0a2f2c; border-radius: 999px; padding: 4px 11px; }
.hub .mini:hover:not(:disabled) { border-color: #0f766e; background: #e6f4f1; } .hub .mini:disabled { opacity: .5; cursor: not-allowed; }
.hub .hbtn { font: inherit; font-weight: 700; cursor: pointer; border: 0; background: #0f766e; color: #fff; border-radius: 999px; padding: 10px 16px; align-self: end; }
.hub .hbtn:hover { background: #0b4d48; }
.hub .row-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 12px; font-size: 13px; color: #34504b; }
.hub select, .hub input { font: inherit; border: 1px solid #c4d6d2; border-radius: 10px; padding: 8px 10px; background: #fff; color: #10201e; max-width: 100%; }
.hub .diary { display: grid; gap: 10px; }
.hub .appt, .hub .inv { background: #fff; border: 1px solid #dde7e4; border-radius: 12px; padding: 12px 14px; }
.hub .appt.noshow, .hub .inv.overdue { border-color: #efa9a0; } .hub .appt.attended, .hub .inv.paid { border-color: #9bd3c9; } .hub .appt.cancelled, .hub .inv.void { opacity: .65; }
.hub .appt-top { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; margin-bottom: 8px; } .hub .appt-top span { color: #34504b; } .hub .amt { font-weight: 800; color: #10201e !important; }
.hub .pill { font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: .05em; padding: 3px 10px; border-radius: 999px; background: #e8eaff; color: #3b49c9; }
.hub .pill.attended, .hub .pill.paid { background: #d9f5ec; color: #0b6b5d; } .hub .pill.noshow, .hub .pill.overdue { background: #ffe3de; color: #b42318; } .hub .pill.cancelled, .hub .pill.void { background: #eceeed; color: #5a6b68; } .hub .pill.sent { background: #e8eaff; color: #3b49c9; }
.hub .steps { display: flex; flex-wrap: wrap; gap: 6px; } .hub .step { font-size: 11.5px; padding: 2px 9px; border-radius: 999px; border: 1px solid #cfe0dc; color: #5a6b68; }
.hub .step.done { background: #d9f5ec; border-color: #9bd3c9; color: #0b6b5d; } .hub .step.wait { background: #e8eaff; border-color: #c7ccf5; color: #3b49c9; } .hub .step.skip { border-style: dashed; }
.hub .acts { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.hub .note-box { background: #e6f4f1; border: 1px solid #bfe0d9; border-radius: 12px; padding: 10px 14px; margin: 0 0 14px; font-size: 13.5px; color: #34504b; }
.hub .inv-form { display: grid; grid-template-columns: 1fr 1.4fr 1fr auto; gap: 10px; align-items: end; margin-bottom: 4px; } .hub .inv-form label { display: grid; gap: 4px; font-size: 12.5px; color: #34504b; font-weight: 600; }
.hub .report { background: #fff; border: 1px solid #dde7e4; border-radius: 14px; padding: 16px; } .hub .report.preview { outline: 2px dashed #f2b33d; outline-offset: 3px; } .hub .report header b { font-family: Fraunces, Georgia, serif; font-size: 18px; }
.hub .report header { margin-bottom: 12px; }
.hub .bars { display: grid; grid-template-columns: repeat(7, 1fr); gap: 8px; align-items: end; height: 110px; padding: 6px 4px 0; border-bottom: 1px solid #cfe0dc; margin-bottom: 4px; }
.hub .bar { position: relative; height: 100%; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; gap: 4px; } .hub .bar i { display: block; width: 66%; background: #0f766e; border-radius: 6px 6px 0 0; min-height: 3px; } .hub .bar b { font-size: 12px; color: #5a6b68; } .hub .bar span { position: absolute; bottom: -22px; font-size: 11.5px; color: #5a6b68; }
.hub .report .needs { margin-top: 30px; }
.hub .activity { display: grid; gap: 6px; max-height: 560px; overflow: auto; }
.hub .activity li { background: #fff; border: 1px solid #e3ebe8; border-left: 4px solid #cfe0dc; border-radius: 10px; padding: 7px 11px; display: grid; gap: 1px; }
.hub .activity li.good, .hub .activity li.ok { border-left-color: #3ddc97; } .hub .activity li.warn { border-left-color: #f2b33d; } .hub .activity li.bad { border-left-color: #c2410c; } .hub .activity li.muted { color: #5a6b68; }
.hub .activity time { font-size: 11px; color: #7a8a87; }


@container (max-width: 760px) {
  .hub .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .hub .cols { grid-template-columns: 1fr; }
  .hub .inv-form { grid-template-columns: 1fr 1fr; }
  .hub .hbtn { grid-column: 1 / -1; }
  .hub .board { grid-template-columns: 1fr; }
  .hub .lane { min-height: 0; }
}
@container (max-width: 480px) {
  .hub .inv-form { grid-template-columns: 1fr; }
  .hub-body { padding: 14px 12px 22px; }
}
@media (prefers-reduced-motion: reduce) { .ph-msg { animation: none; } }
