:root{--portal-accent:#0d9488;--portal-accent-soft:#0d94881a;--portal-accent-hover:#0f766e;--portal-accent-text:#fff;--portal-bottom-bar-height:56px;--portal-topbar-height:56px}html.dark{--portal-accent:#2dd4bf;--portal-accent-soft:#2dd4bf1f;--portal-accent-hover:#5eead4;--portal-accent-text:#0a0a0a}.portal-layout{background:var(--bg);min-height:100vh;color:var(--text);flex-direction:column;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;display:flex}.portal-main{padding:16px;padding-bottom:calc(var(--portal-bottom-bar-height) + 24px);flex:1;width:100%;max-width:800px;margin:0 auto}@media (width>=768px){.portal-main{padding:24px 32px 32px}}.portal-topbar{height:var(--portal-topbar-height);background:var(--card);border-bottom:1px solid var(--border);z-index:100;justify-content:space-between;align-items:center;padding:0 16px;display:flex;position:sticky;top:0}.portal-topbar-logo{color:var(--portal-accent);align-items:center;gap:8px;font-size:1rem;font-weight:700;text-decoration:none;display:flex}.portal-topbar-logo img{border-radius:var(--radius-sm);width:28px;height:28px}.portal-topbar-actions{align-items:center;gap:8px;display:flex}.portal-topbar-btn{border-radius:var(--radius-sm);width:44px;height:44px;color:var(--text-secondary);cursor:pointer;transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border:none;justify-content:center;align-items:center;font-size:1.25rem;display:flex;position:relative}.portal-topbar-btn:hover{background:var(--bg-soft);color:var(--text)}.portal-topbar-badge{background:var(--danger);border-radius:50%;width:8px;height:8px;position:absolute;top:4px;right:4px}.portal-desktop-tabs{background:var(--card);border-bottom:1px solid var(--border);padding:0 16px;display:none;overflow-x:auto}@media (width>=768px){.portal-desktop-tabs{gap:0;display:flex}}.portal-desktop-tab{color:var(--muted);cursor:pointer;white-space:nowrap;transition:color var(--transition-fast), border-color var(--transition-fast);background:0 0;border:none;border-bottom:2px solid #0000;padding:12px 16px;font-size:.85rem;font-weight:500}.portal-desktop-tab:hover{color:var(--text)}.portal-desktop-tab.active{color:var(--portal-accent);border-bottom-color:var(--portal-accent);font-weight:600}.portal-bottom-tabs{height:var(--portal-bottom-bar-height);background:var(--card);border-top:1px solid var(--border);z-index:100;padding-bottom:env(safe-area-inset-bottom,0px);justify-content:space-around;align-items:center;display:flex;position:fixed;bottom:0;left:0;right:0}@media (width>=768px){.portal-bottom-tabs{display:none}}.portal-bottom-tab{color:var(--muted);cursor:pointer;transition:color var(--transition-fast);background:0 0;border:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:3px;padding:8px 0;font-size:.72rem;font-weight:500;text-decoration:none;display:flex}.portal-bottom-tab i{font-size:1.3rem}.portal-bottom-tab:hover,.portal-bottom-tab.active{color:var(--portal-accent)}.portal-bottom-tab.active i{transform:scale(1.1)}.portal-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);transition:box-shadow var(--transition-fast);margin-bottom:12px;padding:16px}.portal-card:hover{box-shadow:var(--shadow)}.portal-card-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.portal-card-title{font-size:var(--type-title-sm);color:var(--text);font-weight:600}.portal-card-icon{border-radius:var(--radius-sm);justify-content:center;align-items:center;width:36px;height:36px;font-size:1rem;display:flex}.portal-card-value{color:var(--text);margin-bottom:4px;font-size:1.5rem;font-weight:700}.portal-card-label{font-size:var(--type-body-sm);color:var(--muted)}.portal-dashboard-grid{grid-template-columns:1fr;gap:12px;display:grid}@media (width>=480px){.portal-dashboard-grid{grid-template-columns:1fr 1fr}}.portal-dashboard-welcome{margin-bottom:20px}.portal-dashboard-welcome h1{font-size:var(--type-title-lg);margin:0 0 4px;font-weight:700}.portal-dashboard-welcome p{font-size:var(--type-body);color:var(--muted);margin:0}.portal-status-badge{font-size:var(--type-kicker);letter-spacing:var(--type-kicker-spacing);text-transform:uppercase;border-radius:9999px;align-items:center;gap:4px;padding:2px 8px;font-weight:600;display:inline-flex}.portal-status-badge.paid{background:var(--tl-green-bg);color:var(--tl-green-text)}.portal-status-badge.partial{background:var(--tl-yellow-bg);color:var(--tl-yellow-text)}.portal-status-badge.overdue{background:var(--tl-red-bg);color:var(--tl-red-text)}.portal-status-badge.open,.portal-status-badge.unavailable{background:var(--tl-neutral-bg);color:var(--tl-neutral-text)}.portal-timeline{padding-left:24px;position:relative}.portal-timeline:before{content:"";background:var(--border);width:2px;position:absolute;top:0;bottom:0;left:7px}.portal-timeline-step{padding-bottom:16px;position:relative}.portal-timeline-step:last-child{padding-bottom:0}.portal-timeline-dot{background:var(--border);border:2px solid var(--card);border-radius:50%;width:12px;height:12px;position:absolute;top:2px;left:-20px}.portal-timeline-step.completed .portal-timeline-dot{background:var(--portal-accent)}.portal-timeline-step.active .portal-timeline-dot{background:var(--portal-accent);box-shadow:0 0 0 3px var(--portal-accent-soft)}.portal-timeline-label{font-size:var(--type-body-sm);color:var(--text);font-weight:600}.portal-timeline-date{font-size:var(--type-kicker);color:var(--muted);margin-top:2px}.portal-auth-container{background:var(--bg);justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.portal-auth-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;max-width:400px;box-shadow:var(--shadow-md);padding:32px}.portal-auth-title{font-size:var(--type-title-lg);text-align:center;color:var(--text);margin:0 0 8px;font-weight:700}.portal-auth-subtitle{font-size:var(--type-body);text-align:center;color:var(--muted);margin:0 0 24px}.portal-auth-logo{color:var(--portal-accent);justify-content:center;margin-bottom:24px;font-size:2rem;display:flex}.portal-form-group{margin-bottom:16px}.portal-form-label{font-size:var(--type-body-sm);color:var(--text-secondary);margin-bottom:6px;font-weight:500;display:block}.portal-form-input{width:100%;font-size:var(--type-body);background:var(--input-bg);border:1px solid var(--input-border);border-radius:var(--radius-sm);color:var(--text);transition:border-color var(--transition-fast);box-sizing:border-box;outline:none;padding:10px 12px}.portal-form-input:focus{border-color:var(--portal-accent);box-shadow:0 0 0 2px var(--portal-accent-soft)}@media (width<=768px){.portal-form-input,.portal-layout input:not([type=checkbox]):not([type=radio]),.portal-layout select,.portal-layout textarea{min-height:44px;font-size:16px}}.portal-layout button:focus-visible,.portal-layout a:focus-visible,.portal-layout select:focus-visible,.portal-layout input:focus-visible,.portal-layout textarea:focus-visible{outline:2px solid var(--portal-accent);outline-offset:2px;border-radius:var(--radius-sm)}.portal-form-textarea{width:100%;font-size:var(--type-body);background:var(--input-bg);border:1px solid var(--input-border);border-radius:var(--radius-sm);color:var(--text);resize:vertical;box-sizing:border-box;min-height:80px;transition:border-color var(--transition-fast);outline:none;padding:10px 12px;font-family:inherit}.portal-form-textarea:focus{border-color:var(--portal-accent);box-shadow:0 0 0 2px var(--portal-accent-soft)}.portal-form-select{width:100%;font-size:var(--type-body);background:var(--input-bg);border:1px solid var(--input-border);border-radius:var(--radius-sm);color:var(--text);box-sizing:border-box;cursor:pointer;outline:none;padding:10px 12px}.portal-form-select:focus{border-color:var(--portal-accent)}.portal-btn{font-size:var(--type-body);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition-fast), opacity var(--transition-fast);border:none;justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-family:inherit;font-weight:600;display:inline-flex}.portal-btn:disabled{opacity:.5;cursor:not-allowed}.portal-btn-primary{background:var(--portal-accent);color:var(--portal-accent-text)}.portal-btn-primary:hover:not(:disabled){background:var(--portal-accent-hover)}.portal-btn-secondary{background:var(--bg-soft);color:var(--text);border:1px solid var(--border)}.portal-btn-secondary:hover:not(:disabled){background:var(--border)}.portal-btn-danger{background:var(--danger);color:#fff}.portal-btn-danger:hover:not(:disabled){opacity:.9}.portal-btn-ghost{color:var(--portal-accent);background:0 0;padding:8px 12px}.portal-btn-ghost:hover:not(:disabled){background:var(--portal-accent-soft)}.portal-btn-block{width:100%}.portal-tabs{border-bottom:1px solid var(--border);margin-bottom:20px;display:flex}.portal-tab{text-align:center;font-size:var(--type-body);color:var(--muted);cursor:pointer;transition:color var(--transition-fast), border-color var(--transition-fast);background:0 0;border:none;border-bottom:2px solid #0000;flex:1;padding:10px;font-weight:500}.portal-tab.active{color:var(--portal-accent);border-bottom-color:var(--portal-accent)}.portal-alert{border-radius:var(--radius-sm);font-size:var(--type-body-sm);margin-bottom:16px;padding:10px 14px}.portal-alert-error{background:var(--danger-soft);color:var(--danger-on-soft)}.portal-alert-success{background:var(--success-soft);color:var(--success-on-soft)}.portal-alert-info{background:var(--info-soft);color:var(--info-text)}.portal-alert .portal-alert-retry{font-size:var(--type-body-sm);margin-top:8px;padding:6px 12px;display:block}.portal-form-error{background:var(--danger);color:#fff;border-radius:var(--radius-sm);font-size:var(--type-body-sm);margin-bottom:12px;padding:10px 14px}.portal-form-input[aria-invalid=true],.portal-form-textarea[aria-invalid=true],.portal-form-select[aria-invalid=true]{border-color:var(--danger)}.portal-form-label.field-error{color:var(--danger)}.portal-field-error-text{color:var(--danger);margin-top:4px;font-size:.72rem;animation:.2s portal-field-error-enter;display:block}@keyframes portal-field-error-enter{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.portal-lang-select{font-size:var(--type-body-sm);background:var(--input-bg);border:1px solid var(--input-border);border-radius:var(--radius-sm);color:var(--text);cursor:pointer;padding:4px 8px}.portal-profile-menu{position:relative}.portal-profile-dropdown{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-md);z-index:110;min-width:160px;margin-top:4px;position:absolute;top:100%;right:0;overflow:hidden}.portal-profile-dropdown-item{width:100%;font-size:var(--type-body-sm);color:var(--text);text-align:left;cursor:pointer;transition:background var(--transition-fast);background:0 0;border:none;padding:10px 14px;display:block}.portal-profile-dropdown-item:hover{background:var(--bg-soft)}.portal-profile-dropdown-item.danger{color:var(--danger)}.portal-announcement{background:var(--info-bg);border:1px solid var(--info);border-radius:var(--radius);margin-bottom:8px;padding:12px 16px}.portal-announcement.pinned{border-color:var(--portal-accent);background:var(--portal-accent-soft)}.portal-announcement-title{font-weight:600;font-size:var(--type-body);margin-bottom:4px}.portal-announcement-body{font-size:var(--type-body-sm);color:var(--text-secondary)}.portal-announcement-date{font-size:var(--type-kicker);color:var(--muted);margin-top:6px}.portal-emergency-card{background:var(--danger-soft);border:1px solid var(--danger);border-radius:var(--radius);align-items:center;gap:12px;margin-bottom:8px;padding:12px;display:flex}.portal-emergency-icon{background:var(--danger);color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;font-size:1.1rem;display:flex}.portal-emergency-info{flex:1}.portal-emergency-name{font-weight:600;font-size:var(--type-body)}.portal-emergency-role{font-size:var(--type-body-sm);color:var(--muted)}.portal-emergency-call{background:var(--danger);color:#fff;border-radius:var(--radius-sm);font-size:var(--type-body-sm);cursor:pointer;border:none;align-items:center;gap:6px;padding:8px 14px;font-weight:600;text-decoration:none;display:inline-flex}.portal-empty{text-align:center;color:var(--muted);padding:48px 24px}.portal-empty-icon{opacity:.4;margin-bottom:12px;font-size:2.5rem}.portal-empty-text{font-size:var(--type-body)}.portal-section-header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.portal-section-title{font-size:var(--type-title-md);color:var(--text);margin:0;font-weight:700}.portal-more-grid{grid-template-columns:repeat(3,1fr);gap:12px;display:grid}.portal-more-item{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;color:var(--text);transition:box-shadow var(--transition-fast);border-style:none;flex-direction:column;align-items:center;gap:8px;padding:16px 8px;font-family:inherit;display:flex}.portal-more-item:hover{box-shadow:var(--shadow)}.portal-more-item i{color:var(--portal-accent);font-size:1.4rem}.portal-more-item span{font-size:var(--type-body-sm);font-weight:500}.portal-photo-upload{border:2px dashed var(--border);border-radius:var(--radius);cursor:pointer;color:var(--muted);transition:border-color var(--transition-fast);justify-content:center;align-items:center;padding:24px;display:flex}.portal-photo-upload:hover{border-color:var(--portal-accent)}.portal-photo-preview{flex-wrap:wrap;gap:8px;margin-top:8px;display:flex}.portal-photo-thumb{border-radius:var(--radius-sm);object-fit:cover;border:1px solid var(--border);width:64px;height:64px}.portal-landlord-list{flex-direction:column;gap:8px;margin-top:16px;display:flex}.portal-landlord-option{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:border-color var(--transition-fast);text-align:left;font-family:inherit;font-size:var(--type-body);color:var(--text);width:100%;padding:12px}.portal-landlord-option:hover{border-color:var(--portal-accent)}.portal-message-list{flex-direction:column;gap:8px;display:flex}.portal-message-item{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:box-shadow var(--transition-fast);padding:12px}.portal-message-item:hover{box-shadow:var(--shadow)}.portal-message-item.unread{border-left:3px solid var(--portal-accent)}.portal-message-subject{font-weight:600;font-size:var(--type-body);color:var(--text);margin-bottom:4px}.portal-message-preview{font-size:var(--type-body-sm);color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.portal-message-meta{font-size:var(--type-kicker);color:var(--muted);justify-content:space-between;align-items:center;margin-top:6px;display:flex}.portal-message-direction{font-weight:500}.portal-thread{flex-direction:column;gap:12px;margin-bottom:16px;display:flex}.portal-thread-msg{border-radius:var(--radius);max-width:85%;padding:12px}.portal-thread-msg.inbound{background:var(--bg-soft);align-self:flex-start}.portal-thread-msg.outbound{background:var(--portal-accent-soft);align-self:flex-end}.portal-doc-group-title{font-size:var(--type-body-sm);color:var(--muted);text-transform:uppercase;letter-spacing:var(--type-kicker-spacing);margin:16px 0 8px;font-weight:600}.portal-doc-item{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);align-items:center;gap:12px;margin-bottom:6px;padding:10px 12px;display:flex}.portal-doc-icon{border-radius:var(--radius-sm);background:var(--portal-accent-soft);width:32px;height:32px;color:var(--portal-accent);flex-shrink:0;justify-content:center;align-items:center;font-size:.9rem;display:flex}.portal-doc-info{flex:1;min-width:0}.portal-doc-name{font-size:var(--type-body);color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-weight:500;overflow:hidden}.portal-doc-date{font-size:var(--type-kicker);color:var(--muted)}.portal-doc-action{flex-shrink:0}.portal-rent-table{border-collapse:collapse;width:100%;font-size:var(--type-body-sm)}.portal-rent-table th{text-align:left;color:var(--muted);border-bottom:2px solid var(--border);font-weight:600;font-size:var(--type-kicker);text-transform:uppercase;letter-spacing:var(--type-kicker-spacing);padding:8px}.portal-rent-table td{border-bottom:1px solid var(--border);color:var(--text);padding:10px 8px}.portal-rent-table tr:last-child td{border-bottom:none}@media (width<=479px){.portal-rent-table thead{display:none}.portal-rent-table,.portal-rent-table tbody,.portal-rent-table tr,.portal-rent-table td{display:block}.portal-rent-table tr{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);margin-bottom:8px;padding:12px}.portal-rent-table td{border-bottom:none;justify-content:space-between;padding:2px 0;display:flex}.portal-rent-table td:before{content:attr(data-label);color:var(--muted);font-weight:600;font-size:var(--type-kicker)}}.portal-rent-outstanding{background:var(--danger-soft);border:1px solid var(--danger);border-radius:var(--radius);justify-content:space-between;align-items:center;margin-bottom:16px;padding:12px 16px;display:flex}.portal-rent-outstanding.zero{background:var(--success-soft);border-color:var(--success)}.portal-rent-outstanding-label{font-size:var(--type-body);color:var(--text);font-weight:500}.portal-rent-outstanding-amount{font-size:var(--type-title-md);font-weight:700}.portal-qr-overlay{background:var(--overlay);z-index:200;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.portal-qr-modal{background:var(--card);border-radius:var(--radius-lg);text-align:center;width:100%;max-width:320px;padding:24px}.portal-qr-modal img{max-width:240px;margin:16px auto}.portal-password-strength{gap:4px;margin-top:6px;display:flex}.portal-password-strength-bar{background:var(--border);height:4px;transition:background var(--transition-fast);border-radius:2px;flex:1}.portal-password-strength-bar.filled.weak{background:var(--danger)}.portal-password-strength-bar.filled.fair{background:var(--warning)}.portal-password-strength-bar.filled.strong{background:var(--success)}.portal-password-strength-label{font-size:var(--type-kicker);margin-top:4px}
