/* 溫暖高級配色：象牙白底、濃縮咖啡文字、香檳金／古銅點綴（文字對比皆符合 WCAG AA） */
@font-face{font-family:"YD Serif TC";src:url("fonts/NotoSerifTC-Bold-subset.woff2") format("woff2");font-weight:700;font-display:swap}
:root{
  --bg:#FAF6F0; --surface:#FFFDF9; --surface-2:#F5EEE3; --line:#E8DDCC; --line-2:#D9C9B0;
  --ink:#3B2A20; --ink-soft:#6B5646; --grey:#7A6655;
  --gold:#8C6A35; --gold-dark:#73572B; --gold-light:#D9B77E; --gold-tint:#F4EAD8;
  --ok:#5A7356; --bad:#A64B36; --warn:#9A6118; --plum:#76506F; --all:#4A3B32;
  --err-bg:#F6DDD5; --warn-bg:#FBEBC8;
  --shadow:0 1px 2px rgba(59,42,32,.06),0 6px 20px rgba(59,42,32,.06);
  --serif:"YD Serif TC","Noto Serif TC","Noto Serif CJK TC","Source Han Serif TC","PMingLiU",serif;
  --sans:"Noto Sans TC","Noto Sans CJK TC","PingFang TC","Microsoft JhengHei",sans-serif;
}
*{box-sizing:border-box}
body{margin:0;font-family:var(--sans);background:var(--bg);color:var(--ink);font-size:16px;line-height:1.7;letter-spacing:.02em}
.wrap{max-width:1200px;margin:0 auto;padding:0 28px}
a{color:var(--gold-dark)}
.top{background:linear-gradient(135deg,#3B2A20 0%,#5A4030 100%);color:#F3E9DA;padding:28px 0 24px;border-bottom:3px solid var(--gold-light)}
.top h1{margin:0;font-family:var(--serif);font-weight:700;font-size:30px;letter-spacing:.08em;color:#FFF8EC}
.top .sub{margin:6px 0 0;color:var(--gold-light);font-size:15px;letter-spacing:.05em}
.privacy{background:var(--gold-tint);border:1px solid var(--line-2);border-left:4px solid var(--gold);border-radius:12px;padding:12px 18px;margin:24px 0 18px;color:var(--ink-soft)}
.privacy strong{color:var(--ink)}
.toolbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:6px}
.badge-sample{background:var(--warn-bg);border:1px solid #E6C98E;color:#6E4510;border-radius:20px;padding:3px 14px;font-weight:bold;font-size:14px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);padding:26px 30px;margin:22px 0}
.card h2{margin:0 0 16px;font-family:var(--serif);font-weight:700;font-size:23px;letter-spacing:.06em;display:flex;align-items:center;gap:12px;color:var(--ink)}
.num{display:inline-flex;width:34px;height:34px;border-radius:50%;background:var(--gold);color:#fff;align-items:center;justify-content:center;font-size:17px;font-family:var(--serif);box-shadow:0 0 0 3px var(--gold-tint)}
.drop{display:flex;align-items:center;gap:16px;border:2px dashed var(--line-2);border-radius:14px;padding:22px;cursor:pointer;background:var(--bg);transition:.2s}
.drop:hover,.drop.over{background:var(--gold-tint);border-color:var(--gold)}
.drop-icon{font-size:34px}
.btn{font:inherit;border:1px solid var(--line-2);background:var(--surface);color:var(--ink);border-radius:10px;padding:8px 18px;cursor:pointer;transition:.15s}
.btn:hover{background:var(--surface-2);border-color:var(--gold-light)}
.btn.primary{background:var(--gold);color:#fff;border-color:var(--gold);font-size:17px;padding:11px 26px;letter-spacing:.05em;box-shadow:0 2px 8px rgba(140,106,53,.25)}
.btn.primary:hover{background:var(--gold-dark)}
.btn.small{padding:3px 12px;font-size:14px}
.muted{color:var(--grey);font-size:14px}
.table-wrap{overflow-x:auto;margin-top:12px;border-radius:12px;border:1px solid var(--line)}
table.grid{border-collapse:collapse;width:100%;font-size:14px;background:var(--surface)}
.grid th{background:var(--surface-2);color:var(--ink-soft);font-weight:600;text-align:left;padding:9px 10px;white-space:nowrap;border-bottom:1px solid var(--line-2);position:sticky;top:0}
.grid td{border-bottom:1px solid var(--line);padding:3px 5px;vertical-align:middle}
.grid tbody tr:hover td{background:#FBF7F0}
.grid td.ro{padding:8px 10px;white-space:nowrap}
.grid input.cell{font:inherit;color:var(--ink);width:auto;border:1px solid transparent;background:transparent;padding:4px 6px;border-radius:6px}
.grid input.cell:hover{border-color:var(--line-2)}
.grid input.cell:focus{border-color:var(--gold);background:#fff;outline:none;box-shadow:0 0 0 3px var(--gold-tint)}
.grid td.err input{background:var(--err-bg)}.grid td.warn input{background:var(--warn-bg)}
.grid.small td{padding:5px 10px}
.chip{display:inline-block;padding:0 7px;border-radius:5px;font-size:13px;color:var(--ink)}.chip.err{background:var(--err-bg)}.chip.warn{background:var(--warn-bg)}
.row-actions{display:flex;gap:14px;align-items:center;margin-top:12px;flex-wrap:wrap}
.icon-btn{border:none;background:none;cursor:pointer;font-size:15px;padding:2px 4px}
.issues{font-size:13px;color:var(--bad);min-width:200px;white-space:normal!important}
.map-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;margin:10px 0}
.map-grid label{display:flex;flex-direction:column;font-size:14px;color:var(--ink-soft);gap:3px}
select,.num-input{font:inherit;color:var(--ink);padding:6px 10px;border:1px solid var(--line-2);border-radius:8px;background:var(--surface)}
select:focus,.num-input:focus{outline:none;border-color:var(--gold);box-shadow:0 0 0 3px var(--gold-tint)}
.num-input{width:90px}
input[type=checkbox]{accent-color:var(--gold);width:16px;height:16px;vertical-align:-2px}
details summary{cursor:pointer;color:var(--ink-soft)}
.fee-box{background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:12px 18px;display:flex;gap:20px;flex-wrap:wrap;align-items:center}
.fee-detail{width:100%;display:flex;gap:12px;flex-wrap:wrap}.fee-detail label{font-size:14px}
.fee-detail input{width:80px}
.summary{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:14px;margin:20px 0}
.stat{border-radius:14px;padding:14px 18px;color:#fff;cursor:pointer;border:3px solid transparent;box-shadow:var(--shadow);transition:transform .15s}
.stat:hover{transform:translateY(-2px)}
.stat.active{border-color:var(--gold-light);box-shadow:0 0 0 2px var(--ink)}
.stat .n{font-size:32px;font-weight:bold;line-height:1.1;font-family:var(--serif)}.stat .t{font-size:15px;letter-spacing:.05em}
.s-all{background:var(--all)}.s-paid{background:var(--ok)}.s-unpaid{background:var(--bad)}.s-amount{background:var(--warn)}.s-orphan{background:var(--plum)}
.tag{display:inline-block;color:#fff;border-radius:14px;padding:1px 11px;font-size:13px;white-space:nowrap}
.filters{display:none}
.export{margin-top:22px;display:flex;gap:14px;align-items:center}
.foot{margin:24px 0 48px;border-top:1px solid var(--line);padding-top:14px}.foot a{margin-right:8px}
.modal{position:fixed;inset:0;background:rgba(59,42,32,.45);display:flex;align-items:center;justify-content:center;z-index:9}
.modal[hidden]{display:none}
.modal-box{background:var(--surface);border-radius:16px;max-width:800px;width:92%;max-height:85vh;overflow:auto;padding:22px;position:relative}
.modal-box h3{font-family:var(--serif);margin-top:0}
.modal-box pre{white-space:pre-wrap;font-size:13px;background:var(--surface-2);padding:12px;border-radius:10px}
.modal-x{position:absolute;right:14px;top:12px;border:none;background:none;font-size:20px;cursor:pointer;color:var(--ink-soft)}
.empty{color:var(--grey);text-align:center;padding:22px}
.fee-detail[hidden],#mapBox[hidden]{display:none}
