/* Portal layout uses the same Vuexy variables, card-body, form and button sizes as staff.
 * Gutters: container/navbar-detached 1.5rem desktop, 1rem below lg.
 * Spacing: original g/p/m-1..6 utility scale. No nested panel/control overrides.
 */
.portal-app { min-height:100vh; display:flex; flex-direction:column; }
.portal-header { background:var(--bs-paper-bg); box-shadow:var(--bs-box-shadow-sm); }
.portal-header-inner { max-width:1440px; margin:auto; padding:1rem 1.5rem; display:flex; align-items:center; gap:1.5rem; }
.portal-header img { width:10rem; height:auto; display:block; }
.portal-brand-caption { display:flex; flex-direction:column; gap:.25rem; flex:1; }
.portal-brand-caption strong { font-size:.9375rem; font-weight:500; color:var(--bs-heading-color); }
.portal-brand-caption span { font-size:.8125rem; }
.portal-header-actions { display:flex; align-items:center; gap:.75rem; }
.portal-app a { color:var(--brand-blue-dark); text-decoration:none; }
.portal-public-link { display:flex; gap:.5rem; align-items:center; font-size:.8125rem; white-space:nowrap; }
.portal-menu { margin:0; background:var(--bs-paper-bg); border-top:1px solid var(--bs-border-color); }
.portal-menu>summary { display:none; }
.portal-navigation { max-width:1440px; padding:.5rem 1.5rem; margin:auto; display:flex; gap:.375rem; flex-wrap:wrap; align-items:center; }
.portal-navigation a,.portal-navigation button { display:flex; align-items:center; gap:.5rem; padding:.5rem .75rem; border-radius:var(--bs-border-radius); font:inherit; color:var(--bs-heading-color); background:transparent; border:0; cursor:pointer; text-decoration:none; }
.portal-navigation a:hover,.portal-navigation button:hover { background:var(--bs-gray-50); }
.portal-navigation [aria-current=page] { background:var(--brand-blue-soft); color:var(--brand-blue-dark); font-weight:500; }
.portal-navigation form { margin:0; margin-inline-start:auto; }
.portal-shell { flex:1 1 auto; width:100%; max-width:1440px; padding:1.5rem; margin:0 auto; }
.portal-content .hero { background:var(--brand-blue-soft); }
.portal-content .grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:1.5rem; }
.portal-content .grid>.card { margin:0; }
.portal-content .row { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:1.5rem; }
.portal-content figure { display:inline-block; margin:.5rem; }
.portal-content figure img { width:130px; height:130px; object-fit:contain; border:1px solid var(--bs-border-color); border-radius:var(--bs-border-radius); padding:.25rem; background:var(--bs-paper-bg); }
.portal-content .narrow { max-width:640px; margin-inline:auto; }
.portal-content .request-document-links { display:flex; flex-wrap:wrap; gap:.5rem; }
.portal-content .portal-timeline { padding-inline-start:1.5rem; border-inline-start:1px solid var(--bs-border-color); }
.portal-content .portal-timeline li { position:relative; margin-block:1.5rem; list-style:none; }
.portal-content .portal-timeline li::before { content:''; width:.5rem; height:.5rem; border-radius:50%; position:absolute; inset-inline-start:calc(-1.5rem - .25rem); top:.5rem; background:var(--bs-primary); }
.portal-content .portal-timeline time { display:block; font-size:.8125rem; margin-top:.25rem; }
.portal-content .portal-chat { display:flex; flex-direction:column; gap:1rem; margin-block:1.5rem; }
.portal-content .portal-message { background:var(--bs-paper-bg); border-radius:var(--bs-border-radius); box-shadow:var(--bs-box-shadow-xs); padding:.75rem 1rem; max-width:85%; }
.portal-content .portal-message.incoming { align-self:flex-start; }
.portal-content .portal-message.outgoing { align-self:flex-end; background:var(--brand-blue-soft); }
.portal-content .portal-message p { margin-block:.5rem 0; }
.portal-footer { display:flex; justify-content:center; align-items:center; flex-wrap:wrap; gap:.75rem 1rem; padding:1.5rem; font-size:.8125rem; }
.portal-guest .portal-shell { padding-top:1rem; }
.portal-app .skip { position:absolute; inset-block-start:-100px; inset-inline-start:1rem; padding:.75rem; background:var(--bs-paper-bg); z-index:200; }
.portal-app .skip:focus { inset-block-start:1rem; }
.portal-content .card>.badge,.portal-content .card>.button { align-self:flex-start; }
.portal-content .grid .card>strong { font-size:1.75rem; line-height:1.37; color:var(--bs-heading-color); font-weight:500; }
@media(max-width:991.98px) {
 .portal-header-inner,.portal-shell { padding-inline:1rem; }
 .portal-brand-caption span { display:none; }
 .portal-menu>summary { display:flex; align-items:center; gap:.5rem; padding:.75rem 1rem; cursor:pointer; list-style:none; }
 .portal-menu>summary::-webkit-details-marker { display:none; }
 .portal-menu>summary .ti:last-child { margin-inline-start:auto; }
 .portal-navigation { padding:.5rem 1rem 1rem; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:.5rem; }
 .portal-navigation form { margin:0; }
 .portal-navigation button { width:100%; }
}
@media(max-width:575.98px) {
 .portal-header-inner { gap:.75rem; flex-wrap:wrap; }
 .portal-header img { width:7.5rem; }
 .portal-header-actions { margin-inline-start:auto; gap:.5rem; }
 .portal-brand-caption { flex-basis:100%; order:3; }
 .portal-public-link span { display:none; }
 .portal-content .grid { grid-template-columns:1fr; }
 .portal-content .row { gap:1rem; }
 .portal-content .portal-message { max-width:95%; }
}
@media print { .portal-header,.portal-menu,.portal-footer { display:none; } .portal-shell { padding:0; } }
