:root{color-scheme:light;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;--ink: #18352a;--ink-soft: #52675f;--muted: #84938d;--line: #e3eae6;--green: #2e6a4c;--lime: #c8ee65;--lime-strong: #b8e64e;--pale-green: #f0f8e8;--surface-soft: #f7faf8;--danger: #aa5146;background:#f7faf8;color:var(--ink);font-weight:400;font-synthesis:none}*{box-sizing:border-box}html,body,#root{width:100%;min-height:100%;margin:0}body{min-height:100dvh;background:#f7faf8;overscroll-behavior-y:none}button,input,select,textarea{font:inherit;color:inherit}button{-webkit-tap-highlight-color:transparent;cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid rgb(119 171 45 / 42%);outline-offset:3px}button:disabled{cursor:not-allowed;opacity:.52}.app-shell{position:relative;display:flex;flex-direction:column;width:min(100%,820px);height:100dvh;min-height:560px;margin:0 auto;overflow:hidden;background:#fff;box-shadow:0 0 50px #1631270a}.topbar{z-index:2;display:flex;flex:0 0 auto;align-items:center;justify-content:space-between;min-height:69px;padding:max(10px,env(safe-area-inset-top)) 24px 8px;border-bottom:1px solid rgb(227 234 230 / 58%);background:#fffffff5}.brand{display:inline-flex;align-items:center;gap:8px;padding:4px 0;border:0;background:transparent;color:var(--ink);font-size:20px;font-weight:770;letter-spacing:-.055em}.brand-icon{display:inline-grid;width:34px;height:34px;place-items:center;border-radius:12px;background:var(--pale-green);color:#78a83d}.brand-icon.large{width:52px;height:52px;border-radius:17px}.top-actions{display:flex;align-items:center;gap:13px}.sync-state{display:inline-flex;align-items:center;gap:6px;color:#9aa7a2;font-size:12px;white-space:nowrap}.sync-state i{width:7px;height:7px;border-radius:50%;background:#c5ceca}.sync-state.is-online i{background:#70ac45;box-shadow:0 0 0 3px #eef7e9}.avatar-button{display:grid;width:37px;height:37px;place-items:center;border:0;border-radius:50%;background:#e8f3dc;color:var(--green);font-weight:700}.main-content{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:18px 24px calc(31px + env(safe-area-inset-bottom));scrollbar-width:thin;scrollbar-color:#d5e1dc transparent}.page-section{width:100%;max-width:730px;margin:0 auto}.home-heading{display:flex;align-items:center;justify-content:space-between;margin:4px 0 19px}.offline-demo-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 14px;margin:-6px 0 14px;border:1px solid #e7edcf;border-radius:16px;background:#f7faee}.offline-demo-banner strong{color:var(--green);font-size:13px}.offline-demo-banner p{margin:4px 0 0;color:var(--muted);font-size:11px;line-height:1.45}.offline-demo-banner .primary-button{min-height:38px;flex:0 0 auto;padding:0 11px;font-size:12px}.eyebrow{margin:0 0 5px;color:var(--muted);font-size:12px;font-weight:560}h1,h2,h3,p{margin-top:0}.home-heading h1,.page-header h1{margin:0;color:var(--ink);font-size:clamp(27px,7vw,35px);font-weight:760;line-height:1.2;letter-spacing:-.06em}.heading-tail{margin-left:5px;font-size:.72em;font-weight:620;letter-spacing:-.03em}.heading-sub{margin:6px 0 0;color:var(--muted);font-size:14px}.edit-profile{display:grid;width:40px;height:40px;place-items:center;border:1px solid var(--line);border-radius:14px;background:#fff;color:var(--ink-soft)}.balance-card{position:relative;display:flex;min-height:176px;align-items:center;justify-content:space-between;gap:12px;padding:24px 29px;overflow:hidden;border-radius:23px;background:var(--pale-green)}.balance-main{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}.balance-label{color:var(--green);font-size:14px;font-weight:650}.balance-number{margin:4px 0 2px;font-size:60px;line-height:1;font-weight:780;letter-spacing:-.08em;font-variant-numeric:tabular-nums}.balance-number small{margin-left:5px;font-size:21px;letter-spacing:0;font-weight:650}.balance-note{color:var(--ink-soft);font-size:12px}.progress-ring{display:grid;flex:0 0 auto;width:116px;height:116px;place-items:center;border-radius:50%;background:conic-gradient(var(--lime-strong) var(--progress),rgb(255 255 255 / 78%) 0)}.progress-ring>div{display:flex;width:88px;height:88px;flex-direction:column;align-items:center;justify-content:center;border-radius:50%;background:var(--pale-green)}.progress-ring strong{font-size:22px;font-variant-numeric:tabular-nums}.progress-ring span{margin-top:2px;color:var(--muted);font-size:11px}.card-chevron{position:absolute;top:16px;right:15px;display:grid;width:28px;height:30px;place-items:center;border:0;background:transparent;color:var(--green)}.quick-actions{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;padding:19px 1px 20px}.quick-actions button{display:flex;min-width:0;flex-direction:column;align-items:center;gap:8px;padding:0 2px;border:0;background:transparent;color:var(--ink-soft);font-size:12px;white-space:nowrap}.quick-icon{display:grid;width:49px;height:49px;place-items:center;border-radius:17px}.quick-icon.green{background:#eaf4e3;color:var(--green)}.quick-icon.lime{background:#f2f8e8;color:#6e963e}.quick-icon.soft{background:#f0f4f2;color:#64776f}.quick-icon.peach{background:#fff2e8;color:#b56c3f}.section-title-row{display:flex;align-items:center;justify-content:space-between;margin:4px 0 10px}.section-title-row h2,.course-section-heading h2,.expense-heading h2{margin:0;font-size:18px;font-weight:720;letter-spacing:-.035em}.section-title-row.spaced{margin-top:23px}.inline-link{display:inline-flex;align-items:center;gap:2px;padding:5px 0;border:0;background:transparent;color:var(--green);font-size:12px;font-weight:600}.empty-card{display:flex;min-height:94px;align-items:center;gap:13px;padding:14px;border:1px dashed #d7e2dc;border-radius:17px}.empty-icon{display:grid;flex:0 0 auto;width:43px;height:43px;place-items:center;border-radius:15px;background:#f1f6ee;color:#789c58}.empty-card strong{font-size:14px}.empty-card p{margin:4px 0 0;color:var(--muted);font-size:12px}.small-add{min-height:37px;padding:0 11px;margin-left:auto;border:1px solid #dce7d5;border-radius:11px;background:#fff;color:var(--green);font-size:12px;white-space:nowrap}.course-card{position:relative;display:flex;gap:14px;padding:16px 16px 15px;border:1px solid var(--line);border-radius:19px;background:#fff;box-shadow:0 3px 14px #17372808}.course-card.is-checked{background:#fbfcfb}.course-date,.event-date-block{display:flex;flex:0 0 45px;flex-direction:column;align-items:center;justify-content:center;align-self:stretch;padding-right:12px;border-right:1px solid var(--line);color:var(--muted)}.course-date span,.event-date-block span{font-size:12px}.course-date strong,.event-date-block strong{margin:1px 0;color:var(--ink);font-size:27px;line-height:1.1;font-weight:760;letter-spacing:-.06em;font-variant-numeric:tabular-nums}.course-date small,.event-date-block small{font-size:11px}.course-card-content,.event-content{flex:1;min-width:0}.course-card-top,.event-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:9px}.course-card h3,.event-card h3{overflow:hidden;margin:0;color:var(--ink);font-size:16px;font-weight:720;letter-spacing:-.03em;text-overflow:ellipsis;white-space:nowrap}.status-pill{display:inline-flex;align-items:center;min-height:21px;padding:0 8px;margin-top:5px;border-radius:7px;background:#f3f7f0;color:#72866e;font-size:10px;font-weight:650}.status-pill.done{background:#eef2f0;color:#74837d}.course-time,.course-place,.event-meta{display:flex;align-items:center;gap:5px;margin-top:8px;color:var(--ink-soft);font-size:12px}.course-time svg,.course-place svg,.event-meta svg{color:#75927e}.course-note{margin:8px 0 0;color:var(--muted);font-size:12px}.checkin-button{display:inline-flex;min-height:38px;align-items:center;gap:6px;padding:0 13px;margin-top:13px;border:0;border-radius:11px;background:var(--lime);color:var(--ink);font-size:13px;font-weight:690}.checked-row{display:flex;align-items:center;gap:6px;margin-top:12px;color:#72847c;font-size:11px}.check-circle{display:grid;width:18px;height:18px;place-items:center;border-radius:50%;background:#e6f2df;color:var(--green)}.undo-link{margin-left:auto;color:var(--muted);text-decoration:underline;text-underline-offset:3px}.course-menu{display:inline-flex;gap:3px;margin-top:-5px}.icon-quiet{display:grid;width:31px;height:31px;flex:0 0 auto;place-items:center;border:0;border-radius:9px;background:transparent;color:#82918b}.icon-quiet:hover{background:var(--surface-soft)}.danger-text{color:#bd7c73}.event-reminder{display:flex;width:100%;align-items:center;gap:12px;padding:13px 14px;border:1px solid #f1e9dc;border-radius:17px;background:#fffcf6;text-align:left}.event-date{display:flex;flex:0 0 44px;flex-direction:column;align-items:center;padding-right:11px;border-right:1px solid #eee4d5;color:#a88a62}.event-date small{font-size:11px}.event-date strong{font-size:25px;line-height:1.1;color:#56432e}.event-reminder-copy{display:flex;min-width:0;flex:1;flex-direction:column;gap:5px}.event-reminder-copy strong{overflow:hidden;color:var(--ink);font-size:14px;text-overflow:ellipsis;white-space:nowrap}.event-reminder-copy span{color:var(--muted);font-size:11px}.reminder-dot{display:grid;width:31px;height:31px;flex:0 0 auto;place-items:center;border-radius:10px;background:#fff2dd;color:#ae8050}.spend-card{position:relative;display:flex;width:100%;flex-direction:column;padding:16px 18px;margin-top:23px;overflow:hidden;border:1px solid var(--line);border-radius:18px;background:#fff;text-align:left}.spend-top{display:flex;align-items:center;justify-content:space-between;color:var(--ink-soft);font-size:13px}.spend-top svg{color:#80938a}.spend-card>strong{margin-top:5px;font-size:31px;font-weight:760;letter-spacing:-.05em}.spend-caption{margin-top:2px;color:var(--muted);font-size:11px}.spend-bars{position:absolute;right:29px;bottom:18px;display:flex;align-items:flex-end;gap:8px;height:42px}.spend-bars i{display:block;width:15px;border-radius:5px 5px 2px 2px;background:#e9f2e2}.spend-bars i:nth-child(1){height:17px}.spend-bars i:nth-child(2){height:27px}.spend-bars i:nth-child(3){height:21px}.spend-bars i:nth-child(4){height:33px}.spend-bars i:nth-child(5){height:41px;background:var(--lime-strong)}.page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;padding:7px 0 20px}.page-header h1{font-size:31px}.page-header p{margin:6px 0 0;color:var(--muted);font-size:13px}.primary-button,.secondary-button,.outline-button{display:inline-flex;min-height:43px;align-items:center;justify-content:center;gap:7px;padding:0 15px;border-radius:13px;font-size:13px;font-weight:660;white-space:nowrap}.primary-button{border:1px solid var(--lime);background:var(--lime);color:var(--ink)}.secondary-button{border:1px solid var(--line);background:#fff;color:var(--ink-soft)}.outline-button{border:1px solid #dce7d5;background:#fff;color:var(--green)}.icon-button{min-height:40px;padding:0 11px;font-size:12px}.package-summary{padding:18px;border-radius:19px;background:#f1f8ea}.package-summary-head{display:flex;align-items:center;justify-content:space-between}.package-summary-head>div{display:flex;flex-direction:column;gap:3px}.package-summary-head span{color:var(--green);font-size:12px;font-weight:600}.package-summary-head strong{font-size:38px;line-height:1;font-weight:770;letter-spacing:-.06em}.package-summary-head small{margin-left:4px;font-size:15px;letter-spacing:0}.package-summary-actions{display:flex;align-items:flex-end;gap:8px}.package-summary-actions .text-button,.package-stats .consumption-record-link{display:inline-flex;min-height:38px;align-items:center;gap:4px;padding:0 7px;font-size:11px}.package-summary-actions .text-button span,.package-stats .consumption-record-link span{display:inline-grid;min-width:18px;height:18px;place-items:center;border-radius:9px;background:#e4efdc;font-size:10px}.package-stats{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-top:9px;margin-top:13px;border-top:1px solid #dfead5;color:var(--muted);font-size:11px}.package-stats>div{display:flex;min-width:0;flex-wrap:wrap;gap:4px 15px}.package-stats .consumption-record-link{flex:0 0 auto;justify-content:flex-end;color:var(--ink-soft)}.package-stats b{color:var(--ink-soft);font-weight:640}.package-balance-groups{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:8px;margin-top:13px}.package-balance-group{min-width:0;padding:11px;border:1px solid #e2ecd9;border-radius:13px;background:#ffffffbf}.package-balance-group-top{display:flex;align-items:baseline;justify-content:space-between;gap:7px}.package-balance-group-top strong{overflow:hidden;color:var(--ink-soft);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.package-balance-group-top b{flex:0 0 auto;color:var(--green);font-size:12px}.package-balance-group-top small{margin-left:2px;font-size:9px;font-weight:500}.package-balance-group-meta,.package-balance-group-modes{display:flex;flex-wrap:wrap;gap:4px 9px;margin-top:7px;color:var(--muted);font-size:9px}.package-balance-group-modes{padding-top:6px;border-top:1px solid #edf2e9}.package-balance-group-modes span{color:#718377}.purchase-overview{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;padding:14px;margin-bottom:14px;border-radius:16px;background:#f1f8ea}.purchase-overview>div{display:flex;min-width:0;flex-direction:column;gap:6px}.purchase-overview span{color:var(--muted);font-size:10px}.purchase-overview strong{overflow:hidden;color:var(--ink);font-size:16px;text-overflow:ellipsis;white-space:nowrap}.purchase-overview small{margin-left:3px;color:var(--muted);font-size:10px}.purchase-record-list{display:flex;flex-direction:column;gap:11px}.purchase-record-card{padding:15px;border:1px solid var(--line);border-radius:17px;background:#fff}.purchase-record-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding-bottom:12px;border-bottom:1px solid #edf1ee}.purchase-record-heading h2{margin:5px 0 0;font-size:15px}.purchase-mode-tag{display:inline-flex;padding:3px 7px;border-radius:7px;background:#f1f7e9;color:var(--green);font-size:9px}.purchase-record-balance{flex:0 0 auto;color:var(--green);font-size:16px}.purchase-record-balance small{margin-left:2px;font-size:10px;font-weight:500}.purchase-record-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px 14px;padding:13px 0}.purchase-record-grid>div{display:flex;min-width:0;flex-direction:column;gap:4px}.purchase-record-grid span,.purchase-record-note>span{color:var(--muted);font-size:10px}.purchase-record-grid strong{overflow-wrap:anywhere;color:var(--ink-soft);font-size:12px;font-weight:640}.purchase-record-note{padding:10px 11px;border-radius:11px;background:#f8faf8}.purchase-record-note p{margin:4px 0 0;color:var(--ink-soft);font-size:11px;line-height:1.5;overflow-wrap:anywhere}.purchase-record-actions{display:flex;justify-content:flex-end;gap:13px;padding-top:8px}.purchase-record-actions .text-button{display:inline-flex;min-height:34px;align-items:center;gap:4px;padding:0;font-size:10px}.course-header-actions{display:flex;align-items:center}.purchase-record-actions .danger-text{color:var(--danger)}.package-list{margin-top:21px}.mini-section-heading{display:flex;justify-content:space-between;margin:0 1px 8px;color:var(--ink);font-size:14px;font-weight:680}.mini-section-heading span{color:var(--muted);font-size:11px;font-weight:500}.package-row{display:flex;min-height:61px;align-items:center;gap:11px;border-bottom:1px solid #edf1ee}.package-date{display:flex;flex:1;flex-direction:column;gap:3px}.package-date strong{font-size:13px;font-weight:630}.package-date span,.package-remain small{color:var(--muted);font-size:11px}.package-remain{display:flex;min-width:43px;flex-direction:column;gap:3px;text-align:right}.package-remain b{color:var(--green);font-size:12px}.package-amount{color:var(--ink-soft);font-size:12px;font-weight:610}.package-mode-summary{display:flex;flex-direction:column;gap:4px;padding:12px;border-radius:12px;background:#f7faf8;color:var(--ink-soft);font-size:12px}.package-mode-summary span{color:var(--muted);font-size:11px}.course-section-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:10px;margin:25px 0 12px}.course-section-heading p{margin:4px 0 0;color:var(--muted);font-size:10px}.filter-tabs{display:flex;padding:3px;border-radius:12px;background:#f2f5f3}.filter-tabs button{min-height:31px;padding:0 9px;border:0;border-radius:9px;background:transparent;color:var(--muted);font-size:11px;white-space:nowrap}.filter-tabs button.selected{background:#fff;color:var(--green);box-shadow:0 1px 4px #16342814;font-weight:650}.small-tabs{flex:0 0 auto}.range-switch{display:flex;gap:6px;margin-bottom:10px}.range-switch button{min-height:31px;padding:0 11px;border:1px solid transparent;border-radius:9px;background:transparent;color:var(--muted);font-size:11px}.range-switch button.selected{border-color:#e3eadf;background:#fff;color:var(--green)}.month-picker{min-height:32px;padding:0 8px;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink-soft);font-size:12px}.course-list,.event-list{display:flex;flex-direction:column;gap:10px}.tip-banner{display:flex;align-items:flex-start;gap:9px;padding:12px;margin-top:17px;border-radius:13px;background:#f7faf8;color:#75867f}.tip-mark{display:grid;width:18px;height:18px;flex:0 0 auto;place-items:center;border:1px solid #aac59e;border-radius:50%;color:var(--green);font-family:Georgia,serif;font-size:12px;font-weight:700}.tip-banner p{margin:0;font-size:11px;line-height:1.6}.empty-state{display:flex;min-height:220px;flex-direction:column;align-items:center;justify-content:center;padding:28px;border:1px dashed #dce6e0;border-radius:18px;text-align:center}.empty-state .empty-icon{margin-bottom:11px}.empty-state strong{font-size:15px}.empty-state p{margin:6px 0 14px;color:var(--muted);font-size:12px}.small-empty{min-height:175px;border:0;background:#fafcfb}.event-overview{display:flex;align-items:center;gap:12px;padding:16px;margin-bottom:16px;border-radius:17px;background:#f7faf4}.trophy-orb{display:grid;width:47px;height:47px;place-items:center;border-radius:16px;background:#fff2e2;color:#b98147}.event-overview strong{font-size:14px}.event-overview p{margin:4px 0 0;color:var(--muted);font-size:11px}.event-tabs{width:max-content;margin:0 0 13px}.event-card{display:flex;gap:14px;padding:16px;border:1px solid var(--line);border-radius:18px;background:#fff}.event-date-block{flex-basis:48px}.event-status{display:inline-block;padding:3px 7px;margin-top:5px;border-radius:7px;background:#f1f7e9;color:#668746;font-size:10px}.event-meta{margin-top:8px;color:var(--muted);font-size:11px}.event-meta.reminder-text{color:#9a7043}.profile-card{display:flex;align-items:center;gap:12px;padding:15px;border:1px solid var(--line);border-radius:17px}.profile-avatar{display:grid;width:48px;height:48px;place-items:center;border-radius:50%;background:#e7f3de;color:var(--green);font-size:21px;font-weight:700}.profile-info{display:flex;flex:1;flex-direction:column;gap:4px}.profile-info strong{font-size:15px}.profile-info span{color:var(--muted);font-size:11px}.my-tabs{display:flex;gap:18px;padding:18px 0 10px;border-bottom:1px solid var(--line)}.my-tabs button{position:relative;padding:2px 0 9px;border:0;background:transparent;color:var(--muted);font-size:13px}.my-tabs button.selected{color:var(--green);font-weight:680}.my-tabs button.selected:after{position:absolute;right:0;bottom:-11px;left:0;height:2px;border-radius:2px;background:var(--lime-strong);content:""}.spending-total{display:flex;flex-direction:column;align-items:flex-start;padding:20px 3px 16px}.spending-total span{color:var(--muted);font-size:12px}.spending-total strong{margin:4px 0;font-size:39px;line-height:1.1;font-weight:770;letter-spacing:-.06em}.spending-total small{color:var(--muted);font-size:11px}.spending-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;padding:14px;margin:18px 0 13px;border:1px solid var(--line);border-radius:17px;background:#fbfcfb}.spending-metrics article{display:flex;min-width:0;flex-direction:column;gap:5px;padding:4px}.spending-metrics article:first-child{grid-column:1/-1;padding-bottom:11px;border-bottom:1px solid #edf1ee}.spending-metrics span{color:var(--muted);font-size:10px}.spending-metrics strong{overflow:hidden;color:var(--ink);font-size:20px;text-overflow:ellipsis;white-space:nowrap}.spending-metrics small{color:var(--muted);font-size:9px;line-height:1.4}.spending-metrics .consumption-metric strong{color:var(--green)}.consumption-cost-note{padding:9px 11px;margin:0 0 13px;border-radius:11px;background:#f7faf8;color:var(--muted);font-size:10px;line-height:1.55}.spending-breakdown{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 18px;padding:14px;border:1px solid var(--line);border-radius:16px;background:#fff}.spending-breakdown>div{display:grid;grid-template-columns:1fr auto;gap:5px;color:var(--muted);font-size:11px}.spending-breakdown strong{color:var(--ink-soft);font-size:11px;font-weight:630}.spend-line{grid-column:1/-1;height:4px;overflow:hidden;border-radius:4px;background:#edf2ee}.spend-line i{display:block;height:100%;border-radius:inherit;background:#b9dc93}.expense-heading{display:flex;align-items:center;justify-content:space-between;padding:21px 0 7px}.expense-heading>div{display:flex;align-items:baseline;gap:8px}.expense-heading span{color:var(--muted);font-size:11px}.expense-list{display:flex;flex-direction:column}.expense-row{display:flex;min-height:67px;align-items:center;gap:11px;border-bottom:1px solid #edf1ee}.expense-icon{display:grid;width:39px;height:39px;flex:0 0 auto;place-items:center;border-radius:13px;color:#71867b;background:#f0f5f1}.expense-icon.cat-1{background:#edf3e6;color:#6c884e}.expense-icon.cat-2{background:#fff2e5;color:#b17a45}.expense-icon.cat-4{background:#f1eef8;color:#8373a2}.expense-icon.cat-5{background:#eef2f5;color:#718394}.expense-copy{display:flex;min-width:0;flex:1;flex-direction:column;gap:3px}.expense-copy strong{overflow:hidden;font-size:12px;font-weight:650;text-overflow:ellipsis;white-space:nowrap}.expense-copy span,.expense-copy small{color:var(--muted);font-size:10px}.expense-amount{color:var(--ink-soft);font-size:13px;font-weight:650;white-space:nowrap}.account-panel{display:flex;align-items:center;gap:12px;padding:20px 3px}.offline-trial-status{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px;border:1px solid var(--line);border-radius:16px;background:#fbfcfa}.offline-trial-status.is-demo{border-color:#e7edcf;background:#f7faee}.offline-trial-status.is-trial{border-color:#e5ece7;background:#f5f8f6}.offline-trial-status>div{display:flex;min-width:0;flex-direction:column;gap:3px}.offline-trial-status span{color:var(--muted);font-size:10px}.offline-trial-status strong{color:var(--ink);font-size:14px}.offline-trial-status p{margin:2px 0 0;color:var(--muted);font-size:10px;line-height:1.45}.offline-trial-status .outline-button{min-height:38px;flex:0 0 auto;padding:0 10px;font-size:11px}.account-icon{display:grid;width:42px;height:42px;place-items:center;border-radius:14px;background:#f0f5f1;color:var(--green)}.account-panel strong{font-size:14px}.account-panel p{margin:4px 0 0;color:var(--muted);font-size:11px}.account-details{display:grid;gap:5px;margin-top:7px}.account-details span{display:flex;align-items:baseline;gap:8px;color:var(--muted);font-size:10px}.account-details b{color:var(--ink-soft);font-size:12px;font-weight:620;overflow-wrap:anywhere}.backup-card{padding:15px;border:1px solid var(--line);border-radius:17px}.consumption-workflow-tabs{display:grid;width:100%;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;margin:14px 0 0}.consumption-workflow-tabs button{display:flex;min-height:43px;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:4px 8px}.consumption-workflow-tabs button small{color:var(--muted);font-size:10px;font-weight:500}.consumption-workflow-tabs button.selected small{color:var(--green)}.consumption-record-link{display:inline-flex;min-height:38px;flex:0 0 auto;align-items:center;gap:4px;padding:0 7px;color:var(--ink-soft);font-size:11px;white-space:nowrap}.consumption-record-link span{display:inline-grid;min-width:18px;height:18px;place-items:center;border-radius:9px;background:#e4efdc;font-size:10px}.calendar-package-empty{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px;margin-top:12px;border:1px solid #e4ebdf;border-radius:13px;background:#f7faf5}.calendar-package-empty>div{display:flex;min-width:0;flex-direction:column;gap:4px}.calendar-package-empty strong{color:var(--ink-soft);font-size:11px}.calendar-package-empty span{color:var(--muted);font-size:10px;line-height:1.4}.calendar-package-empty .outline-button{min-height:34px;flex:0 0 auto;padding:0 9px;font-size:10px}.package-picker-dialog .dialog-header{align-items:flex-start}.package-picker-dialog .dialog-header h2{margin:0;font-size:19px}.package-picker-dialog .dialog-header p{margin:5px 0 0;color:var(--muted);font-size:11px}.package-picker-list{display:flex;flex-direction:column;gap:8px}.package-picker-option{display:flex;min-height:62px;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:13px;background:#fff;cursor:pointer}.package-picker-option.selected{border-color:#bad69e;background:#f5faef}.package-picker-option input{width:19px;height:19px;flex:0 0 auto;accent-color:var(--green)}.package-picker-option>span{display:flex;min-width:0;flex:1;flex-direction:column;gap:4px}.package-picker-option strong{color:var(--ink-soft);font-size:12px}.package-picker-option small{color:var(--muted);font-size:10px}.package-picker-option b{color:var(--green);font-size:11px;font-weight:620}.package-picker-empty{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 0}.package-picker-empty p{color:var(--muted);font-size:12px}.weekly-repeat{padding:12px;border:1px solid var(--line);border-radius:13px;background:#f8faf8}.repeat-toggle{display:flex;align-items:center;gap:9px;color:var(--ink-soft);cursor:pointer}.repeat-toggle input{width:18px;height:18px;accent-color:var(--green)}.repeat-toggle span{display:flex;flex-direction:column;gap:3px}.repeat-toggle strong{font-size:12px;font-weight:650}.repeat-toggle small{color:var(--muted);font-size:10px}.weekday-picker{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px;margin:13px 0}.weekday-picker label{position:relative;display:grid;min-height:34px;place-items:center;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--muted);font-size:10px;cursor:pointer}.weekday-picker label.selected{border-color:#b8d39e;background:#eef7e6;color:var(--green);font-weight:700}.weekday-picker input{position:absolute;width:1px;height:1px;opacity:0}.weekly-repeat>.field{margin-top:12px}.monthly-consumption{margin-top:20px}.calendar-toolbar{display:flex;min-height:42px;align-items:center;justify-content:center;gap:8px}.calendar-toolbar>strong{min-width:104px;text-align:center;font-size:15px}.calendar-today{min-height:30px;padding:0 10px;margin-left:auto;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--green);font-size:11px}.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px;padding:7px 0 12px}.calendar-weekday{display:grid;min-height:29px;place-items:center;color:var(--muted);font-size:10px}.calendar-blank{min-height:54px}.calendar-day{display:flex;min-width:0;min-height:54px;flex-direction:column;align-items:center;justify-content:flex-start;gap:3px;padding:6px 1px 3px;border:1px solid transparent;border-radius:11px;background:transparent;color:var(--ink-soft);font-size:12px}.calendar-day.today>span{color:var(--green);font-weight:750}.calendar-day.selected{border-color:#d8e8cf;background:#f1f8ea;color:var(--green);font-weight:700}.calendar-day small{min-width:24px;padding:1px 4px;border-radius:6px;background:#e2efd8;color:#577742;font-size:8px;font-weight:600}.selected-date-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 0;border-top:1px solid var(--line)}.selected-date-heading>div{display:flex;flex-direction:column;gap:4px}.selected-date-heading strong{font-size:13px}.selected-date-heading span{color:var(--muted);font-size:10px}.package-choice-list{padding:4px 12px;margin-bottom:10px;border-radius:13px;background:#f7faf8}.package-choice{display:flex;min-height:59px;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid #e9efeb}.package-choice:last-child{border-bottom:0}.package-choice>div{display:flex;flex-direction:column;gap:4px}.package-choice strong{font-size:12px}.package-choice span{color:var(--muted);font-size:10px}.package-choice .outline-button{min-height:34px;padding:0 10px;border-radius:10px;font-size:11px}.consumption-log{padding:12px 0 3px;border-top:1px solid var(--line)}.consumption-log h3{margin:0 0 5px;font-size:13px}.consumption-row{display:flex;min-height:54px;align-items:center;gap:9px;border-bottom:1px solid #edf1ee}.consumption-row>div{display:flex;flex:1;flex-direction:column;gap:3px}.consumption-row strong{font-size:11px;font-weight:640}.consumption-row small{color:var(--muted);font-size:10px}.consumption-row.is-reversed{opacity:.62}.consumption-row button{font-size:11px}.consumption-history{padding-top:1px;margin-top:17px;margin-bottom:20px}.consumption-history-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:11px}.consumption-history-heading h2{margin:0;font-size:17px;font-weight:720;letter-spacing:-.035em}.consumption-history-heading p{margin:4px 0 0;color:var(--muted);font-size:11px}.consumption-history-heading>span{padding:6px 9px;border-radius:9px;background:#f1f6ee;color:var(--green);font-size:10px;white-space:nowrap}.consumption-history-list{display:grid;gap:9px}.consumption-history-card{padding:15px;border:1px solid var(--line);border-radius:17px;background:#fff}.consumption-history-card.is-reversed{background:#fafbfa}.consumption-history-main{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding-bottom:12px;border-bottom:1px solid #edf1ee}.consumption-history-title{display:flex;min-width:0;align-items:center;flex-wrap:wrap;gap:7px}.consumption-history-title>strong{overflow:hidden;font-size:15px;font-weight:680;text-overflow:ellipsis;white-space:nowrap}.consumption-type-tag{flex:0 0 auto;padding:4px 7px;border-radius:7px;font-size:9px;font-weight:650}.consumption-type-tag.course{background:#eef5e8;color:#4c7437}.consumption-type-tag.calendar{background:#edf4f4;color:#4d7270}.consumption-delta{flex:0 0 auto;color:var(--green);font-size:16px;font-weight:650;white-space:nowrap}.consumption-history-card.is-reversed .consumption-delta{color:var(--muted)}.consumption-history-details{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px 14px;padding:13px 0}.consumption-history-details>span{display:flex;min-width:0;flex-direction:column;gap:4px;color:var(--muted);font-size:10px}.consumption-history-details b{overflow-wrap:anywhere;color:var(--ink-soft);font-size:12px;font-weight:640}.consumption-history-footer{display:flex;min-height:34px;align-items:center;justify-content:space-between;gap:10px;padding-top:8px;border-top:1px solid #edf1ee;color:var(--muted);font-size:10px}.consumption-history-footer .undo-link{flex:0 0 auto;font-size:11px}.consumption-history-empty{display:flex;flex-direction:column;align-items:center;padding:23px 14px;border:1px dashed #dce6e0;border-radius:17px;text-align:center}.consumption-history-empty strong{margin-top:9px;font-size:14px}.consumption-history-empty p{margin:4px 0 0;color:var(--muted);font-size:11px}.calendar-note{margin:8px 0;color:var(--muted);font-size:11px;line-height:1.5}.backup-head{display:flex;justify-content:space-between;color:var(--green)}.backup-head strong{color:var(--ink);font-size:14px}.backup-head p{margin:5px 0 0;color:var(--muted);font-size:11px}.backup-actions{display:flex;gap:9px;padding-top:15px}.file-button{position:relative;overflow:hidden}.file-button input{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer}.signout-button{display:flex;width:100%;min-height:48px;align-items:center;gap:10px;padding:0 4px;margin-top:13px;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--danger);font-size:13px}.mode-switch-button{display:flex;width:100%;min-height:43px;align-items:center;justify-content:center;margin-top:10px;border:1px solid var(--line);border-radius:12px;background:#fff;color:var(--green);font-size:12px;font-weight:650}.privacy-note{color:var(--muted);font-size:11px;line-height:1.65}.bottom-dock{z-index:5;flex:0 0 auto;padding:8px 14px max(7px,env(safe-area-inset-bottom));border-top:1px solid #e9eeeb;background:#fffffff5}.bottom-nav{display:grid;width:100%;max-width:560px;grid-template-columns:repeat(4,1fr);gap:4px;margin:0 auto}.nav-item{display:flex;min-height:51px;flex-direction:column;align-items:center;justify-content:center;gap:3px;border:0;border-radius:13px;background:transparent;color:#81908a;font-size:10px}.nav-item.is-active{color:var(--green);font-weight:650}.nav-item.is-active svg{stroke-width:2.2}.toast{position:fixed;z-index:20;right:16px;bottom:calc(83px + env(safe-area-inset-bottom));left:16px;width:fit-content;max-width:calc(100% - 32px);padding:11px 15px;margin:0 auto;border-radius:12px;background:#1f342b;color:#fff;font-size:13px;box-shadow:0 5px 20px #0920152e}.dialog-backdrop{position:fixed;z-index:30;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-end;justify-content:center;padding:18px 12px max(12px,env(safe-area-inset-bottom));background:#0f20196b;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.dialog{position:relative;width:min(100%,520px);max-height:min(90dvh,760px);overflow-y:auto;padding:20px;border-radius:23px;background:#fff;box-shadow:0 20px 60px #081c1238;animation:sheet-in .18s ease-out}@keyframes sheet-in{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}.dialog-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:14px}.dialog-header h2,.confirm-dialog h2{margin:0;font-size:19px;font-weight:720;letter-spacing:-.035em}.dialog-close{display:grid;width:36px;height:36px;place-items:center;border:0;border-radius:50%;background:#f4f7f5;color:#718079}.form-dialog form{display:flex;flex-direction:column;gap:12px}.field{display:flex;min-width:0;flex:1;flex-direction:column;gap:6px;color:var(--ink-soft);font-size:12px;font-weight:580}.field input,.field select{width:100%;min-height:46px;padding:0 12px;border:1px solid var(--line);border-radius:12px;background:#fbfcfb;font-size:16px;font-weight:430}.field-grid{display:flex;gap:10px}.dialog-actions{display:flex;justify-content:flex-end;gap:9px;padding-top:9px}.confirm-dialog{align-self:center;padding:24px}.confirm-dialog .dialog-close{position:absolute;top:15px;right:15px}.confirm-mark{display:grid;width:47px;height:47px;place-items:center;margin-bottom:15px;border-radius:16px;background:#fff4e6;color:#b17e4d}.confirm-dialog p{margin:9px 0 15px;color:var(--muted);font-size:13px;line-height:1.65}.dialog-error{padding:10px 12px;margin:0!important;border:1px solid #f0d7d2;border-radius:11px;background:#fff7f5;color:var(--danger)!important;font-size:12px!important;line-height:1.55}.confirm-dialog .dialog-actions{padding-top:0}.auth-page{display:flex;min-height:100dvh;flex-direction:column;justify-content:center;padding:28px 21px max(24px,env(safe-area-inset-bottom));background:#f7faf8}.auth-brand{display:flex;flex-direction:column;align-items:center;margin:0 auto 22px;text-align:center}.auth-brand h1{margin:12px 0 5px;font-size:26px;font-weight:760;letter-spacing:-.055em}.auth-brand p{margin:0;color:var(--muted);font-size:13px}.auth-card{width:min(100%,410px);padding:23px;margin:0 auto;border:1px solid var(--line);border-radius:22px;background:#fff;box-shadow:0 8px 28px #1737280a}.mode-choice-card{display:flex;flex-direction:column;gap:11px}.mode-choice-card>p{margin-bottom:7px;line-height:1.6}.mode-choice{width:100%;min-height:72px;justify-content:space-between;padding:12px 14px;white-space:normal;text-align:left}.mode-choice>span{display:flex;flex-direction:column;gap:5px}.mode-choice strong{font-size:14px}.mode-choice small{color:var(--muted);font-size:10px;font-weight:450;line-height:1.4}.mode-choice.primary-button small{color:#425640}.auth-card h2{margin:0;font-size:19px}.auth-card>p{margin:6px 0 19px;color:var(--muted);font-size:12px}.auth-card label{display:flex;flex-direction:column;gap:7px;margin:12px 0;color:var(--ink-soft);font-size:12px}.auth-card input{min-height:47px;padding:0 12px;border:1px solid var(--line);border-radius:12px;background:#fbfcfb;font-size:16px}.full-width{width:100%;margin-top:8px}.text-button{border:0;background:transparent;color:var(--green)}.auth-switch{display:block;padding:10px 2px 0;margin:6px auto 0;font-size:12px}.form-error{color:var(--danger)!important;font-size:12px!important}.auth-foot{margin:17px auto 0;color:#98a49e;font-size:11px;text-align:center}.form-notice{padding:10px 12px;margin:11px 0;border:1px solid #d7e8cd;border-radius:11px;background:#f3f9ee;color:var(--green);font-size:12px;line-height:1.55}.field-note{color:var(--muted);font-size:10px;font-weight:400;line-height:1.45}.admin-entry-link,.admin-back-link{display:block;width:fit-content;padding:12px 8px 2px;margin:8px auto 0;font-size:12px;text-align:center;text-decoration:none}.admin-page{min-height:100dvh;padding:0 18px max(30px,env(safe-area-inset-bottom));background:#f7faf8}.admin-header{display:flex;width:min(100%,980px);min-height:65px;align-items:center;justify-content:space-between;margin:0 auto;border-bottom:1px solid var(--line)}.admin-header .brand{display:inline-flex;align-items:center;gap:9px;color:var(--ink);font-size:14px;font-weight:700;text-decoration:none}.admin-header>.text-button{padding:9px 4px;color:var(--muted);font-size:12px}.admin-login-card{margin-top:max(70px,12vh)}.admin-login-card h1{margin:4px 0 0;font-size:23px}.admin-login-card .muted{margin-bottom:18px}.admin-eyebrow{color:var(--green);font-size:11px;font-weight:700;letter-spacing:.04em}.admin-content{width:min(100%,760px);margin:0 auto;padding:32px 0 45px}.admin-title-row{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:19px}.admin-title-row h1{margin:5px 0;font-size:28px;letter-spacing:-.04em}.admin-title-row p{margin:0;color:var(--muted);font-size:12px}.admin-search{display:flex;gap:9px;padding:12px;border:1px solid var(--line);border-radius:16px;background:#fff}.admin-search input{min-width:0;min-height:43px;flex:1;padding:0 12px;border:1px solid var(--line);border-radius:11px;background:#fbfcfb;font-size:16px}.admin-status-filter{display:flex;gap:5px;padding:3px;margin:15px 0 19px;border-radius:12px;background:#edf2ee}.admin-status-filter button{min-height:34px;flex:1;padding:0 6px;border:0;border-radius:9px;background:transparent;color:var(--muted);font-size:11px}.admin-status-filter button.selected{background:#fff;color:var(--ink);box-shadow:0 1px 3px #14281e12}.admin-message{margin:12px 0}.admin-list-heading{display:flex;align-items:baseline;justify-content:space-between;margin:0 2px 9px}.admin-list-heading strong{font-size:14px}.admin-list-heading span{color:var(--muted);font-size:10px}.admin-account-list{display:flex;flex-direction:column;gap:10px}.admin-account-card{padding:15px;border:1px solid var(--line);border-radius:16px;background:#fff}.admin-account-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.admin-account-top h2{margin:0 0 5px;font-size:15px}.admin-phone{color:var(--ink-soft);font-size:13px;font-variant-numeric:tabular-nums}.admin-status{flex:0 0 auto;padding:5px 8px;border-radius:9px;font-size:10px}.status-pending{background:#fff4e5;color:#986b2f}.status-active{background:#eff7e9;color:var(--green)}.status-rejected{background:#fff0ee;color:var(--danger)}.admin-account-meta{display:flex;flex-direction:column;gap:4px;padding-top:11px;margin-top:11px;border-top:1px solid #edf1ee;color:var(--muted);font-size:10px}.admin-account-actions{display:flex;justify-content:flex-end;gap:8px;padding-top:12px}.admin-empty{padding:34px 12px;border:1px dashed #dce5df;border-radius:16px;color:var(--muted);font-size:12px;text-align:center}.admin-confirm{align-self:center}@media(min-width:700px){.app-shell{min-height:650px}.main-content{padding:25px 38px 35px}.home-page{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:20px}.home-heading,.balance-card,.quick-actions,.section-title-row,.home-page>.course-card,.home-page>.empty-card,.spend-card{grid-column:1/-1}.home-page>.section-title-row.spaced{grid-column:1/-1}.home-page>.event-reminder{grid-column:1/-1}.balance-card{min-height:190px}.quick-actions{max-width:480px;justify-self:center;width:100%}.dialog-backdrop{align-items:center}.admin-account-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:390px){.topbar,.main-content{padding-right:17px;padding-left:17px}.balance-card{min-height:157px;padding:18px 19px}.balance-number{font-size:51px}.progress-ring{width:99px;height:99px}.progress-ring>div{width:75px;height:75px}.course-section-heading{flex-wrap:wrap}.quick-icon{width:44px;height:44px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
