:root{--navy:#172d50;--blue:#eaf1fb;--paper:#fffef9;--bg:#f5f4ef;--ink:#24354c;--muted:#778295;--line:#dfe4e8;--red:#a44e3c;--redbg:#fff0e9;--green:#3f745f;--font:'Apple SD Gothic Neo','Malgun Gothic',sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.55 var(--font);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;border:0}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button:disabled{cursor:wait;opacity:.55}button:focus-visible,a:focus-visible{outline:3px solid #82a6d3;outline-offset:3px}a{color:inherit;text-decoration:none}h1,h2,h3,p{margin:0}h1,h2,h3{letter-spacing:-.045em}small{font-size:12px}.top{height:88px;background:var(--paper);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 max(28px,calc((100vw - 1320px)/2));gap:12px}.brand{display:flex;align-items:center;gap:11px;font-size:22px;font-weight:800}.brand small{display:block;font-size:11px;font-weight:400;color:var(--muted);letter-spacing:.02em}.brand-icon{width:43px;height:44px;border-radius:13px 13px 13px 3px;background:var(--navy);color:#fff;display:grid;place-items:center}.top-tools{display:flex;align-items:center;gap:10px}.subtle{background:transparent;border:1px solid var(--line);border-radius:8px;min-height:40px;padding:7px 12px;font-size:13px}.top-tools #connection{font-size:11px;color:var(--muted)}main{max-width:1320px;margin:auto;padding:32px 28px 110px}.welcome{max-width:690px;margin:28px auto 0}.eyebrow{font-size:12px;color:var(--muted);margin-bottom:8px}.welcome h1{font-size:33px;line-height:1.35}.welcome>p{color:var(--muted);margin:13px 0 26px;font-size:14px;word-break:keep-all}.member-choices{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.choice{min-height:82px;text-align:left;border:1px solid var(--line);border-radius:13px;background:var(--paper);padding:17px;font-weight:700;display:flex;align-items:center;gap:12px}.choice:hover{background:var(--blue);border-color:#afc4df}.avatar{display:grid;place-items:center;flex-shrink:0;width:35px;height:35px;border-radius:50%;background:#e7edf3;color:#627ea1;font-size:13px}.notice{background:#edf1f5;border-radius:10px;padding:13px 15px;color:#697b91;font-size:12px;line-height:1.7;margin:20px 0}.warning{background:#fff1df;color:#8d6334}.heading{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:21px}.heading h1{font-size:30px;line-height:1.3}.heading p{font-size:13px;color:var(--muted);margin-top:6px}.year-select{min-height:43px;padding:7px 14px;border:1px solid var(--line);border-radius:9px;background:var(--paper);font-weight:700}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:23px}.stat{background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:20px;min-width:0}.stat label{font-size:13px;color:var(--muted)}.stat strong{display:block;font-size:28px;line-height:1.3;margin:10px 0 6px;letter-spacing:-.04em;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.stat small{display:block;color:var(--muted);font-size:11px}.stat.late strong{color:var(--red)}.stat.advance{background:var(--blue)}.stat.advance strong{color:#4f76a8}.stat.balance{background:var(--navy);border-color:var(--navy);color:#fff}.stat.balance label,.stat.balance small{color:#b8c8df}.panel{border:1px solid var(--line);border-radius:15px;background:var(--paper);padding:24px;margin-bottom:20px;min-width:0}.panel h2{font-size:20px}.panel h3{font-size:17px}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:17px}.panel-head p{font-size:12px;color:var(--muted);margin-top:4px}.months{display:grid;grid-template-columns:repeat(6,1fr);gap:10px}.month{display:flex;flex-direction:column;align-items:flex-start;gap:4px;min-height:85px;padding:12px;border:1px solid #e1e8ef;background:#f5f8fc;border-radius:10px;font-variant-numeric:tabular-nums}.month>span{font-size:12px;color:#687d97}.month strong{font-size:16px}.month small{font-size:11px;color:#68809c}.month.late{background:var(--redbg);border-color:#f0d5c9}.month.late strong,.month.late small{color:var(--red)}.month.prepaid{background:#dfeafb}.month.future{background:#f4f4ee;border-color:#e5e6dd;color:#9aa393}.month.current{box-shadow:inset 0 0 0 1px #809cbc}.month:hover{filter:brightness(.98)}.helper{font-size:12px;color:var(--muted);margin-top:13px}.actions{display:flex;gap:9px;flex-wrap:wrap;margin:0 0 20px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;background:var(--navy);color:#fff;padding:11px 17px;border-radius:9px;font-size:14px;font-weight:700;min-height:45px}.btn.secondary{background:var(--paper);border:1px solid var(--line);color:var(--ink)}.btn.danger{background:#9c4e3d}.table-wrap{overflow-x:auto}.annual{width:100%;border-collapse:collapse;white-space:nowrap;min-width:1050px;font-size:12px;font-variant-numeric:tabular-nums}.annual th{padding:13px 9px;border-bottom:1px solid var(--line);background:#f0f3f8;color:#6a7e99;text-align:center}.annual td{padding:14px 7px;border-bottom:1px solid #e9edf0;text-align:center}.annual th:first-child,.annual td:first-child{position:sticky;left:0;background:var(--paper);text-align:left;z-index:1}.badge{display:inline-block;padding:4px 8px;border-radius:6px;background:var(--blue);color:#5275a3;font-size:11px;white-space:nowrap}.badge.late{background:var(--redbg);color:var(--red)}.rows{display:grid}.entry{padding:17px 0;border-bottom:1px solid #e8ecf0;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center}.entry:last-child{border:0}.entry strong{display:block;font-size:15px;overflow-wrap:anywhere}.entry p{font-size:12px;color:var(--muted);margin-top:4px}.amount{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}.entry .amount strong{font-size:17px}.amount.income strong{color:var(--green)}.row-buttons{display:flex;gap:7px;justify-content:flex-end;flex-wrap:wrap;margin-top:6px}.link-button{background:transparent;font-size:12px;color:#5a78a1;min-height:35px;padding:5px 4px;text-decoration:underline;text-underline-offset:4px}.entry-form{display:grid;gap:16px}.field{display:grid;gap:7px;font-size:14px;font-weight:700}.field input,.field textarea,.field select{width:100%;padding:11px 12px;min-height:47px;font-size:16px;font-weight:400;background:#fff;border:1px solid #d6dfe9;border-radius:8px;min-width:0}.field input[inputmode=numeric]{font-variant-numeric:tabular-nums;font-weight:700}.field small{font-weight:400;color:var(--muted)}.form-pair{display:grid;grid-template-columns:1fr 1fr;gap:12px}.rules-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.rule{background:#f0f4fa;border-radius:11px;padding:18px}.rule label{display:block;color:#71839c;font-size:12px;margin-bottom:6px}.rule strong{font-size:19px;word-break:keep-all}.rule p{font-size:13px;color:#6d7f94;margin-top:7px}.tabs{position:fixed;bottom:0;left:0;right:0;background:#fffef9f5;backdrop-filter:blur(14px);border-top:1px solid var(--line);display:flex;justify-content:center;gap:40px;z-index:20;padding:8px 16px max(9px,env(safe-area-inset-bottom))}.tabs button{background:transparent;min-width:100px;min-height:48px;display:flex;flex-direction:column;justify-content:center;gap:2px;align-items:center;color:#9aabc0;font-size:20px}.tabs button span{font-size:13px}.tabs button.active{color:var(--navy);font-weight:800}.loading,.empty{padding:40px 15px;text-align:center;color:var(--muted);font-size:14px}.error{padding:22px;background:#fff0e9;border:1px solid #efd5ca;border-radius:12px;color:#954a36}.error .btn{margin-top:14px}.error-text{color:var(--red);font-size:13px;white-space:pre-line}.loading-skeleton{height:130px;border-radius:12px;background:linear-gradient(100deg,#e8edf2,#f7f9fb,#e8edf2);background-size:200% 100%;animation:shimmer 1.4s infinite;margin-bottom:15px}@keyframes shimmer{to{background-position:-200% 0}}#toast{position:fixed;bottom:95px;left:50%;transform:translateX(-50%);z-index:80;background:#172d50;color:#fff;border-radius:9px;padding:13px 18px;font-size:14px;max-width:calc(100vw - 32px);width:max-content;display:none}dialog{border:1px solid #d8e1ed;border-radius:17px;padding:0;width:min(590px,calc(100vw - 28px));max-height:calc(100dvh - 30px);color:var(--ink);background:var(--paper);box-shadow:0 25px 120px #162e4830;overflow:auto}dialog::backdrop{background:#162e4866;backdrop-filter:blur(3px)}.dialog-head{padding:19px 23px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;background:var(--paper);z-index:2}.dialog-head h2{font-size:21px}.dialog-head button{background:transparent;width:40px;height:40px;font-size:28px}#dialogBody{padding:22px 23px}.allocation{background:var(--blue);border-radius:10px;padding:16px;font-size:13px;margin:10px 0}.allocation-row{display:flex;justify-content:space-between;gap:15px;padding:5px 0}.upload-actions{display:flex;gap:10px;margin:12px 0}.upload-label{position:relative;display:flex;align-items:center;justify-content:center;flex:1;min-height:64px;border:1px dashed #a8bcd5;border-radius:10px;background:#f0f5fb;font-size:14px;cursor:pointer}.upload-label input{position:absolute;opacity:0;width:1px;height:1px}.file-preview{border:1px solid var(--line);border-radius:10px;padding:12px;margin:12px 0}.file-preview img{max-width:100%;max-height:240px;object-fit:contain;display:block;margin:auto;cursor:zoom-in}.file-preview p{font-size:12px;margin-top:9px;color:var(--muted)}.receipt-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.receipt-card{border:1px solid var(--line);border-radius:10px;padding:10px}.receipt-card img{width:100%;height:190px;object-fit:contain;cursor:zoom-in}.receipt-card p{font-size:11px;color:var(--muted);margin-top:7px}.zoom-area{height:55dvh;overflow:auto;touch-action:none;background:#e7ebef;border:1px solid var(--line);border-radius:8px}.zoom-area img{display:block;width:100%;transform-origin:top left;user-select:none;-webkit-user-drag:none}.zoom-tools{display:flex;gap:9px;margin:10px 0}.zoom-tools button{min-height:44px;min-width:50px}.meta{font-size:11px;color:var(--muted);line-height:1.7;margin:17px 0}.storage-meter{width:100%;height:12px}.admin-members{display:grid;grid-template-columns:repeat(2,1fr);gap:9px}.admin-member{display:flex;align-items:center;justify-content:space-between;gap:9px;border:1px solid var(--line);border-radius:9px;padding:12px;font-size:13px}.check-field{display:flex;align-items:center;gap:9px;font-size:13px;min-height:44px}.check-field input{width:20px;height:20px}pre{white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.6 monospace}[hidden]{display:none!important}.mobile-member-select{display:none}body.modal-open{overflow:hidden}
@media(max-width:760px){.top{height:69px;padding:0 17px}.brand{font-size:18px;gap:8px}.brand-icon{width:34px;height:35px;font-size:18px;border-radius:10px 10px 10px 3px}.brand small{font-size:9px}.top-tools{gap:5px}.top-tools #connection{display:none}.subtle{font-size:11px;padding:7px 8px;min-height:37px}main{padding:21px 16px 105px}.welcome{margin:16px auto 0}.welcome h1{font-size:28px}.welcome>p{font-size:13px;margin-bottom:20px}.member-choices{grid-template-columns:repeat(2,1fr);gap:9px}.choice{font-size:15px;padding:14px;min-height:72px;gap:9px}.choice .avatar{width:29px;height:29px;font-size:11px}.heading{margin-bottom:17px;gap:8px;align-items:start}.heading h1{font-size:23px;line-height:1.4}.heading p{font-size:11px}.year-select{font-size:13px;min-height:40px;padding:7px 9px;max-width:100px}.eyebrow{font-size:11px;margin-bottom:4px}.stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:17px}.stat{padding:15px 13px;border-radius:12px}.stat label{font-size:12px}.stat strong{font-size:23px;margin:8px 0 5px}.stat small{font-size:10px;line-height:1.45}.panel{padding:18px 15px;border-radius:12px;margin-bottom:17px}.panel h2{font-size:18px}.panel-head{gap:10px;margin-bottom:14px}.panel-head p{font-size:11px}.months{grid-template-columns:repeat(4,1fr);gap:7px}.month{padding:9px 8px;min-height:70px;gap:3px;border-radius:8px}.month>span{font-size:11px}.month strong{font-size:14px}.month small{font-size:10px}.helper{font-size:11px;margin-top:11px}.actions{gap:7px;margin-bottom:17px}.btn{font-size:13px;padding:10px 12px;min-height:44px}.actions .btn{flex:1;min-width:30%}.desktop-table{display:none}.mobile-member-select{display:block;margin-bottom:13px;width:100%;min-height:45px;background:#fff;border:1px solid var(--line);border-radius:8px;padding:8px;font-size:15px}.rules-grid{grid-template-columns:1fr;gap:11px}.rule{padding:16px}.rule strong{font-size:18px}.tabs{gap:0;justify-content:space-around;padding-top:7px}.tabs button{flex:1;min-width:0;min-height:48px;font-size:20px}.tabs button span{font-size:12px}.entry{gap:9px;padding:15px 0}.entry strong{font-size:14px}.entry p{font-size:11px}.entry .amount strong{font-size:15px}.row-buttons{gap:6px}.link-button{font-size:11px}.notice{font-size:11px;padding:12px}.dialog-head{padding:14px 17px}.dialog-head h2{font-size:19px}#dialogBody{padding:19px 17px}.form-pair{grid-template-columns:1fr 1fr;gap:9px}.field{font-size:13px}.meta{font-size:10px}.admin-members{grid-template-columns:1fr}.receipt-grid{gap:9px}.receipt-card img{height:155px}.upload-label{font-size:12px}.stat.balance strong{font-size:22px}}
@media(max-width:380px){main{padding-top:17px}.heading h1{font-size:21px}.stat{padding:13px 12px}.stat strong{font-size:21px}.stat.balance strong{font-size:21px}.months{gap:6px}.month{min-height:65px;padding:7px}.month strong{font-size:13px}.panel{padding:15px 13px}.brand small{display:none}.choice{padding:11px}.welcome h1{font-size:26px}}
@media(prefers-reduced-motion:reduce){.loading-skeleton{animation:none}}
.preview-zoom{height:240px}.preview-zoom img{max-width:none;max-height:none;margin:0;width:100%;display:block}
@media(max-width:480px) and (max-height:740px){.top{height:60px}main{padding-top:14px}.heading{margin-bottom:13px}.heading .eyebrow{display:none}.stats{gap:8px;margin-bottom:13px}.stat{padding:12px}.stat strong{font-size:21px;margin:5px 0}.stat small{display:none}.panel-head p{display:none}.month{min-height:58px;padding:7px;line-height:1.35}.months{gap:6px}.helper{line-height:1.4}}
