@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";:root{--color-bg:#f2f3f7;--color-surface:#fff;--color-border:#e8e8ed;--color-border-light:#f0f0f5;--color-text-primary:#111827;--color-text-secondary:#6b7280;--color-text-tertiary:#9ca3af;--color-accent:#4f46e5;--color-accent-hover:#4338ca;--color-accent-light:#eef2ff;--color-accent-text:#3730a3;--color-present:#16a34a;--color-present-bg:#f0fdf4;--color-present-border:#bbf7d0;--color-present-icon:#22c55e;--color-absent:#dc2626;--color-absent-bg:#fef2f2;--color-absent-border:#fecaca;--color-absent-icon:#ef4444;--color-pending:#d97706;--color-pending-bg:#fffbeb;--color-pending-border:#fde68a;--color-paid:#16a34a;--color-paid-bg:#f0fdf4;--color-paid-border:#bbf7d0;--color-muted:#9ca3af;--color-muted-bg:#f9fafb;--color-muted-border:#e5e7eb;--spacing-xs:4px;--spacing-sm:8px;--spacing-md:16px;--spacing-lg:24px;--spacing-xl:32px;--spacing-2xl:48px;--font-family:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-size-xs:12px;--font-size-sm:14px;--font-size-base:16px;--font-size-lg:18px;--font-size-xl:22px;--font-size-2xl:28px;--font-size-3xl:32px;--radius-sm:6px;--radius-md:10px;--radius-lg:14px;--radius-xl:20px;--radius-full:9999px;--shadow-card:0 1px 4px #0000000f, 0 0 0 1px #0000000a;--bottom-nav-height:64px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font-size:var(--font-size-base);-webkit-text-size-adjust:100%}body{font-family:var(--font-family);background:var(--color-bg);color:var(--color-text-primary);-webkit-font-smoothing:antialiased;min-height:100dvh;line-height:1.5}img,svg{max-width:100%;display:block}button{cursor:pointer;background:0 0;border:none;font-family:inherit}a{color:inherit;text-decoration:none}.portal-shell{background:var(--color-bg);flex-direction:column;align-items:center;min-height:100dvh;display:flex}.portal-column{flex-direction:column;flex:1;width:100%;max-width:430px;display:flex}.auth-shell{min-height:100dvh;padding:var(--spacing-md);background:var(--color-bg);justify-content:center;align-items:center;display:flex}.auth-card{background:var(--color-surface);border-radius:var(--radius-xl);padding:var(--spacing-xl) var(--spacing-lg);width:100%;max-width:400px;box-shadow:0 4px 24px #0000001a}.brand{align-items:center;gap:var(--spacing-sm);margin-bottom:var(--spacing-xl);display:flex}.brand-icon{justify-content:center;align-items:center;width:36px;height:36px;display:flex}.brand-name{font-size:var(--font-size-lg);letter-spacing:-.02em;font-weight:700}.brand-sub{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.page-heading{font-size:var(--font-size-2xl);letter-spacing:-.03em;margin-bottom:var(--spacing-sm);font-weight:700;line-height:1.2}.page-sub{font-size:var(--font-size-base);color:var(--color-text-secondary);margin-bottom:var(--spacing-xl);line-height:1.5}.form-group{gap:var(--spacing-sm);margin-bottom:var(--spacing-lg);flex-direction:column;display:flex}.form-label{font-size:var(--font-size-sm);color:var(--color-text-secondary);letter-spacing:.04em;text-transform:uppercase;font-weight:600}.form-input{width:100%;height:56px;padding:0 var(--spacing-md);font-family:var(--font-family);font-size:var(--font-size-xl);color:var(--color-text-primary);background:var(--color-surface);border:2px solid var(--color-border);border-radius:var(--radius-md);-webkit-appearance:none;outline:none;font-weight:500;transition:border-color .15s,box-shadow .15s}.form-input::placeholder{color:var(--color-text-tertiary);font-weight:400}.form-input:focus{border-color:var(--color-accent);box-shadow:0 0 0 4px #4f46e51a}.form-input.has-prefix{padding-left:56px}.input-wrapper{position:relative}.input-prefix{left:var(--spacing-md);font-size:var(--font-size-xl);color:var(--color-text-secondary);pointer-events:none;-webkit-user-select:none;user-select:none;font-weight:500;position:absolute;top:50%;transform:translateY(-50%)}.form-help{font-size:var(--font-size-sm);color:var(--color-text-tertiary);margin-top:-4px}.btn-primary{justify-content:center;align-items:center;gap:var(--spacing-sm);background:var(--color-accent);color:#fff;width:100%;height:56px;font-family:var(--font-family);font-size:var(--font-size-base);border-radius:var(--radius-md);-webkit-tap-highlight-color:transparent;letter-spacing:-.01em;font-weight:600;transition:background .15s,transform .15s,box-shadow .15s;display:flex}.btn-primary:hover:not(:disabled){background:var(--color-accent-hover);box-shadow:0 4px 16px #4f46e559}.btn-primary:active:not(:disabled){transform:scale(.98)}.btn-primary:disabled{opacity:.4;cursor:not-allowed}.btn-ghost{color:var(--color-accent);font-family:var(--font-family);font-size:var(--font-size-sm);padding:var(--spacing-sm) 0;cursor:pointer;background:0 0;border:none;font-weight:500}.picker-list{gap:var(--spacing-sm);margin-bottom:var(--spacing-xl);flex-direction:column;display:flex}.picker-card{padding:var(--spacing-md) var(--spacing-lg);background:var(--color-surface);border:2px solid var(--color-border);border-radius:var(--radius-lg);cursor:pointer;text-align:left;justify-content:space-between;align-items:center;width:100%;transition:border-color .15s,box-shadow .15s,transform .15s;display:flex}.picker-card:hover{border-color:var(--color-accent);box-shadow:var(--shadow-card)}.picker-card:active{transform:scale(.98)}.picker-card-name{font-size:var(--font-size-lg);letter-spacing:-.02em;margin-bottom:2px;font-weight:600}.picker-card-meta{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.picker-card-arrow{color:var(--color-accent);flex-shrink:0}.topbar{padding:var(--spacing-md) 12px var(--spacing-sm);background:var(--color-bg);justify-content:space-between;align-items:center;display:flex}.topbar-brand{font-size:var(--font-size-lg);color:var(--color-accent);letter-spacing:-.02em;font-weight:700}.topbar-signout{font-size:var(--font-size-sm);color:var(--color-accent);cursor:pointer;align-items:center;gap:5px;font-weight:500;display:flex}.hero-card{background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);margin:0 12px 16px;padding:20px}.hero-top{justify-content:space-between;align-items:flex-start;gap:var(--spacing-sm);margin-bottom:var(--spacing-sm);display:flex}.hero-left{flex:1;align-items:center;gap:12px;display:flex}.hero-avatar{background:var(--color-accent-light);width:48px;height:48px;color:var(--color-accent);font-size:var(--font-size-base);letter-spacing:-.02em;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-weight:700;display:flex}.hero-name{font-size:var(--font-size-lg);letter-spacing:-.02em;font-weight:700;line-height:1.2}.hero-sub{font-size:var(--font-size-sm);color:var(--color-text-secondary);margin-top:2px}.hero-right{flex-shrink:0}.today-pill{border-radius:var(--radius-full);font-size:var(--font-size-sm);white-space:nowrap;align-items:center;gap:5px;padding:6px 12px;font-weight:600;display:inline-flex}.today-pill.present{background:var(--color-present-bg);color:var(--color-present);border:1px solid var(--color-present-border)}.today-pill.absent{background:var(--color-absent-bg);color:var(--color-absent);border:1px solid var(--color-absent-border)}.today-pill.not_recorded{background:var(--color-muted-bg);color:var(--color-muted);border:1px solid var(--color-muted-border)}.hero-updated{font-size:var(--font-size-xs);color:var(--color-text-tertiary);padding-top:var(--spacing-xs);justify-content:flex-end;align-items:center;gap:5px;display:flex}.hero-updated-dot{background:var(--color-present);border-radius:50%;flex-shrink:0;width:6px;height:6px}.motivation-banner{background:var(--color-present-bg);border:1px solid var(--color-present-border);border-radius:var(--radius-md);padding:10px var(--spacing-md);font-size:var(--font-size-sm);color:var(--color-present);align-items:center;gap:8px;font-weight:500;display:flex}.section-card{background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);margin:0 12px 16px;overflow:hidden}.section-header{justify-content:space-between;align-items:center;padding:20px 20px 0;display:flex}.section-title{font-size:var(--font-size-base);color:var(--color-text-primary);align-items:center;gap:6px;font-weight:700;display:flex}.section-title-meta{font-size:var(--font-size-sm);color:var(--color-text-tertiary);font-weight:400}.cal-nav{justify-content:space-between;align-items:center;padding:8px 20px 4px;display:flex}.cal-nav-btn{width:28px;height:28px;color:var(--color-text-secondary);border-radius:50%;justify-content:center;align-items:center;transition:background .15s;display:flex}.cal-nav-btn:hover{background:var(--color-bg)}.cal-grid-headers{grid-template-columns:repeat(7,1fr);padding:0 16px;display:grid}.cal-header-cell{text-align:center;font-size:var(--font-size-xs);color:var(--color-text-tertiary);letter-spacing:.02em;padding-bottom:4px;font-weight:600}.cal-grid{grid-template-columns:repeat(7,1fr);gap:2px 0;padding:0 16px 16px;display:grid}.cal-cell{cursor:pointer;-webkit-tap-highlight-color:transparent;border-radius:var(--radius-sm);background:0 0;border:none;flex-direction:column;justify-content:center;align-items:center;gap:3px;padding:4px 2px;transition:background .15s;display:flex}.cal-cell:hover:not(:disabled):not(.cal-cell--overflow):not(.cal-cell--future){background:var(--color-bg)}.cal-cell:disabled{cursor:default}.cal-day-num{font-size:var(--font-size-sm);border-radius:50%;justify-content:center;align-items:center;width:26px;height:26px;font-weight:500;line-height:1;display:flex}.cal-cell--today .cal-day-num{background:var(--color-accent);color:#fff;font-weight:700}.cal-cell--overflow .cal-day-num,.cal-cell--future .cal-day-num{color:var(--color-text-tertiary);opacity:.4}.cal-icon{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:18px;height:18px;display:flex}.cal-icon--present{background:var(--color-present)}.cal-icon--absent{background:var(--color-absent)}.cal-icon--no-class{border:1.5px solid var(--color-muted);background:0 0}.cal-icon--future{opacity:0;border:1.5px solid #0000}.cal-check,.cal-x,.cal-dash{color:#fff;width:10px;height:10px}.cal-legend{align-items:center;gap:var(--spacing-md);border-top:1px solid var(--color-border-light);padding:12px 20px;display:flex}.cal-legend-item{font-size:var(--font-size-xs);color:var(--color-text-secondary);align-items:center;gap:5px;display:flex}.att-stats{background:var(--color-border-light);border-top:1px solid var(--color-border-light);grid-template-columns:1fr 1fr 1fr;gap:1px;display:grid}.att-stat-cell{background:var(--color-surface);align-items:center;gap:10px;padding:16px 12px;display:flex}.att-stat-icon{border-radius:var(--radius-sm);flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-size:16px;display:flex}.att-stat-icon--green{background:var(--color-present-bg)}.att-stat-icon--red{background:var(--color-absent-bg)}.att-stat-icon--blue{background:var(--color-accent-light)}.att-stat-number{font-size:var(--font-size-base);color:var(--color-text-primary);letter-spacing:-.02em;font-weight:700}.att-stat-label{font-size:var(--font-size-xs);color:var(--color-text-secondary);margin-top:1px}.view-link{font-size:var(--font-size-sm);color:var(--color-accent);border-top:1px solid var(--color-border-light);cursor:pointer;text-align:left;-webkit-tap-highlight-color:transparent;background:0 0;border-bottom:none;border-left:none;border-right:none;justify-content:space-between;align-items:center;width:100%;padding:12px 20px;font-weight:500;display:flex}.view-link:hover{background:var(--color-accent-light)}.featured-banner{gap:var(--spacing-sm);background:linear-gradient(135deg, var(--color-surface) 0%, var(--color-accent-light) 100%);border:1px solid var(--color-accent);flex-direction:column;padding:20px;display:flex}.featured-title{font-size:var(--font-size-base);color:var(--color-accent-text);font-weight:700}.featured-sub{font-size:var(--font-size-sm);color:var(--color-text-secondary);margin-bottom:var(--spacing-sm)}.featured-btn{width:auto;height:40px;padding:0 var(--spacing-md);font-size:var(--font-size-sm);align-self:flex-start}.fees-top-row{justify-content:space-between;align-items:center;padding:20px 20px 10px;display:flex}.fees-status-badge{border-radius:var(--radius-full);font-size:var(--font-size-xs);align-items:center;gap:4px;padding:4px 10px;font-weight:600;display:inline-flex}.fees-status-badge.pending,.fees-status-badge.partial{background:var(--color-absent-bg);color:var(--color-absent)}.fees-status-badge.paid{background:var(--color-present-bg);color:var(--color-present)}.fees-status-badge.deferred,.fees-status-badge.waived,.fees-status-badge.no_invoice{background:var(--color-muted-bg);color:var(--color-muted)}.fees-amount-row{justify-content:space-between;align-items:center;gap:var(--spacing-sm);margin-bottom:4px;padding:0 20px;display:flex}.fees-amount{letter-spacing:-.04em;color:var(--color-absent);font-size:30px;font-weight:700}.fees-amount.paid{color:var(--color-present)}.fees-view-btn{background:var(--color-accent);color:#fff;font-size:var(--font-size-sm);border-radius:var(--radius-md);white-space:nowrap;flex-shrink:0;align-items:center;gap:5px;padding:8px 14px;font-weight:600;display:inline-flex}.fees-due-date{font-size:var(--font-size-sm);color:var(--color-text-secondary);padding:0 20px 16px}.fees-meta{border-top:1px solid var(--color-border-light);gap:0;display:flex}.fees-meta-col{flex:1;padding:14px 20px}.fees-meta-col+.fees-meta-col{border-left:1px solid var(--color-border-light)}.fees-meta-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary);align-items:center;gap:4px;margin-bottom:3px;display:flex}.fees-meta-value{font-size:var(--font-size-sm);color:var(--color-text-primary);font-weight:600}.section-top-row{justify-content:space-between;align-items:center;padding:20px 20px 10px;display:flex}.section-top-title{font-size:var(--font-size-base);font-weight:700}.section-view-all{font-size:var(--font-size-sm);color:var(--color-accent);cursor:pointer;background:0 0;border:none;font-weight:500}.item-row{align-items:flex-start;gap:var(--spacing-sm);border-top:1px solid var(--color-border-light);padding:14px 20px;display:flex}.item-icon{border-radius:var(--radius-sm);flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;margin-top:2px;font-size:18px;display:flex}.item-icon--purple{background:#f3e8ff}.item-icon--blue{background:var(--color-accent-light)}.item-content{flex:1}.item-title{font-size:var(--font-size-sm);color:var(--color-text-primary);margin-bottom:2px;font-weight:600}.item-sub{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.item-meta{font-size:var(--font-size-xs);color:var(--color-text-tertiary);align-items:center;gap:4px;display:flex}.item-meta--red{color:var(--color-absent)}.item-dot{background:var(--color-accent);border-radius:50%;flex-shrink:0;width:6px;height:6px;margin-top:5px}.contact-cta{align-items:center;gap:var(--spacing-md);background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);margin:0 12px 16px;padding:20px;display:flex}.contact-cta-icon{background:var(--color-accent);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;font-size:20px;display:flex}.contact-cta-text{flex:1}.contact-cta-title{font-size:var(--font-size-sm);margin-bottom:2px;font-weight:600}.contact-cta-sub{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.contact-cta-btn{background:var(--color-accent);color:#fff;font-size:var(--font-size-sm);border-radius:var(--radius-md);white-space:nowrap;flex-shrink:0;align-items:center;gap:4px;padding:8px 12px;font-weight:600;display:inline-flex}.bottom-nav{height:var(--bottom-nav-height);background:var(--color-surface);border-top:1px solid var(--color-border-light);z-index:100;justify-content:space-around;align-items:center;display:flex;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -2px 12px #0000000f}.nav-item{font-size:var(--font-size-xs);color:var(--color-text-tertiary);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;flex-direction:column;align-items:center;gap:3px;min-width:60px;padding:8px 16px;font-weight:500;display:flex}.nav-item.active{color:var(--color-accent)}.nav-item svg{width:22px;height:22px}.sheet-overlay{z-index:200;background:#00000073;justify-content:center;align-items:flex-end;animation:.2s fadeOverlay;display:flex;position:fixed;inset:0}@keyframes fadeOverlay{0%{opacity:0}to{opacity:1}}.sheet{background:var(--color-surface);border-radius:var(--radius-xl) var(--radius-xl) 0 0;padding:var(--spacing-lg);width:100%;max-width:430px;padding-bottom:max(var(--spacing-xl), env(safe-area-inset-bottom));animation:.25s cubic-bezier(.34,1.2,.64,1) slideUp}@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.sheet-handle{background:var(--color-border);border-radius:var(--radius-full);width:36px;height:4px;margin:0 auto var(--spacing-lg)}.sheet-title{font-size:var(--font-size-lg);letter-spacing:-.02em;margin-bottom:var(--spacing-md);font-weight:700}.sheet-status-pill{border-radius:var(--radius-full);font-size:var(--font-size-base);margin-bottom:var(--spacing-md);align-items:center;gap:8px;padding:12px 20px;font-weight:600;display:inline-flex}.sheet-status-pill.present{background:var(--color-present-bg);color:var(--color-present);border:1.5px solid var(--color-present-border)}.sheet-status-pill.absent{background:var(--color-absent-bg);color:var(--color-absent);border:1.5px solid var(--color-absent-border)}.sheet-status-pill.no_class{background:var(--color-muted-bg);color:var(--color-muted);border:1.5px solid var(--color-muted-border)}.sheet-close{border-radius:var(--radius-md);border:1.5px solid var(--color-border);width:100%;height:52px;font-family:var(--font-family);font-size:var(--font-size-base);color:var(--color-text-secondary);margin-top:var(--spacing-md);background:0 0;font-weight:600}.sheet-close:hover{background:var(--color-bg)}.error-banner{background:var(--color-absent-bg);border:1px solid var(--color-absent-border);border-radius:var(--radius-md);padding:var(--spacing-md);font-size:var(--font-size-sm);color:var(--color-absent);margin:var(--spacing-md);line-height:1.5}.empty-state{padding:var(--spacing-lg);text-align:center}.empty-state-emoji{margin-bottom:var(--spacing-sm);font-size:24px}.empty-state-text{font-size:var(--font-size-sm);color:var(--color-text-secondary)}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton{border-radius:var(--radius-sm);background:linear-gradient(90deg,#e8e8ed 25%,#f0f0f5 50%,#e8e8ed 75%) 0 0/200% 100%;animation:1.5s infinite shimmer}.skeleton-text-lg{width:60%;height:24px}.skeleton-text-sm{width:40%;height:14px}.skeleton-card{border-radius:var(--radius-lg);height:100px}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.page-enter{animation:.25s forwards fadeUp}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:2px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:20px;height:20px;animation:.7s linear infinite spin}@media (width>=640px){.portal-shell{background:linear-gradient(135deg,#eef0ff 0%,#f2f3f7 60%)}.portal-column{filter:drop-shadow(0 20px 40px #4f46e514)}.auth-card{padding:var(--spacing-2xl) var(--spacing-xl)}.bottom-nav{border-radius:var(--radius-lg) var(--radius-lg) 0 0;width:100%;max-width:430px;left:50%;right:auto;transform:translate(-50%)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}:focus-visible{outline:3px solid var(--color-accent);outline-offset:2px;border-radius:4px}
