.portal-page{min-height:100vh;display:flex;flex-direction:column}.portal-topbar{display:flex;align-items:center;justify-content:space-between;padding:18px 32px;border-bottom:1px solid var(--df-border);background:var(--df-surface);position:-webkit-sticky;position:sticky;top:0;z-index:5}.portal-topbar-brand{font-family:var(--df-font-display);font-weight:800;font-size:1.1rem;color:var(--df-navy);letter-spacing:-.02em}.portal-topbar-nav{display:flex;gap:8px;align-items:center}.portal-container{width:100%;max-width:1040px;margin:0 auto;padding:40px 32px 80px;flex:1 1}.landing-hero{text-align:center;padding:60px 0 40px;animation:df-fade-up var(--df-dur-base) var(--df-ease)}.landing-hero .eyebrow{display:block;margin-bottom:14px}.landing-hero h1{font-size:clamp(2.2rem,5vw,3.25rem);line-height:1.05;margin-bottom:18px}.landing-hero p{max-width:56ch;margin:0 auto 28px;font-size:1.1rem;color:var(--df-fg-subtle)}.landing-cta-row{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}.landing-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));grid-gap:18px;gap:18px;margin-top:56px}.landing-step{padding:22px;border:1px solid var(--df-border);border-radius:var(--df-radius-lg);background:var(--df-surface);box-shadow:var(--df-shadow-sm)}.landing-step-num{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;background:var(--df-sky-50);color:var(--df-blue);font-family:var(--df-font-display);font-weight:700;font-size:.85rem;margin-bottom:12px}.landing-step h3{font-size:1.05rem;margin-bottom:6px}.landing-step p{font-size:.9rem;color:var(--df-fg-subtle);line-height:1.5}.portal-header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:28px}.portal-header h1{font-size:1.9rem;margin-bottom:6px}.portal-header .sub{color:var(--df-fg-subtle);font-size:.95rem}.welcome-banner{display:flex;gap:14px;align-items:flex-start;padding:16px 18px;border-radius:var(--df-radius-md);background:var(--df-success-soft);border:1px solid #a7f3d0;margin-bottom:26px;animation:df-fade-up var(--df-dur-base) var(--df-ease)}.welcome-banner-icon{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;background:var(--df-success);color:#fff;flex-shrink:0}.welcome-banner strong{font-family:var(--df-font-display);color:#065f46;display:block;margin-bottom:2px}.welcome-banner p{font-size:.88rem;color:#047857}.portal-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));grid-gap:18px;gap:18px}.portal-card{border:1px solid var(--df-border);border-radius:var(--df-radius-lg);background:var(--df-surface);box-shadow:var(--df-shadow-sm);padding:22px}.portal-card-head{display:flex;align-items:center;gap:10px;margin-bottom:16px}.portal-card-head h2{font-size:1.05rem}.portal-card-icon{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:var(--df-radius-sm);background:var(--df-sky-50);color:var(--df-blue)}.status-list{display:flex;flex-direction:column;gap:2px}.status-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 0;border-bottom:1px solid var(--df-border)}.status-row:last-child{border-bottom:0}.status-row-label{font-size:.9rem;color:var(--df-fg)}.status-row-detail{font-size:.78rem;color:var(--df-slate-400);margin-top:2px}.qa-meter{height:8px;background:var(--df-border);overflow:hidden;margin-bottom:16px}.qa-meter,.qa-meter-bar{border-radius:var(--df-radius-pill)}.qa-meter-bar{height:100%;background:linear-gradient(90deg,var(--df-blue),var(--df-green))}.qa-check{display:flex;align-items:center;gap:10px;padding:8px 0;font-size:.88rem}.qa-check .tick{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;flex-shrink:0}.qa-check .tick.done{background:var(--df-success);color:#fff}.qa-check .tick.todo{border:2px solid var(--df-border-strong)}.qa-check.done .label{color:var(--df-fg-subtle)}.summary-dl{margin:0;display:grid;grid-gap:0;gap:0}.summary-dl>div{display:grid;grid-template-columns:180px 1fr;grid-gap:14px;gap:14px;padding:9px 0;border-bottom:1px solid var(--df-border);font-size:.88rem}.summary-dl>div:last-child{border-bottom:0}.summary-dl dt{color:var(--df-fg-subtle);font-weight:500}.summary-dl dd{margin:0;color:var(--df-fg)}.card-span-2{grid-column:1/-1}.client-table{width:100%;border-collapse:collapse;background:var(--df-surface);border:1px solid var(--df-border);border-radius:var(--df-radius-lg);overflow:hidden}.client-table th{text-align:left;font-family:var(--df-font-display);font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--df-slate);background:var(--df-off-white)}.client-table td,.client-table th{padding:14px 16px;border-bottom:1px solid var(--df-border)}.client-table td{font-size:.9rem;color:var(--df-fg)}.client-table tr:last-child td{border-bottom:0}.client-table tbody tr{transition:background var(--df-dur-fast) var(--df-ease)}.client-table tbody tr:hover{background:var(--df-sky-50)}.client-table a{color:var(--df-blue-700);font-weight:600}.client-name{font-weight:600;color:var(--df-fg)}.client-sub{font-size:.78rem;color:var(--df-slate-400)}.mini-meter{display:inline-flex;align-items:center;gap:8px}.mini-meter-track{width:70px;height:6px;border-radius:var(--df-radius-pill);background:var(--df-border);overflow:hidden}.mini-meter-fill{height:100%;background:var(--df-blue)}.empty-state{text-align:center;padding:70px 20px;border:1px dashed var(--df-border-strong);border-radius:var(--df-radius-lg);background:var(--df-surface)}.empty-state h2{font-size:1.2rem;margin-bottom:8px}.empty-state p{color:var(--df-fg-subtle);margin-bottom:20px}.metric-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));grid-gap:14px;gap:14px;margin-bottom:26px}.metric{padding:18px 20px;border:1px solid var(--df-border);border-radius:var(--df-radius-md);background:var(--df-surface)}.metric-value{font-family:var(--df-font-display);font-size:1.8rem;font-weight:700;color:var(--df-navy);line-height:1}.metric-label{font-size:.8rem;color:var(--df-fg-subtle);margin-top:6px}@media (max-width:640px){.portal-container{padding:28px 18px 60px}.portal-topbar{padding:14px 18px}.client-table thead,.summary-dl>div{grid-template-columns:1fr}.client-table,.client-table tbody,.client-table td,.client-table th,.client-table thead,.client-table tr{display:block}.client-table thead{display:none}.client-table td{border-bottom:0}.client-table tr{border-bottom:1px solid var(--df-border);padding:8px 0}}.thread{display:flex;flex-direction:column}.thread-item{max-width:78%;padding:12px 14px;border-radius:14px;margin:6px 0;font-size:.92rem}.thread-in{background:var(--df-sky-50,#eff6ff);border:1px solid var(--df-sky,#dbeafe);align-self:flex-start}.thread-out{border:1px solid var(--df-border);align-self:flex-end}.thread-out,.thread-sys{background:var(--df-surface)}.thread-sys{border:1px dashed var(--df-border-strong,#cbd5e1);max-width:100%;align-self:stretch}.thread-meta{display:flex;justify-content:space-between;gap:10px;font-size:.74rem;color:var(--df-slate,#64748b);margin-bottom:4px;text-transform:capitalize}.thread-when{white-space:nowrap;color:var(--df-slate-400,#94a3b8)}.thread-body{color:var(--df-charcoal,#1e293b);word-break:break-word;white-space:pre-wrap}.thread-direction{display:inline-block;font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--df-blue,#2563eb);background:var(--df-sky-50,#eff6ff);border:1px solid var(--df-sky,#dbeafe);border-radius:999px;padding:1px 8px}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));grid-gap:14px;gap:14px;margin-bottom:32px}.stat{background:var(--df-surface);border:1px solid var(--df-border);border-radius:14px;padding:16px 18px;display:flex;flex-direction:column;gap:4px}.stat-value{font-family:var(--df-font-display);font-weight:800;font-size:1.7rem;color:var(--df-navy);line-height:1}.stat-label{font-size:.8rem;color:var(--df-slate,#64748b)}.dash-section{margin-bottom:32px}.dash-section h2{font-size:1.05rem;margin:0 0 12px}.activity-list{list-style:none;margin:0;padding:0;background:var(--df-surface);border:1px solid var(--df-border);border-radius:14px}.activity-list li{display:flex;justify-content:space-between;gap:12px;padding:11px 16px;border-bottom:1px solid var(--df-border);font-size:.92rem}.activity-list li:last-child{border-bottom:0}