:root{--portal-accent: #0d9488;--portal-accent-soft: rgba(13, 148, 136, .1);--portal-accent-hover: #0f766e;--portal-accent-text: #ffffff;--portal-bottom-bar-height: 56px;--portal-topbar-height: 56px}html.dark{--portal-accent: #2dd4bf;--portal-accent-soft: rgba(45, 212, 191, .12);--portal-accent-hover: #5eead4;--portal-accent-text: #0a0a0a}.portal-layout{min-height:100vh;display:flex;flex-direction:column;background:var(--bg);color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.portal-main{flex:1;padding:16px;padding-bottom:calc(var(--portal-bottom-bar-height) + 24px);max-width:800px;margin:0 auto;width:100%}@media(min-width:768px){.portal-main{padding:24px 32px 32px}}.portal-topbar{display:flex;align-items:center;justify-content:space-between;height:var(--portal-topbar-height);padding:0 16px;background:var(--card);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:100}.portal-topbar-logo{display:flex;align-items:center;gap:8px;font-weight:700;font-size:1rem;color:var(--portal-accent);text-decoration:none}.portal-topbar-logo img{width:28px;height:28px;border-radius:var(--radius-sm)}.portal-topbar-actions{display:flex;align-items:center;gap:8px}.portal-topbar-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--radius-sm);border:none;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:1.25rem;transition:background var(--transition-fast),color var(--transition-fast);position:relative}.portal-topbar-btn:hover{background:var(--bg-soft);color:var(--text)}.portal-topbar-badge{position:absolute;top:4px;right:4px;width:8px;height:8px;border-radius:50%;background:var(--danger)}.portal-desktop-tabs{display:none;background:var(--card);border-bottom:1px solid var(--border);padding:0 16px;overflow-x:auto}@media(min-width:768px){.portal-desktop-tabs{display:flex;gap:0}}.portal-desktop-tab{padding:12px 16px;font-size:var(--type-body);font-weight:500;color:var(--muted);border:none;background:none;cursor:pointer;white-space:nowrap;border-bottom:2px solid transparent;transition:color var(--transition-fast),border-color var(--transition-fast)}.portal-desktop-tab:hover{color:var(--text)}.portal-desktop-tab.active{color:var(--portal-accent);border-bottom-color:var(--portal-accent)}.portal-bottom-tabs{display:flex;align-items:center;justify-content:space-around;position:fixed;bottom:0;left:0;right:0;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)}@media(min-width:768px){.portal-bottom-tabs{display:none}}.portal-bottom-tab{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;flex:1;padding:6px 0;font-size:.625rem;font-weight:500;color:var(--muted);border:none;background:none;cursor:pointer;transition:color var(--transition-fast);text-decoration:none}.portal-bottom-tab i{font-size:1.15rem}.portal-bottom-tab:hover,.portal-bottom-tab.active{color:var(--portal-accent)}.portal-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:12px;transition:box-shadow var(--transition-fast)}.portal-card:hover{box-shadow:var(--shadow)}.portal-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.portal-card-title{font-size:var(--type-title-sm);font-weight:600;color:var(--text)}.portal-card-icon{width:36px;height:36px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;font-size:1rem}.portal-card-value{font-size:1.5rem;font-weight:700;color:var(--text);margin-bottom:4px}.portal-card-label{font-size:var(--type-body-sm);color:var(--muted)}.portal-dashboard-grid{display:grid;grid-template-columns:1fr;gap:12px}@media(min-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);font-weight:700;margin:0 0 4px}.portal-dashboard-welcome p{font-size:var(--type-body);color:var(--muted);margin:0}.portal-status-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:9999px;font-size:var(--type-kicker);font-weight:600;letter-spacing:var(--type-kicker-spacing);text-transform:uppercase}.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{background:var(--tl-neutral-bg);color:var(--tl-neutral-text)}.portal-timeline{position:relative;padding-left:24px}.portal-timeline:before{content:"";position:absolute;left:7px;top:0;bottom:0;width:2px;background:var(--border)}.portal-timeline-step{position:relative;padding-bottom:16px}.portal-timeline-step:last-child{padding-bottom:0}.portal-timeline-dot{position:absolute;left:-20px;top:2px;width:12px;height:12px;border-radius:50%;background:var(--border);border:2px solid var(--card)}.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);font-weight:600;color:var(--text)}.portal-timeline-date{font-size:var(--type-kicker);color:var(--muted);margin-top:2px}.portal-auth-container{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:24px;background:var(--bg)}.portal-auth-card{width:100%;max-width:400px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:32px;box-shadow:var(--shadow-md)}.portal-auth-title{font-size:var(--type-title-lg);font-weight:700;text-align:center;margin:0 0 8px;color:var(--text)}.portal-auth-subtitle{font-size:var(--type-body);text-align:center;color:var(--muted);margin:0 0 24px}.portal-auth-logo{display:flex;justify-content:center;margin-bottom:24px;color:var(--portal-accent);font-size:2rem}.portal-form-group{margin-bottom:16px}.portal-form-label{display:block;font-size:var(--type-body-sm);font-weight:500;color:var(--text-secondary);margin-bottom:6px}.portal-form-input{width:100%;padding:10px 12px;font-size:var(--type-body);background:var(--input-bg);border:1px solid var(--input-border);border-radius:var(--radius-sm);color:var(--text);outline:none;transition:border-color var(--transition-fast);box-sizing:border-box}.portal-form-input:focus{border-color:var(--portal-accent);box-shadow:0 0 0 2px var(--portal-accent-soft)}.portal-form-textarea{width:100%;padding:10px 12px;font-size:var(--type-body);background:var(--input-bg);border:1px solid var(--input-border);border-radius:var(--radius-sm);color:var(--text);outline:none;resize:vertical;min-height:80px;font-family:inherit;box-sizing:border-box;transition:border-color var(--transition-fast)}.portal-form-textarea:focus{border-color:var(--portal-accent);box-shadow:0 0 0 2px var(--portal-accent-soft)}.portal-form-select{width:100%;padding:10px 12px;font-size:var(--type-body);background:var(--input-bg);border:1px solid var(--input-border);border-radius:var(--radius-sm);color:var(--text);outline:none;box-sizing:border-box;cursor:pointer}.portal-form-select:focus{border-color:var(--portal-accent)}.portal-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 20px;font-size:var(--type-body);font-weight:600;border-radius:var(--radius-sm);border:none;cursor:pointer;transition:background var(--transition-fast),opacity var(--transition-fast);font-family:inherit}.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{background:transparent;color:var(--portal-accent);padding:8px 12px}.portal-btn-ghost:hover:not(:disabled){background:var(--portal-accent-soft)}.portal-btn-block{width:100%}.portal-message-list{display:flex;flex-direction:column;gap:8px}.portal-message-item{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:12px;cursor:pointer;transition:box-shadow var(--transition-fast)}.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);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.portal-message-meta{display:flex;justify-content:space-between;align-items:center;font-size:var(--type-kicker);color:var(--muted);margin-top:6px}.portal-message-direction{font-weight:500}.portal-thread{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.portal-thread-msg{padding:12px;border-radius:var(--radius);max-width:85%}.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);font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:var(--type-kicker-spacing);margin:16px 0 8px}.portal-doc-item{display:flex;align-items:center;gap:12px;padding:10px 12px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);margin-bottom:6px}.portal-doc-icon{width:32px;height:32px;border-radius:var(--radius-sm);background:var(--portal-accent-soft);color:var(--portal-accent);display:flex;align-items:center;justify-content:center;font-size:.9rem;flex-shrink:0}.portal-doc-info{flex:1;min-width:0}.portal-doc-name{font-size:var(--type-body);font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.portal-doc-date{font-size:var(--type-kicker);color:var(--muted)}.portal-doc-action{flex-shrink:0}.portal-rent-table{width:100%;border-collapse:collapse;font-size:var(--type-body-sm)}.portal-rent-table th{text-align:left;padding:8px;font-weight:600;color:var(--muted);border-bottom:2px solid var(--border);font-size:var(--type-kicker);text-transform:uppercase;letter-spacing:var(--type-kicker-spacing)}.portal-rent-table td{padding:10px 8px;border-bottom:1px solid var(--border);color:var(--text)}.portal-rent-table tr:last-child td{border-bottom:none}@media(max-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{padding:12px;margin-bottom:8px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm)}.portal-rent-table td{padding:2px 0;border-bottom:none;display:flex;justify-content:space-between}.portal-rent-table td:before{content:attr(data-label);font-weight:600;color:var(--muted);font-size:var(--type-kicker)}}.portal-rent-outstanding{background:var(--danger-soft);border:1px solid var(--danger);border-radius:var(--radius);padding:12px 16px;margin-bottom:16px;display:flex;align-items:center;justify-content:space-between}.portal-rent-outstanding.zero{background:var(--success-soft);border-color:var(--success)}.portal-rent-outstanding-label{font-size:var(--type-body);font-weight:500;color:var(--text)}.portal-rent-outstanding-amount{font-size:var(--type-title-md);font-weight:700}.portal-qr-overlay{position:fixed;inset:0;background:var(--overlay);display:flex;align-items:center;justify-content:center;z-index:200}.portal-qr-modal{background:var(--card);border-radius:var(--radius-lg);padding:24px;max-width:320px;width:100%;text-align:center}.portal-qr-modal img{max-width:240px;margin:16px auto}.portal-password-strength{display:flex;gap:4px;margin-top:6px}.portal-password-strength-bar{flex:1;height:4px;border-radius:2px;background:var(--border);transition:background var(--transition-fast)}.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}.portal-tabs{display:flex;border-bottom:1px solid var(--border);margin-bottom:20px}.portal-tab{flex:1;padding:10px;text-align:center;font-size:var(--type-body);font-weight:500;color:var(--muted);background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:color var(--transition-fast),border-color var(--transition-fast)}.portal-tab.active{color:var(--portal-accent);border-bottom-color:var(--portal-accent)}.portal-alert{padding:10px 14px;border-radius:var(--radius-sm);font-size:var(--type-body-sm);margin-bottom:16px}.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-form-error{background:var(--danger);color:#fff;padding:10px 14px;border-radius:var(--radius-sm);font-size:var(--type-body-sm);margin-bottom:12px}.portal-lang-select{padding:4px 8px;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}.portal-profile-menu{position:relative}.portal-profile-dropdown{position:absolute;right:0;top:100%;margin-top:4px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-md);min-width:160px;z-index:110;overflow:hidden}.portal-profile-dropdown-item{display:block;width:100%;padding:10px 14px;font-size:var(--type-body-sm);color:var(--text);background:none;border:none;text-align:left;cursor:pointer;transition:background var(--transition-fast)}.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);padding:12px 16px;margin-bottom:8px}.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{display:flex;align-items:center;gap:12px;padding:12px;background:var(--danger-soft);border:1px solid var(--danger);border-radius:var(--radius);margin-bottom:8px}.portal-emergency-icon{width:40px;height:40px;border-radius:50%;background:var(--danger);color:#fff;display:flex;align-items:center;justify-content:center;font-size:1.1rem;flex-shrink:0}.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{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;background:var(--danger);color:#fff;border-radius:var(--radius-sm);border:none;font-size:var(--type-body-sm);font-weight:600;cursor:pointer;text-decoration:none}.portal-empty{text-align:center;padding:48px 24px;color:var(--muted)}.portal-empty-icon{font-size:2.5rem;margin-bottom:12px;opacity:.4}.portal-empty-text{font-size:var(--type-body)}.portal-section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.portal-section-title{font-size:var(--type-title-md);font-weight:700;color:var(--text);margin:0}.portal-more-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.portal-more-item{display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 8px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;border-style:none;font-family:inherit;color:var(--text);transition:box-shadow var(--transition-fast)}.portal-more-item:hover{box-shadow:var(--shadow)}.portal-more-item i{font-size:1.4rem;color:var(--portal-accent)}.portal-more-item span{font-size:var(--type-body-sm);font-weight:500}.portal-photo-upload{display:flex;align-items:center;justify-content:center;border:2px dashed var(--border);border-radius:var(--radius);padding:24px;cursor:pointer;color:var(--muted);transition:border-color var(--transition-fast)}.portal-photo-upload:hover{border-color:var(--portal-accent)}.portal-photo-preview{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.portal-photo-thumb{width:64px;height:64px;border-radius:var(--radius-sm);object-fit:cover;border:1px solid var(--border)}.portal-landlord-list{display:flex;flex-direction:column;gap:8px;margin-top:16px}.portal-landlord-option{padding:12px;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%}.portal-landlord-option:hover{border-color:var(--portal-accent)}
