@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap');
:root{font-family:Manrope,'Noto Sans TC',system-ui,sans-serif;color:#283c36;background:#f6f7f3;font-synthesis:none;font-weight:400;--green:#173d36;--muted:#63736a;--line:#e9ede7;--lime:#e7edbb;--orange:#b07835}*{box-sizing:border-box}body{margin:0;font-size:1rem}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer;border:0;background:none;color:inherit;transition:background .16s,transform .16s}button:hover{filter:brightness(.96)}button:active{transform:translateY(1px)}:focus-visible{outline:3px solid #4a7a3c;outline-offset:2px;border-radius:4px}/* #abc67a 對白底只有 1.89:1，達不到 WCAG 2.2 SC 1.4.11 的 3:1；
   #4a7a3c 是 4.1:1。選擇器也不再綁 button/a —— 群組列是
   <article role="button" tabindex="0">，舊寫法根本套不到它。 */a{color:inherit;text-decoration:none}h1,h2,h3,p{margin-top:0}h1{font-size:2.25rem;letter-spacing:-1.1px;line-height:1.35;margin-bottom:12px}h2{font-size:1.1875rem;letter-spacing:-.3px;margin-bottom:18px}h3{font-size:1rem}p{line-height:1.9}small{font-size:0.8125rem}input,select,textarea{max-width:100%;padding:12px 13px;border:1px solid #dfe5de;border-radius:9px;background:#fff;color:#283c36;outline:0;width:100%;min-height:44px}input:focus,select:focus,textarea:focus{border-color:#769688;box-shadow:0 0 0 3px #76968818}input:disabled{background:#eceee9}label{display:flex;flex-direction:column;gap:8px;font-size:1rem;font-weight:600;margin-bottom:17px}label.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0)}.sidebar{width:246px;position:fixed;inset:0 auto 0 0;background:#fff;border-right:1px solid var(--line);padding:36px 22px;display:flex;flex-direction:column;z-index:10}.brand{font-size:1.6875rem;letter-spacing:-1px;font-weight:800;display:block;white-space:nowrap;color:var(--green)}.brand span{font-size:1.4375rem;font-weight:500;letter-spacing:-.8px;margin-left:5px}.sidebar select{font-size:1rem;background:#f7f8f4;border:1px solid #e8ede6;min-width:0}.group-actions{display:flex;justify-content:space-between;color:#7d8b82;font-size:0.8125rem;margin:12px 0 31px}.group-actions button{padding:5px}nav{display:grid;gap:8px}.nav{display:flex;align-items:center;gap:14px;text-align:left;padding:14px;border-radius:9px;color:#7e8a82;font-weight:500;font-size:1rem}.nav>span{font-size:1.4375rem;line-height:1;width:22px;text-align:center}.nav small{margin-left:auto;background:#e9eee5;padding:2px 6px;border-radius:5px;color:#6b7a6d}.nav.selected{background:#edf2e4;color:#294c39;font-weight:700}.side-bottom{margin-top:auto}.demo-note{font-size:0.8125rem;padding:16px 8px;color:#6f7b72}.demo-note small{display:block;font-size:0.8125rem;color:#63736a;margin:7px 0 0 14px}.dot,.status-dot{display:inline-block;width:6px;height:6px;background:#88a77d;border-radius:50%;margin-right:7px}.profile{padding-top:20px;border-top:1px solid var(--line);display:flex;align-items:center;gap:10px}.profile>div{min-width:0;flex:1}.profile b{font-size:1rem}.profile small{display:block;color:var(--muted);font-size:0.8125rem;overflow:hidden;text-overflow:ellipsis;margin-top:5px}.profile button{font-size:1.375rem}.main{margin-left:246px;padding:0 46px;max-width:1700px}.topbar{height:84px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #e4e9e1;font-size:0.8125rem;color:#77867c;letter-spacing:.3px}.topbar>div{display:flex;align-items:center;font-size:0.8125rem}.crumb{margin:0 14px;color:#63736a}.round{border:1px solid #e1e7dc;border-radius:50%;width:30px;height:30px;margin-left:20px;background:white;font-size:1.3125rem}.heading{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:40px 0 28px}.heading p{color:#889187;font-size:1rem;margin:0}.heading-actions{display:flex;gap:10px}.primary,.secondary{padding:13px 19px;border-radius:8px;font-size:0.8125rem;font-weight:700;white-space:nowrap;min-height:42px}.primary{background:var(--green);color:white}.secondary{background:#fff;border:1px solid #dfe5da;color:#4b6252}.stats{display:grid;grid-template-columns:1.08fr 1fr .95fr;gap:18px;margin-bottom:23px}.stat{background:#fff;padding:23px;border-radius:14px;border:1px solid var(--line);min-width:0;overflow:hidden}.stat>span{font-size:0.8125rem;color:#7a887c;display:flex;justify-content:space-between;align-items:center}.stat>span i{font-size:1.25rem;font-style:normal;color:#98ac86}.stat>strong{display:block;font-size:2.0625rem;font-weight:800;letter-spacing:-1.4px;margin:16px 0 17px;line-height:1.2;white-space:nowrap}.stat strong small{font-size:1rem;font-weight:500;letter-spacing:0}.stat>div{font-size:0.8125rem;color:#63736a;min-height:27px;display:flex;align-items:center;gap:6px}.stat>div>span{opacity:.75}.stat>div button{font-size:0.8125rem;margin-left:auto;color:#416146;padding:0}.stat.dark{background:var(--green);border-color:var(--green);position:relative}.stat.dark:after{content:'';position:absolute;border:1px solid #6b89754a;width:140px;height:140px;right:-66px;top:58px;border-radius:50%;box-shadow:0 0 0 25px #68886e18,0 0 0 51px #68886e12}.stat.dark>span{color:#bdcdc1}.stat.dark>strong{color:#fff}.stat.dark>div{color:#b9cabb}.green{color:#477258}.orange{color:#ac7546}.avatar{display:inline-flex;width:32px;height:32px;border-radius:50%;align-items:center;justify-content:center;background:#e5ecde;color:#657653;font-size:0.8125rem;font-weight:700;flex-shrink:0}.avatar-image img{width:100%;height:100%;object-fit:cover}.group-avatar{width:58px;height:58px;display:block;object-fit:cover;border-radius:16px;margin-bottom:14px}.profile-avatar-preview{width:72px;height:72px;object-fit:cover;border-radius:18px;display:block;border:1px solid var(--line)}.avatar-upload input[type=file]{padding:9px;background:#f7f8f4}.tone-1{background:#efdfd4;color:#9c7561}.tone-2{background:#dce8ed;color:#637d8c}.tone-3{background:#e7deed;color:#8c749d}.tone-4{background:#eee4ca;color:#8f8152}.avatar-stack{gap:0!important}.avatar-stack .avatar{border:2px solid #fff;margin-right:-9px;width:29px;height:29px;font-size:0.8125rem}.avatar-stack>span:last-child{margin-left:16px;font-size:0.8125rem;white-space:nowrap}.notice{display:flex;align-items:center;gap:12px;background:#f4f0e4;border:1px solid #eee7d3;padding:14px 19px;border-radius:10px;margin-bottom:28px;color:#94814c}.notice>span{font-size:1.625rem}.notice p{margin:0;line-height:1.5}.notice b{font-size:0.8125rem;font-weight:600}.notice small{display:block;font-size:0.8125rem;color:#7a6a45;margin-top:4px}.notice button{font-size:0.8125rem;margin-left:auto;white-space:nowrap}.overview-grid{display:grid;grid-template-columns:minmax(0,1.85fr) minmax(240px,1fr);gap:23px}.panel{border:1px solid var(--line);background:#fff;border-radius:13px;padding:23px;margin-bottom:24px;min-width:0}.panel-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:17px;gap:10px}.panel-title h2{margin:0}.panel-title h2 small{font-size:0.8125rem;letter-spacing:1.4px;font-weight:600;color:#63736a;margin-left:10px}.panel-title>button,.panel-title>span{font-size:0.8125rem;color:#63736a;white-space:nowrap}.expense-head{display:grid;grid-template-columns:minmax(150px,1.9fr) minmax(75px,1fr) minmax(113px,1.2fr) 8px;font-size:0.8125rem;color:#63736a;padding:12px 0;border-bottom:1px solid #eef0e9;gap:12px}.expense-head>span:nth-child(3){text-align:right}.expense-row{display:grid;grid-template-columns:minmax(150px,1.9fr) minmax(75px,1fr) minmax(113px,1.2fr) 8px;gap:12px;align-items:center;width:100%;border-bottom:1px solid #edf0e9;padding:19px 0;text-align:left}.expense-row:last-child{border:0}.expense-info{display:flex;align-items:center;gap:12px;min-width:0}.expense-info>span:last-child{min-width:0}.expense-info b{font-size:0.8125rem;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.expense-info small{font-size:0.8125rem;display:block;color:#63736a;margin-top:7px}.expense-info small span{margin:0 6px}.category-icon{width:36px;height:38px;display:flex;align-items:center;justify-content:center;border-radius:10px;background:#f4eee0;color:#b69857;font-size:1.4375rem;flex-shrink:0}.category-icon.purple{background:#ede7f3;color:#a594b2}.category-icon.blue{background:#e8eff0;color:#86a7ac}.payer{display:flex;align-items:center;gap:6px;font-size:0.8125rem;color:#8d9789;min-width:0}.payer .avatar{width:22px;height:22px;font-size:0.8125rem}.expense-money{text-align:right;min-width:0}.expense-money>b{font-size:1rem;font-weight:700}.expense-money>small{display:block;color:#63736a;font-size:0.8125rem;margin-top:7px;white-space:nowrap}.badge{display:inline-flex;align-items:center;font-size:0.8125rem;padding:3px 6px;line-height:1.3;border-radius:4px;background:#eff2e9;color:#4f6244;white-space:nowrap}.badge.pending{color:#7a5c1e;background:#f7f0dc}.badge.confirmed{color:#4f6244;background:#f0f4e9}.chevron{font-size:1.25rem;color:#63736a}.mini-icon{font-size:1.4375rem!important}.muted{color:#929d8c;font-size:0.8125rem;line-height:1.8}.small{font-size:0.8125rem}.settlement-preview .muted{margin-top:0;font-size:0.8125rem}.transfer{padding:17px 0;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px}.transfer:last-of-type{border-bottom:0}.transfer-people{display:flex;gap:10px;align-items:center;min-width:0}.transfer-people b{font-size:0.8125rem}.transfer-people b span{font-size:0.8125rem;color:#63736a;padding:0 5px}.transfer-people small{display:block;margin-top:7px;color:#8f9a85;font-size:0.8125rem}.wide{width:100%;margin-top:15px}.activity-preview{margin-top:0}.activity-row{display:flex;gap:14px;padding:13px 0;font-size:0.8125rem;color:#5b6a60}.activity-point{margin-top:4px;width:7px;height:7px;border-radius:50%;background:#b3c295;outline:4px solid #f1f4e9;flex-shrink:0}.activity-row b{font-size:0.8125rem;font-weight:600;color:#5f7359;margin-right:4px}.activity-row small{font-size:0.8125rem;display:block;color:#63736a;margin-top:6px}footer{display:flex;justify-content:space-between;border-top:1px solid var(--line);padding:23px 0 28px;font-size:0.8125rem;color:#63736a}footer span{font-weight:700;letter-spacing:1px}.filters{display:flex;gap:12px;padding-bottom:6px}.filters select{width:auto;font-size:0.8125rem}.search{flex:1;position:relative;margin:0}.search span{position:absolute;left:14px;top:12px;font-size:1.25rem;font-weight:400;color:#63736a}.search input{padding-left:39px;font-size:0.8125rem}.settle-grid,.settings-grid{display:grid;grid-template-columns:1.25fr 1fr;gap:24px}.balance-row,.member-row{display:flex;flex-wrap:wrap;row-gap:6px;align-items:center;gap:12px;padding:17px 0;border-bottom:1px solid var(--line)}.balance-row:last-child,.member-row:last-child{border:0}.balance-row b{font-size:1rem}.balance-row>span:last-child{margin-left:auto;font-size:1rem;font-weight:700}.member-row>div{flex:1 1 140px;min-width:0}/* flex:1 沒有基準寬度，同一列的徽章與「移除」鍵一擠就把它壓成 0px，
   姓名和 Email 直接溢出版面。給它 140px 的基準才不會被吃掉。 */
.member-row b{font-size:1rem}.member-row small{display:block;color:#63736a;font-size:0.8125rem;margin-top:5px;overflow:hidden;text-overflow:ellipsis}.repay-row{display:flex;align-items:center;justify-content:space-between;padding:18px 0;border-bottom:1px solid var(--line)}.repay-row b,.repay-row strong{font-size:1rem}.repay-row small{display:block;font-size:0.8125rem;color:#9aa58f;margin-top:7px}.rate-display{border-radius:10px;background:#f3f6ec;padding:20px;margin-bottom:15px}.rate-display>span{font-size:0.8125rem;letter-spacing:1px;color:#8b9a7c}.rate-display strong{font-size:2rem;display:block;margin:6px 0;color:#60764e}.rate-display small{color:#99a78a;font-size:0.8125rem}.button-row{display:flex;gap:10px;flex-wrap:wrap}.danger{color:#b16953}.small-button{padding:8px 12px;font-size:0.8125rem;min-height:35px}.empty{text-align:center;padding:30px;color:#a0ac96;font-size:1rem}.empty h3{margin:12px 0 8px;color:#819574}.empty p{margin:0}.empty-icon{font-size:2rem;color:#b4c291}.large{padding:120px 20px}.large .primary{margin-top:25px}.overlay{position:fixed;inset:0;background:#132b2266;z-index:50;display:flex;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(4px)}.modal{width:470px;max-width:100%;max-height:92dvh;background:#fafbf7;border:1px solid white;border-radius:18px;padding:28px;overflow-y:auto;box-shadow:0 24px 80px #17322530}.wide-modal{width:670px}.modal>header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:24px}.modal header h2{font-size:1.625rem;margin:0}.modal header button{font-size:1.6875rem;width:30px;height:30px;color:#99a18e}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}.span-2{grid-column:span 2}.form-note{padding:10px 12px;background:#eff3e7;border-radius:8px;font-size:0.8125rem;color:#4f6244;margin-bottom:16px;line-height:1.8}/* 原本 #7e926b on #eff3e7 = 3.00:1，13px 的內文要 4.5:1。#4f6244 是 4.9:1。 */
.form-note.error{color:#8c3a22;background:#fbeeea;border-left:3px solid #c0563a;padding-left:12px}/* 錯誤和提示本來長得一模一樣，使用者分不出「這只是說明」還是「這擋住你了」。 */
.check-label{display:flex;flex-direction:row;align-items:center;margin:0;font-size:1rem;font-weight:400;gap:8px}.check-label input[type=checkbox]{min-height:0;width:15px;height:15px;accent-color:#345942;padding:0}.split-list{border:1px solid var(--line);border-radius:9px;padding:0 12px;margin-bottom:12px}.split-row{display:flex;align-items:center;gap:12px;padding:9px 0;border-bottom:1px solid var(--line)}.split-row:last-child{border:0}.split-row>label{flex:1}.split-row>.check-label .avatar{height:24px;width:24px;font-size:0.8125rem}.split-row>input{width:80px;min-height:34px;padding:6px 8px;font-size:0.8125rem}.split-preview{font-size:0.8125rem;min-width:75px;text-align:right;color:#8d9d7c}.modal-actions{display:flex;align-items:center;justify-content:space-between;padding-top:17px;border-top:1px solid var(--line)}.modal-actions>button.danger{font-size:0.8125rem}.rate-rows>div{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:10px}.auth{min-height:100dvh;padding:35px;position:relative;background:radial-gradient(ellipse at 80% 40%,#e1e8cf 0,transparent 52%),#f6f7f0}.auth-card{max-width:390px;margin:70px auto}.auth-card h1{font-size:2.625rem;color:#2d4d39;line-height:1.45}.auth-card>p{font-size:1rem;color:#899a7b;margin:22px 0 35px}.auth-card form{margin-bottom:18px}.auth-card .primary{width:100%}.auth-card>small{font-size:0.8125rem;line-height:1.8;color:#9aa78c}.auth-card #verify{border-top:1px solid #dfe6d6;padding-top:20px}#toast{position:fixed;bottom:30px;left:50%;transform:translate(-50%,20px);background:#244639;color:#fff;padding:14px 22px;border-radius:10px;font-size:1rem;box-shadow:0 8px 35px #15352925;z-index:100;opacity:0;pointer-events:none;transition:.2s;max-width:90%;text-align:center}#toast.show{opacity:1;transform:translate(-50%,0)}.loading{text-align:center;margin:20vh 0;color:#7a8a6f}
@media(min-width:1500px){.main{padding:0 70px}.heading{padding-top:48px}.stat{padding:28px}.stat>strong{font-size:2.375rem}.expense-row{padding:23px 0}.overview-grid{grid-template-columns:1.8fr 1fr}.panel{padding:28px}.expense-info b{font-size:1rem}.expense-info small{font-size:0.8125rem}.expense-money>b{font-size:1rem}.payer{font-size:0.8125rem}}
@media(max-width:1180px){.stats{gap:12px}.stat{padding:19px}.stat>strong{font-size:1.75rem}.avatar-stack>span:last-child{display:none}.overview-grid{grid-template-columns:1fr}.heading-actions{gap:7px}.primary,.secondary{padding:12px 14px}.heading h1{font-size:2rem}}
@media(max-width:800px){.brand{font-size:1.5rem}.brand span{font-size:1.25rem}.heading{align-items:flex-start;flex-direction:column;padding:30px 0 24px}.heading-actions{width:100%;justify-content:flex-end}.stats{grid-template-columns:1fr 1fr}.stat:last-child{display:none}.stat>strong{font-size:1.625rem}.notice{padding:12px}.notice small{font-size:0.8125rem}.notice button{font-size:0.8125rem}.settle-grid,.settings-grid{grid-template-columns:1fr;gap:0}.filters{flex-wrap:wrap}.search{flex-basis:100%}.filters select{flex:1}.panel{padding:18px}.expense-head{grid-template-columns:1.3fr 100px 8px}.expense-head>span:nth-child(2){display:none}.expense-row{grid-template-columns:minmax(140px,1.3fr) 100px 8px;gap:8px}.expense-row>.payer{display:none}.panel-title h2 small{display:none}}
@media(max-width:600px){body{font-size:1rem}.sidebar{width:100%;height:auto;inset:auto 0 0;padding:0;background:#fff;border:0;border-top:1px solid #e4e9df;box-shadow:0 -6px 20px #273f2010;display:block}.sidebar>.brand,.side-label,.sidebar>select,.group-actions,.side-bottom{display:none}nav{display:flex;justify-content:space-around;gap:0;padding:9px 3px max(10px,env(safe-area-inset-bottom))}.nav{padding:5px 4px;display:flex;flex-direction:column;gap:6px;font-size:0.8125rem;width:19%;border-radius:7px}.nav>span{font-size:1.375rem}.nav>small{display:none}.nav.selected{background:transparent;color:#345734;font-weight:700}.main{margin-left:0;padding:0 20px 85px}.topbar{height:64px;font-size:0.8125rem}.topbar>span{max-width:75%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.crumb{margin:0 7px}.topbar>div{font-size:0}.round{margin-left:0;font-size:1.25rem}.status-dot{margin-right:10px}.heading{padding:27px 0 21px;gap:19px}.eyebrow{font-size:0.8125rem;letter-spacing:2px;margin-bottom:11px}.heading h1{font-size:1.9375rem;letter-spacing:-.8px;margin-bottom:8px}.heading p{font-size:0.8125rem}.heading-actions{justify-content:stretch;gap:10px}.heading-actions>button{flex:1;font-size:0.8125rem;min-height:42px}.stats{gap:10px;margin-bottom:18px}.stat{border-radius:11px;padding:16px 13px}.stat>span{font-size:0.8125rem}.stat>span i{font-size:1rem}.stat>strong{font-size:1.6875rem;letter-spacing:-1px;margin:18px 0 14px}.stat>strong small{font-size:0.8125rem}.stat>div{font-size:0.8125rem;min-height:22px;flex-wrap:wrap;gap:4px}.stat>div>span{display:none}.stat>div>button{font-size:0.8125rem;margin-left:0;display:block}.notice{gap:9px;margin-bottom:20px;padding:12px}.notice>span{font-size:1.5rem}.notice b{font-size:0.8125rem}.notice small{font-size:0.8125rem;max-width:210px}.notice>button{font-size:0.8125rem;max-width:54px;white-space:normal;line-height:1.7}.panel{padding:17px 15px;border-radius:11px;margin-bottom:18px}.panel-title{margin-bottom:10px}.panel-title h2{font-size:1rem}.panel-title button{font-size:0.8125rem}.expense-head{display:none}.expense-row{padding:15px 0;grid-template-columns:minmax(0,1fr) 105px 6px;gap:7px}.expense-info{gap:9px}.expense-info b{font-size:0.8125rem}.expense-info small{font-size:0.8125rem}.category-icon{width:31px;height:34px;font-size:1.3125rem;border-radius:8px}.expense-money>b{font-size:0.8125rem}.expense-money>small{font-size:0.8125rem}.badge{font-size:0.8125rem;padding:2px 4px}.expense-info small span{margin:0 4px}.overview-grid{gap:0}.activity-row{font-size:0.8125rem;padding:12px 0}.activity-row b{font-size:0.8125rem}.activity-preview{margin-bottom:18px}footer{font-size:0.8125rem;gap:10px;padding:15px 0}footer span{white-space:nowrap}.filters{gap:8px}.filters select{font-size:0.8125rem;padding:10px}.search input{font-size:0.8125rem}.overlay{padding:10px;align-items:flex-end}.modal{max-height:92dvh;width:100%;padding:23px 18px;border-radius:17px 17px 9px 9px}.modal>header{margin-bottom:19px}.modal header h2{font-size:1.5rem}.form-grid{gap:0 11px}.form-grid label{font-size:0.8125rem}.form-grid input,.form-grid select,.form-grid textarea{font-size:1rem;padding:10px}.modal .check-label{font-size:0.8125rem}.split-row{gap:7px}.split-row>input{width:59px}.split-preview{min-width:62px;font-size:0.8125rem}.auth{padding:25px}.auth-card{margin:60px auto}.auth-card h1{font-size:2.4375rem}.empty{padding:25px 10px}.button-row .secondary{font-size:0.8125rem}.large{padding:90px 10px}.settings-grid .panel:first-child .badge{font-size:0.8125rem}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
.settle-grid .panel-title h2 small{display:inline-flex;font-size:1rem;letter-spacing:0;padding:4px 8px;background:#edf2e4;color:#345734;border-radius:6px}
@media(max-width:600px){
  .main{padding-left:16px;padding-right:16px}
  .nav{font-size:0.8125rem;min-height:48px}
  .heading p,.muted,.small,.notice small,.notice b{font-size:1rem}
  .heading-actions>button,.primary,.secondary{font-size:1rem;min-height:44px}
  .stat>strong{font-size:clamp(20px,5.7vw,26px)}
  .stat>span,.stat>div,.stat>div>button,.stat strong small{font-size:0.8125rem}
  .panel-title h2{font-size:1rem}.panel-title>button,.panel-title>span{font-size:1rem}
  .expense-row{grid-template-columns:minmax(0,1fr) auto 6px;gap:8px}
  .expense-info b,.expense-money>b{font-size:1rem}.expense-info small{font-size:0.8125rem}
  .expense-money>small{font-size:0.8125rem}.badge{font-size:0.8125rem}
  .expense-money>small .badge{display:flex;justify-content:flex-end;width:max-content;margin:4px 0 0 auto}
  .category-icon{display:none}
  .transfer-people b,.balance-row b,.balance-row>span:last-child,.member-row b,.repay-row b,.repay-row strong{font-size:1rem}
  .transfer-people small,.member-row small,.repay-row small,.activity-row,.activity-row b{font-size:1rem}
  .activity-row small,.rate-display small{font-size:0.8125rem}
  .modal .form-grid{grid-template-columns:minmax(0,1fr)}.modal .span-2{grid-column:span 1}
  .modal label,.form-grid label,.modal .check-label{font-size:1rem}
  .modal input,.modal select,.modal textarea,.form-grid input,.form-grid select,.form-grid textarea{font-size:1rem;min-height:44px}
  .modal input[type=checkbox]{min-height:0;width:20px;height:20px}
  .split-row{flex-wrap:wrap}.split-row>input{width:80px}.split-preview{font-size:1rem;min-width:65px}
  .form-note{font-size:1rem}.modal .check-label .avatar{display:none}
  .search input,.filters select{font-size:1rem}.filters select{min-width:0}
  .rate-rows>div{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:8px}
}

/* Keep closing copy and nearby controls visually separated without making the
   interface feel loose. */
footer{display:flex;flex-direction:column;align-items:center;gap:8px;line-height:1.8;padding:30px 0 34px}
footer span{display:block;line-height:1.8}
.auth-card .auth-switch{margin-top:10px}
.auth-card #verify{margin-top:22px}
.auth-card #verify-target{margin-top:16px}
.modal-actions{margin-top:8px}
@media(max-width:600px){footer{gap:9px;padding:24px 0 30px}}
.mobile-group{display:none!important}@media(max-width:600px){.desktop-crumb{display:none}.mobile-group{display:flex!important;gap:5px;max-width:85%;min-width:0}.mobile-group select{font-size:1rem;border:0;background:transparent;padding:8px 4px;max-width:230px;min-width:0}.mobile-group button{font-size:1.1875rem;min-width:31px;height:34px;background:#fff;border:1px solid #e1e7db;border-radius:7px}.mobile-group+.topbar-status{font-size:0}}
.install-help{margin-top:18px;border-top:1px solid #dfe6d6;padding-top:15px;color:#7f8e7b;font-size:0.8125rem}.install-help summary{cursor:pointer;font-weight:700;color:#526a58}.install-help p{margin:10px 0 0;font-size:0.8125rem;line-height:1.8}
.friend-actions{display:flex;gap:6px;margin-left:auto}.friend-actions .small-button{margin:0;padding:7px 10px;min-height:34px}.primary:disabled,.secondary:disabled{cursor:not-allowed;opacity:.5}.empty-actions{display:flex;justify-content:center;gap:10px;margin-top:25px}.empty-actions .primary,.empty-actions .secondary{margin:0}.friend-modal-list{margin-top:20px;border-top:1px solid var(--line)}

.empty-actions{flex-wrap:wrap}.topbar>div:last-child{flex-shrink:0}@media(max-width:600px){.mobile-group{flex:1;max-width:calc(100% - 46px)}.mobile-group select{flex:1;width:0}.mobile-group button{flex-shrink:0}}

/* Brand and spacing polish */
.brand{font-size:0;display:flex;align-items:center;gap:9px}
.brand::before{content:'';display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:10px;background:#173d36 url('/tabi.png') center/cover no-repeat;flex:0 0 auto}
.brand span{font-size:1.4375rem;font-weight:500;letter-spacing:-.8px;margin-left:0}
.brand span::before{content:'旅伴 ';font-weight:800;color:var(--green)}
.profile>div{min-width:0;overflow:visible}
.profile small{white-space:nowrap;overflow:visible;text-overflow:clip}
.profile{gap:12px}
.profile button{flex:0 0 auto;padding:6px}
.heading-actions{gap:14px}
.panel-title{gap:16px}
.notice{gap:16px;padding:17px 21px}
.notice p{margin:0 8px 0 0}
.button-row{gap:14px}
.form-note{margin-top:10px}
.modal-actions{gap:18px}
@media (min-width:601px) and (max-width:1300px){.sidebar{width:248px;padding-left:24px;padding-right:18px}.main{margin-left:248px}.profile small{font-size:.75rem}}
@media (min-width:1301px){.sidebar{width:278px}.main{margin-left:278px}}
@media (max-width:600px){.brand::before{width:29px;height:29px;font-size:16px;border-radius:9px}.brand{gap:7px}.heading-actions{gap:12px}.panel-title{gap:12px}.notice{gap:12px;padding:15px}.button-row{gap:10px}}
.heading-actions [data-act="invite"],.heading-actions [data-act="add"]{padding:15px 24px;min-height:50px;font-size:1rem}
@media (max-width:600px){.heading-actions [data-act="invite"],.heading-actions [data-act="add"]{padding:12px 10px;min-height:48px;font-size:.9375rem}}
.stat>span{font-size:1.0625rem;font-weight:800;letter-spacing:.01em;color:#496152}
.stat.dark>span{color:#dbe8d0}
.stat>span i{font-size:1.35rem;font-weight:700}
@media (max-width:600px){.stat>span{font-size:1rem}.stat>span i{font-size:1.15rem}}
.auth-card #verify #verify-target{display:block;margin-top:13px;line-height:1.7}
.auth-card #verify button{margin-bottom:2px}
.auth-switch{display:block;margin:13px auto 0;padding:4px 8px;color:#4e6f59;font-size:.9375rem;font-weight:700;text-align:center}
.auth-switch:hover{text-decoration:underline}
.auth-card [hidden]{display:none!important}
.brand{line-height:1}
.brand span{line-height:1.2}
.nav>span{display:inline-flex;align-items:center;justify-content:center;line-height:1}
.stat>span{line-height:1.35}
.primary,.secondary,.round,.auth-switch{display:inline-flex;align-items:center;justify-content:center;line-height:1.25}
.auth-switch{display:block;width:max-content;max-width:100%}
#auth-status:empty{display:none}

/* Sidebar footer: give the connection state and profile controls a calmer,
   aligned treatment instead of letting them float against the page edge. */
.side-bottom{padding-top:18px}
.demo-note{display:flex;align-items:center;gap:8px;margin:0 0 14px;padding:10px 11px;border:1px solid #e5ebdf;border-radius:10px;background:#f7f9f4;color:#6f7f72}
.demo-note .dot{margin-right:0;flex:0 0 auto}
.demo-note small{display:none}
.profile{padding:15px 0 2px;gap:10px}
.profile button{width:32px;height:32px;padding:0;border:1px solid #e0e7dc;border-radius:9px;background:#f8faf6;display:inline-flex;align-items:center;justify-content:center;font-size:1.125rem;line-height:1}
.profile button:hover{background:#edf3e8}

/* Keep icon/text pairs on one visual baseline and give the account area room
   to breathe at the bottom of the sidebar. */
.side-bottom{padding-top:30px}
.profile{min-height:86px;padding:18px 0 6px;align-items:center;gap:13px}
.profile>div{display:flex;flex-direction:column;justify-content:center;gap:4px}
.group-actions,.group-actions button,.nav,.panel-title,.heading-actions,.transfer-people,.balance-row,.member-row,.repay-row,.button-row{align-items:center}
.group-actions{min-height:34px}
.group-actions button{display:inline-flex;gap:5px;line-height:1.3}
.nav>span{display:inline-flex;align-items:center;justify-content:center;height:24px}
.panel-title>button,.panel-title>span{display:inline-flex;align-items:center;min-height:28px}
.profile button{align-self:center}
.field-hint{display:block;color:#93a08e;font-size:.78rem;font-weight:400;line-height:1.6;margin-top:-2px}

/* Comfortable reading sizes with room for larger text. */
body{line-height:1.6}input,select,textarea{font-size:1rem}
.heading{flex-wrap:wrap}.heading-actions{flex-wrap:wrap}
.expense-info b{white-space:normal;overflow-wrap:anywhere;line-height:1.5}
.expense-money>small{white-space:normal;line-height:1.6}
.stat>strong{white-space:normal;overflow-wrap:anywhere;line-height:1.35}
.stat>div{flex-wrap:wrap}.panel-title{flex-wrap:wrap}
.transfer-people,.balance-row b,.repay-row>div{overflow-wrap:anywhere;min-width:0}
.split-row>label{min-width:0;overflow-wrap:anywhere}.split-row{flex-wrap:wrap}
.auth-card{max-width:440px}.auth-card>small,.install-help p{font-size:.875rem}
@media(min-width:601px){.sidebar{overflow-y:auto}.overview-grid{grid-template-columns:minmax(0,1.7fr) minmax(280px,1fr)}}
/* 原本這段在 1001–1250px 直接 display:none 掉「輕鬆結算」面板和第三張統計卡 ——
   筆電開一半視窗就看不到誰該付誰，而且完全沒有提示內容被藏起來了。
   改成讓格線自己折行:窄的時候排成兩行，不是把東西刪掉。 */
@media(min-width:601px) and (max-width:1250px){.overview-grid{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}.stats{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.settle-grid,.settings-grid{grid-template-columns:minmax(0,1fr)}}
@media(max-width:600px){
 .main{padding-bottom:110px}.nav{font-size:.8125rem;padding:6px 2px;line-height:1.5}
 .heading p,.muted,.small,.notice small,.notice b{font-size:.9375rem}
 .stat>strong{font-size:clamp(1.625rem,6.5vw,2rem)}
 .expense-info b,.expense-money>b{font-size:1rem}
 .expense-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 6px}
 .expense-money{overflow-wrap:anywhere}.expense-money>small .badge{width:auto;white-space:normal}
 .notice{flex-wrap:wrap}.notice p{flex:1;min-width:0}.notice small{max-width:none}.notice>button{max-width:none}
 .mobile-group select{font-size:1rem}.topbar>div:last-child{font-size:0}
 .mobile-group button{min-width:30px}.auth{padding:24px}.auth-card{margin:36px auto}
 .balance-row{flex-wrap:wrap}.friend-actions{flex-wrap:wrap}.transfer{flex-wrap:wrap}
}

/* Consistent controls without fixed label heights or clipped hints. */
[hidden]{display:none!important}
.modal #expense-form .form-grid>label{height:auto;min-height:0;min-width:0}
.modal input:not([type=checkbox]),.modal select,.date-picker>input{height:52px;min-height:52px;box-sizing:border-box}
.modal select{-webkit-appearance:none;appearance:none;padding:12px 36px 12px 14px;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='m4 6 4 4 4-4' fill='none' stroke='%23557062' stroke-width='2'/%3E%3C/svg%3E") no-repeat right 12px center/16px}
.modal textarea{height:auto;min-height:100px}
#estimate:empty,#split-error:empty,.form-note:empty{display:none!important}
.profile{display:grid;grid-template-columns:40px minmax(0,1fr) 40px;gap:12px;padding:20px 0}
.profile>.avatar{grid-column:1;grid-row:1}.profile>div{grid-column:2 / 4;grid-row:1}
.profile small{white-space:normal;overflow-wrap:anywhere;margin:3px 0 0}
.profile button{width:40px;height:40px}.profile [data-act=profile]{grid-column:2;justify-self:end}.profile [data-act=logout]{grid-column:3}
.avatar{overflow:hidden}.modal input[type=file]{height:auto;min-height:52px}
.date-picker{position:relative;width:100%;min-width:0}
.date-picker>input{padding-right:48px}
.date-toggle{position:absolute;right:4px;top:4px;width:44px;height:44px;font-size:24px;color:#496152}
.date-calendar{width:100%;margin-top:10px;padding:10px;border:1px solid #dfe5de;border-radius:12px;background:#fff;box-shadow:0 8px 20px #173d3612}
.calendar-heading{display:flex;align-items:center;justify-content:space-between;gap:4px;font-size:1rem}
.calendar-heading button{width:40px;height:44px;font-size:1.5rem}
.calendar-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));text-align:center;font-size:1rem;gap:2px}
.calendar-days>span{font-size:.8rem;padding:6px 0;color:#7d8b82}
.calendar-days>button{width:100%;aspect-ratio:1;min-height:32px;padding:0;border-radius:8px}
.calendar-days>button[aria-pressed=true]{background:#173d36;color:white}
.calendar-today{width:100%;min-height:40px;margin-top:8px;border-top:1px solid #e9ede7;color:#477258}
.modal{overscroll-behavior:contain}.modal-actions{padding-bottom:env(safe-area-inset-bottom)}
@media(max-width:600px){.date-calendar{padding:12px}.calendar-days>button{min-height:40px}.modal{padding-bottom:max(22px,env(safe-area-inset-bottom))}.auth-switch{min-height:44px}.mobile-group button{height:44px}}
.people-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin-bottom:24px}.person-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:22px}.person-main{display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:12px;align-items:center}.person-main h3{margin:0;font-size:1.1rem}.person-main small{display:block;color:#63736a;overflow-wrap:anywhere}.person-main strong{font-size:1.05rem}.person-breakdown{display:flex;flex-direction:column;gap:6px;margin:18px 0;padding:12px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.person-breakdown button{display:flex;justify-content:space-between;gap:12px;padding:7px 0;text-align:left;color:#617467}.person-breakdown button span{font-weight:700}.person-breakdown>span{color:#63736a}.person-card .button-row{justify-content:flex-end}.icon-button{width:34px;height:34px;border-radius:8px;margin-left:8px}.repay-row{gap:12px}.repay-row>div{flex:1}.people-stats{grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:900px){.people-grid{grid-template-columns:minmax(0,1fr)}}
@media(max-width:600px){.people-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.people-stats .stat:last-child{display:none}.person-card{padding:17px 15px}.person-main{grid-template-columns:40px minmax(0,1fr)}.person-main strong{grid-column:2}.person-card .button-row{flex-direction:column}.person-card .button-row button{width:100%}.nav{width:auto;flex:1}.sidebar nav{overflow-x:auto}.sidebar nav .nav{min-width:64px}}
.receipt-preview{display:block;max-width:100%;max-height:360px;object-fit:contain;border:1px solid var(--line);border-radius:12px;background:#f5f7f1}.notification-settings{display:grid;gap:10px;margin:18px 0;padding:15px;border:1px solid var(--line);border-radius:12px;background:#f8faf5}

/* ============ 版面修正 2026-09-19 ============ */

/* Icon 統一成 24×24 SVG。
   先前用 Unicode 符號當 icon（♧ ◫ ☷ ⇄ ◷ ⚙），量測發現各字符的墨跡在自己字框裡
   中心落差 3.07px、高度差近兩倍、寬度差 9.15px，而且來自系統 fallback 字型，
   在 Mac / Windows / Android 上長得都不一樣 —— 靠 align-items 無法校正。 */
.nav-icon{width:24px;height:24px;flex:0 0 24px;display:inline-flex;align-items:center;justify-content:center}
.nav-icon svg{width:22px;height:22px;display:block}
.nav em{font-style:normal}

/* 標題區：副標刪掉後只剩 h1，重新配置上下留白 */
.heading{padding:34px 0 26px}
.heading h1{margin:0;line-height:1.25}

@media(min-width:601px){
  /* 側欄節奏：原本 .side-label 的 margin:47px 0 14px 負責撐開品牌與下方內容，
     元素刪掉後間距跟著消失，改由 nav 與 group-actions 自己負責。 */
  .group-actions{margin:22px 0 0}
  .sidebar>nav{margin-top:30px}

  /* 左下帳號區：名稱與 Email 佔一欄，兩顆操作鍵成組靠右對齊頂端，
     不再被 flex:1 擠成兩顆浮在下面的小圖示。 */
  /* 後面有一條 .profile{display:grid;grid-template-columns:40px minmax(0,1fr) 40px} —— 那是為「一顆按鈕」設計的三欄格線，
     現在兩顆按鈕包成 .profile-actions 會擠爆第三欄，所以這裡明確改回 flex。 */
  .profile{display:flex;align-items:center;gap:12px;padding:18px 0 4px;grid-template-columns:none}
  /* 用 .profile>.profile-id (0,2,0) 壓過既有的 .profile>div (0,1,1)，
     後者把每個子 div 都設成 flex-direction:column，害兩顆按鈕上下疊。 */
  .profile>.profile-id{min-width:0;flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;gap:2px}
  .profile>.profile-id b{display:block;line-height:1.3}
  .profile>.profile-id small{margin-top:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .profile>.profile-actions{display:flex;flex-direction:row;align-items:center;gap:2px;flex:0 0 auto}
  .profile>.profile-actions button{width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;font-size:1.0625rem;line-height:1;color:#7e8a82}
  .profile>.profile-actions button:hover{background:#eef2e8;color:#294c39}
}

@media(max-width:600px){
  /* 6 個 tab × min-width 64px = 384px 超過 375px 視窗，第 6 個「成員與設定」被裁掉，
     且長標籤全部換行成兩行。改用短標籤並讓六格等分視窗寬度。 */
  .sidebar nav{overflow-x:visible}
  .sidebar nav .nav{min-width:0;flex:1 1 0;padding:6px 2px}
  .nav{gap:4px;line-height:1.35}
  .nav-icon{width:22px;height:22px;flex:0 0 22px}
  .nav-icon svg{width:21px;height:21px}
  .heading{padding:24px 0 20px}
}

/* 群組下拉從側欄與手機頂欄搬到「群組總覽」頁內 */
.group-picker{display:flex;align-items:center;gap:10px;margin:0 0 22px}
.group-picker label{font-size:.875rem;color:var(--muted);white-space:nowrap}
.group-picker select{flex:1;max-width:320px;min-width:0;font-size:1rem;padding:10px 12px;border-radius:9px;background:#f7f8f4;border:1px solid #e8ede6}
@media(max-width:600px){.group-picker{margin-bottom:18px}.group-picker select{max-width:none}}

/* ============ 四分頁重構 2026-09-20 ============ */

/* 常駐的新增消費按鈕。原本這顆在每頁 heading 裡，375px 下與「邀請旅伴」各佔一半、
   字級被壓到 .9375rem；而且朋友分頁（預設落地頁）根本沒有記帳入口。 */
.fab{position:fixed;right:18px;bottom:calc(84px + env(safe-area-inset-bottom));width:56px;height:56px;border-radius:50%;
 background:var(--green);color:#fff;font-size:1.75rem;line-height:1;display:flex;align-items:center;justify-content:center;
 box-shadow:0 6px 18px #173d3640;z-index:20;border:0}
.fab:hover{filter:brightness(1.12)}
@media(min-width:601px){.fab{right:32px;bottom:32px}}

/* 「整體來說…」單行 headline，取代原本三張統計卡 */
.headline{margin:0 0 20px}
.headline-line{font-size:1.125rem;margin:0 0 4px;color:#4a564d}
.headline-line b{font-size:1.3125rem}

/* 群組／朋友清單 */
.feed{display:flex;flex-direction:column;gap:12px}
.group-row{display:block;width:100%;text-align:left;background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px 18px;cursor:pointer}
.group-row:hover{border-color:#cfdac6}
.group-row-main{display:flex;align-items:center;gap:13px}
.group-row-name{flex:1;min-width:0}
.group-row-name b{display:block;font-size:1.0625rem;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.group-row-name small{color:var(--muted);font-size:.8125rem}
.group-row-net{font-weight:700;white-space:nowrap;font-variant-numeric:tabular-nums}
.group-row-detail{margin-top:12px;padding-left:14px;border-left:2px solid var(--line);display:flex;flex-direction:column;gap:5px}

/* 歸因句：誰在哪裡欠誰 */
.attribution{font-size:.9375rem;color:#6d7a70;line-height:1.5}
.attribution span{font-weight:600}

/* 群組詳情的分段 chip，取代原本的三個頂層分頁 */
.chips{display:flex;gap:8px;overflow-x:auto;padding:0 0 18px;-webkit-overflow-scrolling:touch}
.chip{flex:0 0 auto;padding:9px 16px;border-radius:999px;border:1px solid var(--line);background:#fff;color:#5d6b60;font-size:.9375rem;font-weight:600;white-space:nowrap}
.chip.selected{background:var(--green);border-color:var(--green);color:#fff}
.chip small{margin-left:6px;opacity:.75;font-size:.8125rem}

/* 「我的」分頁 */
.account-panel{padding:0;overflow:hidden;margin-bottom:14px}
.account-identity{display:flex;align-items:center;gap:13px;padding:18px}
.account-id{flex:1;min-width:0}
.account-id b{display:block;font-size:1.0625rem}
.account-id small{color:var(--muted);display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis}
.account-row{display:flex;width:100%;align-items:center;justify-content:space-between;padding:16px 18px;border:0;border-top:1px solid var(--line);background:none;font-size:1rem;color:#33413a;text-align:left}
.account-panel .account-row:first-child{border-top:0}
.account-row:hover{background:#f4f7f1}

/* 左下帳號區改為整塊可點，通往「我的」分頁 */
.side-bottom>.profile{width:100%;border:0;border-top:1px solid var(--line);background:none;cursor:pointer;text-align:left;border-radius:0}
.side-bottom>.profile:hover{background:#f4f7f1}
.side-bottom>.profile .profile-id{display:flex;flex-direction:column;justify-content:center;gap:2px;min-width:0;flex:1}
.side-bottom>.profile .chevron{color:var(--muted);flex:0 0 auto}
.profile-avatar-slot{flex:0 0 auto;display:flex}

/* 手機把側欄變成底部導覽列，.sidebar>.brand 隨之隱藏，頂欄因此完全沒有品牌識別 */
.mobile-brand{display:none}
@media(max-width:600px){
  .mobile-brand{display:inline-flex;align-items:center;font-size:1.125rem}
  .mobile-brand span{font-size:1rem}
  .mobile-brand::before{width:26px;height:26px;border-radius:8px}
  .desktop-crumb{display:none}
  .topbar{justify-content:space-between}
}

/* 手機頂欄改三欄格線，品牌置中；左側留白與右側狀態等寬，才不會被擠歪 */
@media(max-width:600px){
  .topbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center}
  .mobile-brand{grid-column:2;justify-self:center}
  .topbar>div:last-child{grid-column:3;justify-self:end}
}

/* 空狀態圖示改用與導覽列同一套 SVG，並給一個柔和的圓形容器；
   原本是 ♧ ✈ ☷ ◷ ✓ 等 Unicode 符號，大小與基線由系統字型決定，在不同裝置長得都不一樣。 */
.empty-icon{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:50%;background:#eef3e6;color:#7d9169;font-size:0;margin-bottom:4px}
.empty-icon svg{width:26px;height:26px}
.empty{padding:40px 20px}

/* 空狀態原本是一段浮在大片空白裡的文字，沒有邊界也沒有落點。
   給它一張卡片，並收斂上下留白。 */
.empty{background:#fff;border:1px solid var(--line);border-radius:16px;padding:44px 24px;color:#7c8a79}
.empty h3{color:#33413a;font-size:1.0625rem}
.empty p{line-height:1.9;font-size:.9375rem}
.empty.large{background:none;border:0}

/* 多人共同墊付 */
.inline-check{display:flex;flex-direction:row;align-items:center;gap:8px;font-size:.9375rem;color:#5d6b60}
.inline-check input{width:18px;height:18px;flex:0 0 auto;margin:0}
/* 餘額篩選 chip：比群組詳情的分段 chip 再低調一點 */
.filter-chips{padding-bottom:16px}
.filter-chips .chip{font-size:.875rem;padding:7px 14px}

/* ── 從稽核清單挑出的實質問題 2026-09-20 ── */

/* 金額被 overflow-wrap:anywhere 從數字中間斷行，「19,596.2 / 9」讀起來是錯的數字。
   改成縮字級而不是斷字，並用等寬數字對齊。 */
@media(max-width:600px){
  .stat>strong{font-size:clamp(1.125rem,5.4vw,2rem);overflow-wrap:normal;word-break:keep-all;font-variant-numeric:tabular-nums}
  .stat>strong small{white-space:nowrap}
}
@media(min-width:601px) and (max-width:1000px){.stat>strong{font-size:clamp(1.375rem,2.9vw,1.75rem);overflow-wrap:normal}}

/* 側欄在 601–1000px 仍佔 286px，內容區只剩不到 300px，金額被擠成三行。 */
@media (min-width:601px) and (max-width:1000px){
  .sidebar{width:212px;padding-left:16px;padding-right:14px}
  .main{margin-left:212px}
}

/* 觸控目標：稽核指出九個控制項低於 44px，其中包含刪除還款這種破壞性操作。 */
@media(max-width:600px){
  .chip,.account-row,.round,.group-actions button,.small-button,
  .friend-actions button,[data-remove-member],[data-delete-settlement]{min-height:44px}
  .round{min-width:44px}
}

/* 登入頁的狀態訊息沿用了已刪除的 .auth-card>p 樣式，對比只有 2.67:1。 */
#auth-status{margin:16px 0 0;font-size:.9375rem;line-height:1.7;color:#4e6b45}

/* 消費列：我的金額為主、群組總額為次 */
.expense-money b.muted{color:var(--muted);font-weight:500}
/* 次要資訊用 gap 分隔，徽章換行時不會留下懸空的「·」 */
.expense-money small{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px}

/* ③ 新增消費的動作列原本跟著內容捲動，手機上要捲約 1071px 才看得到「儲存」。
   釘在 modal 底部，隨時可按。 */
.modal-actions{position:sticky;bottom:0;background:#fafbf7;margin-left:-28px;margin-right:-28px;padding-left:28px;padding-right:28px;z-index:2}
@media(max-width:600px){
  .modal-actions{margin-left:-18px;margin-right:-18px;padding-left:18px;padding-right:18px}
}

/* ④ 還款列被注入的 ✎ 按鈕擠壓，文字欄在手機上只剩 126px，每列變三行。
   金額與按鈕改為不收縮，文字欄獨佔剩餘寬度；窄螢幕時金額換到第二行。 */
@media(max-width:600px){
  .repay-row{flex-wrap:wrap;row-gap:8px}
  .repay-row>div{flex:1 1 100%;min-width:0}
  .repay-row>strong{flex:0 0 auto;margin-left:auto;font-variant-numeric:tabular-nums}
  .repay-row>button{flex:0 0 auto}
}

/* ⑤ 登入頁：標題與第一個輸入框之間原本只剩 12px（說明段落刪掉後留下的），
   標題壓在表單上。補回節奏。 */
.auth-card h1{margin:0 0 26px}
.auth-card form label:first-child{margin-top:0}
/* 移除成員的前提條件寫在畫面上，不能只放在 disabled 按鈕的 title——手機沒有 hover */
.member-hint{display:block;flex:1 0 100%;margin-top:0;/* width:100% 在 flex 列裡是「跟別人搶空間的寬度」，flex-basis:100% 才會真的換行。 */font-size:.8125rem;color:var(--muted);text-align:right}

/* 空狀態被放在多欄格線（.people-grid / .feed）裡只佔一欄，右邊留下大片空白。
   讓它橫跨所有欄位。 */
.people-grid>.empty,.feed>.empty,.stats>.empty{grid-column:1/-1}
/* 釘在底部的動作列會蓋住表單最後幾列，補足底部留白讓內容捲得完 */
#expense-form>.form-grid{padding-bottom:8px}
.modal-actions{box-shadow:0 -8px 16px -8px rgba(23,61,54,.12)}
/* 墊付區沿用分攤的排版；容器只負責視覺分組 */
.payer-rows{padding:14px;background:#f7f9f4;border:1px solid var(--line);border-radius:12px;display:flex;flex-direction:column;gap:10px}
.payer-rows>label{margin:0}

/* 新增消費表單分區：13 個欄位原本在同一個扁平格線裡，看不出哪些是一組 */
.form-section{margin:0 0 22px}
.form-section>h3{font-size:.8125rem;font-weight:700;letter-spacing:.04em;color:#7d8b82;margin:0 0 12px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.form-section:last-of-type{margin-bottom:8px}

/* 釘底動作列原本停在 modal 的 padding 之上，底下露出一條縫看得到後面的內容。
   讓它一路貼到 modal 真正的下緣。 */
.modal{padding-bottom:0}
.modal-actions{margin-bottom:0;padding-bottom:max(22px,env(safe-area-inset-bottom));padding-top:16px}

/* 月份標頭：捲動時吸附在上緣，一長串日期看下來才分得出哪個月 */
.feed-month{position:sticky;top:0;z-index:1;background:#f6f7f2;padding:10px 0 8px;margin-top:6px;
 font-size:.8125rem;font-weight:700;color:#7d8b82;letter-spacing:.03em;border-bottom:1px solid var(--line)}

/* 結清預覽：全部結清會一次寫進好幾本帳，送出前必須先攤開來給人看，
   不然按下去只會冒出一堆看不懂的還款紀錄。 */
.settle-preview{margin:4px 0 18px;padding:14px 16px;background:#f6f8f1;border:1px solid var(--line);border-radius:12px}
.settle-preview-head{margin:0 0 10px;font-size:.8125rem;font-weight:700;color:var(--muted);letter-spacing:.02em}
.settle-preview-row{display:flex;justify-content:space-between;align-items:baseline;gap:14px;
 padding:7px 0;font-size:.9375rem;line-height:1.5;border-top:1px solid var(--line)}
.settle-preview-row:first-of-type{border-top:0}
.settle-preview-row>span{color:var(--muted);flex:0 1 auto;min-width:0;overflow-wrap:anywhere}
.settle-preview-row>b{flex:0 0 auto;text-align:right;font-variant-numeric:tabular-nums}
.settle-warn{margin:0;font-size:.875rem;line-height:1.6;color:var(--orange)}
@media(max-width:600px){
 .settle-preview{padding:12px 14px}
 .settle-preview-row{flex-direction:column;gap:2px}
 .settle-preview-row>b{text-align:left}
}

/* ── 2026-09-20 稽核修正 ────────────────────────────────────────────────
   這一批都是「量出來就錯」的，不是品味問題。 */

/* iPhone 瀏海／底部橫條。index.html 原本沒有 viewport-fit=cover，
   iOS 就把所有 env(safe-area-inset-*) 解析成 0，CSS 裡五處保留區的
   計算全部失效 —— 補了 meta 之後，這兩處也要跟著吃 inset，
   否則內容會壓在 home indicator 上。 */
@media(max-width:600px){
 .main{padding-bottom:calc(110px + env(safe-area-inset-bottom))}
 .overlay{padding:10px 10px max(10px,env(safe-area-inset-bottom))}
}

/* Toast 原本 bottom:30px，但手機底部導覽列高 76px（含 inset 可到 100px），
   提示訊息整個蓋在導覽列上、甚至壓到 home indicator。
   96px = 導覽列 76px + 20px 間距，同時也在 FAB 的 84px 之下，兩者不會撞。 */
@media(max-width:600px){
 #toast{bottom:calc(96px + env(safe-area-inset-bottom));max-width:calc(100% - 32px)}
}

/* .modal{padding-bottom:0} 是為了讓釘底動作列貼齊下緣，但底部留白只由
   .modal-actions 補回來 —— 而全 app 只有「新增消費」用了那個 class。
   其餘六個 modal（結清、還款、分享、匯率、邀請、編輯還款）的確認鍵
   離 modal 下緣只有 1px。這條給所有 modal 一個不依賴 .modal-actions 的底線。 */
.modal>form:last-child,
.modal>:last-child:not(.modal-actions){padding-bottom:max(22px,env(safe-area-inset-bottom))}

/* 「輕鬆結算」原本在 1250px 以下全部藏起來。改成只有手機藏 ——
   手機維持原行為，平板與筆電拿回這塊內容。 */
@media(max-width:600px){.settlement-preview{display:none}}

/* 群組名和金額擠在同一列，375px 下名字欄只剩 97px、320px 下只剩 42px，
   「2026 東京大阪京都十日自由行」會被截到剩一兩個字。
   手機上把金額移到第二行，名字就拿得到整個寬度（最多兩行）。 */
@media(max-width:600px){
 .group-row-main{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-areas:'av name' 'av meta';column-gap:13px;row-gap:4px;align-items:start}
 .group-row-main>.group-avatar{grid-area:av;align-self:center}
 .group-row-name{grid-area:name}
 .group-row-name b{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
 .group-row-net{grid-area:meta;justify-self:start}
}

/* 通知分類:總開關關著時停用而不是隱藏 —— 直接藏起來的話，使用者會以為
   自己設過的分類偏好不見了。 */
.settings-subhead{margin:0 0 10px;font-size:.8125rem;font-weight:700;color:var(--muted);letter-spacing:.03em}
.notify-kinds{margin:2px 0 0 22px;padding-left:12px;border-left:2px solid var(--line);
 display:flex;flex-direction:column;gap:2px}
.notify-kinds.disabled{opacity:.45}
.notify-kinds.disabled .check-label{cursor:not-allowed}
.notification-settings .field-hint{display:block;margin:2px 0 14px 26px}
.notification-settings .notify-kinds+.field-hint{margin-left:34px}

/* 新增消費 modal 在 1440×900 下量起來是 670×828，但 scrollHeight 1808 ——
   有 982px 在摺線下，比一整個 modal 還高，而左右各空著 385px。

   試過兩條路都沒用，記下來免得之後有人再試一次:
   (1) 把每個區段內部的欄位從兩欄改三欄 —— 高度一點都沒少。每個區段中間
       都有整行的欄位(消費名稱、備註、收據)，把列切斷，增加欄數救不了。
   (2) 用 CSS order 重排區段讓窄的湊在一起 —— 視覺順序會和 tab 焦點順序
       不一致，表單最不該出現這種事。

   有效的是讓「相鄰」的區段並排，順序不動:
   這筆是什麼(376)＋誰付的(144) 並排 → 376
   金額(247)＋怎麼分(450) 並排      → 450
   其他(321) 獨佔一行
   1538px 變成約 1147px。 */
@media(min-width:1001px){
 .wide-modal{width:min(940px,92vw)}
 #expense-form{display:grid;grid-template-columns:1fr 1fr;gap:0 26px;align-items:start}
 #expense-form>.modal-actions{grid-column:1/-1}
}

/* 危險區域:「刪除群組」原本夾在「分享邀請連結」和「從好友加入群組」兩顆
   日常按鈕中間，三顆等寬按鈕連在一起，手滑就按到；而「離開群組」又在
   另一個 panel 的底部，要找哪一個都得先猜。兩個出口收在一起放最後，
   並各自講清楚後果。
   .danger 原本只改文字顏色(#b16953)，底色邊框跟 .secondary 一模一樣，
   看起來跟普通按鈕沒兩樣 —— 這裡給它真正的視覺層級。 */
.danger-zone{border-color:#e8cfc5;background:#fdf8f6}
.danger-zone h2{color:#8c3a22}
.danger-item{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;
 padding:14px 0;border-top:1px solid #f0ded6}
.danger-item:first-of-type{border-top:0}
.danger-item>div{flex:1 1 220px;min-width:0}
.danger-item b{display:block;font-size:1rem;margin-bottom:3px}
.danger-item small{display:block;color:var(--muted);font-size:.8125rem;line-height:1.7}
.danger-item>button{flex:0 0 auto}
.danger.secondary{border-color:#e0bfb3;background:#fdf6f3}
.danger.secondary:hover{background:#fbeae4;border-color:#d4a493}
@media(max-width:600px){
 .danger-item{flex-direction:column;align-items:stretch}
 .danger-item>button{width:100%}
}

/* 退款在流水裡要一眼分得出來，不然「一蘭拉麵 4200」和「一蘭拉麵退款 4200」
   長得一模一樣，對帳時只能靠記憶。 */
.category-icon.refund{background:#e8f1e4;color:#3f6b38}

/* 統計頁。六張卡片 + 每人分攤的橫條。
   「我花了多少」和「我還欠多少」是兩回事 —— 兩個人可能都已經結清，
   但一個花了三萬、一個花了三千。總覽只有後者，這裡補上前者。 */
.totals-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:23px}
.total-card{background:#fff;border:1px solid var(--line);border-radius:13px;padding:18px 20px;min-width:0}
.total-card>span{display:block;font-size:.8125rem;color:var(--muted);margin-bottom:7px}
.total-card>b{display:block;font-size:1.5rem;line-height:1.2;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.total-card>small{display:block;margin-top:6px;font-size:.75rem;color:var(--muted)}
/* 名字給 1fr、橫條給 2fr 的話，窄一點的容器就把名字壓到 47px，五個名字全部溢出。
   名字是主體，橫條只是輔助 —— 權重反過來，並給名字一個下限。 */
.totals-row{display:grid;grid-template-columns:minmax(120px,1.6fr) minmax(48px,1fr) auto;gap:14px;align-items:center;
 padding:11px 0;border-top:1px solid var(--line)}
.totals-row:first-of-type{border-top:0}
.totals-name{display:flex;align-items:center;gap:9px;min-width:0;overflow-wrap:anywhere}
.totals-row>b{font-variant-numeric:tabular-nums;white-space:nowrap}
.totals-bar{display:block;height:8px;background:var(--line);border-radius:5px;overflow:hidden}
.totals-bar>i{display:block;height:100%;background:var(--green);border-radius:5px}
@media(max-width:600px){
 .totals-grid{grid-template-columns:1fr 1fr;gap:10px}
 .total-card{padding:14px}
 .total-card>b{font-size:1.25rem}
 /* 橫條在窄螢幕擠掉名字，直接拿掉 —— 數字本身才是重點。 */
 .totals-row{grid-template-columns:minmax(0,1fr) auto}
 .totals-bar{display:none}
}
.totals-lede{margin:-6px 0 18px}
