/* Portal pages: families landing, news timeline, newsletter form, doctor console */
.portal .p-intro{color:#6b7280;margin:-6px 0 20px}
.portal .p-muted{color:#6b7280}
.portal .p-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin:8px 0 20px}
.portal .p-card{display:block;border:1px solid #dbe7ee;border-radius:12px;padding:18px 20px;background:#fff;text-decoration:none;color:#1f2937;transition:border-color .15s,box-shadow .15s}
.portal .p-card:hover{border-color:#0f97c4;box-shadow:0 4px 14px rgba(15,151,196,.12)}
.portal .p-card .ic{font-size:1.6rem;line-height:1;margin-bottom:8px}
.portal .p-card h3{margin:0 0 6px;color:#0a7096;font-size:1.05rem}
.portal .p-card p{margin:0;font-size:.92rem;color:#4b5563}
.portal .p-card .tag{display:inline-block;margin-top:10px;font-size:.78rem;color:#0a7096;font-weight:600}
.portal .btn{font:inherit;border:1px solid #dbe7ee;background:#fff;padding:9px 16px;border-radius:999px;cursor:pointer;color:#1f2937;text-decoration:none;display:inline-block;line-height:1.3}
.portal .btn.primary{background:#0f97c4;border-color:#0f97c4;color:#fff;font-weight:600}
.portal .btn.danger{color:#991b1b;border-color:#fecaca}
.portal .btn:hover{border-color:#0f97c4}
.portal .btn:disabled{opacity:.5;cursor:default}
.portal .btn.small{padding:5px 11px;font-size:.85rem}
.portal .msg{border-radius:8px;padding:10px 14px;margin:10px 0;font-size:.95rem}
.portal .msg.ok{background:#ecfdf5;border:1px solid #a7f3d0;color:#065f46}
.portal .msg.err{background:#fef2f2;border:1px solid #fecaca;color:#991b1b}
.portal .msg.info{background:#eef7fb;border:1px solid #dbe7ee;color:#0a7096}
/* news timeline */
.portal .p-news{margin-top:6px}
.portal .p-post{position:relative;border:1px solid #dbe7ee;border-radius:12px;padding:16px 20px;margin:0 0 14px;background:#fff}
.portal .p-post.pinned{border-color:#0f97c4;background:#f6fbfe}
.portal .p-post .date{font-size:.82rem;color:#6b7280;font-variant-numeric:tabular-nums}
.portal .p-post .pin{float:right;font-size:.75rem;background:#0f97c4;color:#fff;border-radius:999px;padding:2px 9px;font-weight:600}
.portal .p-post h3{margin:4px 0 6px;font-size:1.1rem;color:#0a7096}
.portal .p-post .body{white-space:pre-wrap;font-size:.98rem}
.portal .p-post .body a{word-break:break-all}
.portal .p-empty{color:#6b7280;padding:12px 0}
/* newsletter form */
.nl-box{margin:8px 0 20px}
.nl-form{display:grid;gap:14px;max-width:520px;margin-top:14px}
.nl-form label{display:block;font-weight:600;font-size:.95rem}
.nl-form input[type=email],.nl-form input[type=date],.nl-form input.date{display:block;width:100%;margin-top:6px;font:inherit;padding:10px 12px;border:1px solid #d1d5db;border-radius:8px;background:#fff}
.nl-form .nl-consent{font-weight:400;font-size:.9rem;display:flex;gap:10px;align-items:flex-start;color:#4b5563}
.nl-form .nl-consent input{margin-top:5px}
.nl-form .nl-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.nl-form .nl-msg{margin:0;min-height:1.4em;font-size:.95rem}
.nl-form .nl-msg.ok{color:#065f46}.nl-form .nl-msg.err{color:#991b1b}
/* console */
.pc section{border:1px solid #dbe7ee;border-radius:12px;padding:20px 22px;margin:0 0 18px;background:#fff}
.pc section h2{margin:0 0 4px;font-size:1.2rem;color:#0a7096}
.pc section .hint{color:#6b7280;font-size:.9rem;margin:0 0 14px}
.pc .row{display:flex;flex-wrap:wrap;gap:12px 18px;align-items:flex-end;margin:10px 0}
.pc label{font-size:.85rem;color:#4b5563;display:block}
.pc label span{display:block;margin-bottom:4px;font-weight:600}
.pc input[type=text],.pc input[type=date],.pc input[type=number],.pc input[type=password],.pc textarea,.pc select{font:inherit;font-size:.95rem;padding:8px 10px;border:1px solid #d1d5db;border-radius:8px;background:#fff;min-width:0}
.pc input[type=number]{width:110px}
.pc input[type=date]{width:160px}
.pc input.date{width:130px}
.pc input.bad,.nl-form input.bad{border-color:#dc2626;background:#fef2f2}
.pc textarea{width:100%;min-height:70px}
.pc .radios{display:flex;gap:14px;align-items:center;padding:8px 0}
.pc .radios label{display:inline-flex;gap:6px;align-items:center;font-size:.95rem;color:#1f2937}
.pc table.mrows{border-collapse:collapse;width:100%;margin:8px 0}
.pc table.mrows th{font-size:.8rem;color:#6b7280;text-align:left;padding:4px 6px;font-weight:600}
.pc table.mrows td{padding:4px 6px;vertical-align:middle}
.pc table.mrows td small{color:#6b7280;font-size:.78rem;display:block;white-space:nowrap}
.pc table.mrows input{width:100%;max-width:150px}
.pc table.mrows input.num{width:110px}
.pc .qrwrap{display:grid;grid-template-columns:auto 1fr;gap:20px;align-items:start;margin-top:14px}
.pc .qrwrap .qr svg{width:220px;height:220px;display:block;border:1px solid #dbe7ee;border-radius:8px;padding:6px;background:#fff}
.pc .linkbox{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;word-break:break-all;background:#f2f7fa;border:1px solid #dbe7ee;border-radius:8px;padding:10px 12px;max-height:120px;overflow:auto}
.pc .meter{font-size:.85rem;color:#6b7280;margin:6px 0}
.pc .meter b.warn{color:#b45309}
.pc details{margin-top:10px}
.pc details summary{cursor:pointer;font-weight:600;color:#0a7096}
.pc pre{background:#0b2a36;color:#d8eef7;padding:14px 16px;border-radius:8px;overflow:auto;font-size:.8rem;line-height:1.45}
.pc .posts-admin .p-post{padding:12px 16px}
.pc .posts-admin .actions{margin-top:8px;display:flex;gap:8px;flex-wrap:wrap}
.pc .status{font-size:.9rem;display:inline-flex;gap:8px;align-items:center;flex-wrap:wrap}
.pc .status .dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:#d1d5db}
.pc .status .dot.on{background:#0e7a4f}.pc .status .dot.off{background:#dc2626}
.pc .tokenbox{background:#eef7fb;border:1px solid #dbe7ee;border-radius:8px;padding:12px 14px;margin-top:10px}
@media(max-width:700px){.pc .qrwrap{grid-template-columns:1fr}.pc section{padding:16px}}
/* printable QR card */
.pc-card{display:none}
@media print{
 body{background:#fff}
 .site-head,.nav,.site-foot,.pc,.portal>*:not(.pc-card){display:none !important}
 main{padding:0}.card{border:0;padding:0}
 .pc-card{display:block !important;width:100mm;border:1px solid #999;border-radius:6mm;padding:8mm;text-align:center;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;page-break-inside:avoid}
 .pc-card h2{margin:0 0 2mm;font-size:13pt;color:#0a7096}
 .pc-card .sub{font-size:9pt;color:#555;margin:0 0 4mm}
 .pc-card svg{width:70mm;height:70mm}
 .pc-card .alias{font-size:12pt;font-weight:700;margin:3mm 0 1mm}
 .pc-card .howto{font-size:8.5pt;color:#333;margin:2mm 0 0;line-height:1.35}
 .pc-card .url{font-size:7pt;color:#777;word-break:break-all;margin-top:2mm}
}
