:root{--paper:#f5f2ea;--white:#fffefb;--ink:#293b35;--muted:#8b9184;--line:#e7e4da;--green:#385e50;--green-light:#e8eee7;--red:#ac5b4e;--gold:#a28954;--serif:'Noto Serif SC','Songti SC','SimSun',serif;--sans:'Microsoft YaHei','PingFang SC',system-ui,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:14px;line-height:1.6}button,input,select,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{opacity:.5;cursor:wait}[hidden]{display:none!important}a{color:inherit;text-decoration:none}button{color:inherit}h1,h2,h3,p{margin:0}h1,h2,h3{font-family:var(--serif);font-weight:600}h1{font-size:30px;letter-spacing:2px}h2{font-size:21px}h3{font-size:17px}.muted{color:var(--muted)}.eyebrow{display:block;font-size:10px;letter-spacing:3px;color:var(--gold);margin-bottom:9px}.app-shell{display:flex;min-height:100vh}.sidebar{width:230px;position:fixed;inset:0 auto 0 0;background:#eceee5;border-right:1px solid #dfe2d7;padding:38px 22px;display:flex;flex-direction:column;z-index:10}.brand{display:flex;align-items:center;gap:12px;font-family:var(--serif);font-size:22px;font-weight:600;letter-spacing:2px}.brand small{display:block;font:8px var(--sans);letter-spacing:0;margin-top:4px;color:var(--muted)}.brand-mark,.seal{display:grid;place-items:center;background:var(--green);color:#fbf7eb;font-family:var(--serif);border:1px solid #839085;outline:3px solid var(--green);font-size:25px;width:40px;height:44px;border-radius:2px}.side-caption{margin:54px 16px 14px;font-size:11px;color:#8c9585;letter-spacing:2px}.nav-item{width:100%;border:0;background:transparent;display:flex;gap:15px;align-items:center;padding:14px 16px;margin:5px 0;text-align:left;border-radius:5px;color:#778274}.nav-item>span{font-size:20px;width:21px;line-height:1}.nav-item.active{background:var(--green);color:white;box-shadow:0 3px 9px #283f3314}.nav-item:hover:not(.active){background:#e1e5d9}.side-bottom{margin-top:auto}.side-poem{font-family:var(--serif);font-size:12px;letter-spacing:2px;color:#929b89;margin:25px 0}.profile{display:flex;gap:10px;border-top:1px solid #d8dfd0;padding-top:20px;align-items:center}.avatar{display:grid;place-items:center;width:35px;height:35px;background:#dbe1d2;border-radius:50%;font-family:var(--serif);color:var(--green)}.profile strong{font-size:12px;max-width:106px;overflow:hidden;display:block;text-overflow:ellipsis}.profile small{display:block;font-size:10px;color:var(--muted)}.profile .icon-button{margin-left:auto}main{margin-left:230px;flex:1;min-width:0}.topbar{height:70px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 42px;font-size:12px}.breadcrumbs{color:#9a9c90}.breadcrumbs span{margin-left:12px}.breadcrumbs span:last-child{color:var(--ink)}.local-badge{font-size:10px;color:#788474;letter-spacing:.5px}.local-badge i{display:inline-block;width:5px;height:5px;background:#769874;border-radius:50%;margin-right:5px}#content{max-width:1440px;margin:auto;padding:32px 42px 20px}.page-heading{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:25px}.page-heading p{color:var(--muted);font-size:12px;margin-top:7px}.heading-actions{display:flex;align-items:center;gap:10px}.btn{border:1px solid var(--line);background:var(--white);padding:10px 16px;border-radius:4px;font-size:12px;display:inline-flex;gap:8px;align-items:center;justify-content:center;white-space:nowrap}.btn:hover{filter:brightness(.97)}.btn.primary{background:var(--green);color:white;border-color:var(--green)}.btn.danger{color:var(--red);border-color:#e7cfc9;background:#fcf5f1}.btn.small{padding:6px 11px;font-size:11px}.btn.ghost{background:transparent}.full{width:100%}.icon-button{background:none;border:0;font-size:22px;color:var(--muted);padding:2px 6px;line-height:1.3}.cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:24px}.metric{position:relative;border:1px solid var(--line);border-radius:6px;background:var(--white);padding:21px 22px;overflow:hidden;min-height:132px}.metric.featured{background:var(--green);color:#fff;border-color:var(--green)}.metric-label{font-size:12px;color:#8b9387;display:flex;align-items:center;justify-content:space-between}.metric-label>span:last-child{font-family:var(--serif);font-size:16px;color:#aeb5a5}.metric.featured .metric-label{color:#c3d1bf}.metric-value{margin:11px 0 5px;font-family:Georgia,var(--sans);font-size:29px;line-height:1.1;letter-spacing:.3px;font-variant-numeric:tabular-nums}.metric-value small{font-size:11px;font-family:var(--sans);margin-left:6px;color:#8b9387}.metric.featured small{color:#bfcfbe}.metric-note{font-size:10px;color:var(--muted)}.metric.featured .metric-note{color:#c3d1bf}.metric .watermark{position:absolute;right:12px;bottom:0;font:85px var(--serif);opacity:.05}.panel{background:var(--white);border:1px solid var(--line);border-radius:6px;margin-bottom:22px;overflow:hidden}.panel-heading{padding:21px 24px;display:flex;align-items:center;justify-content:space-between;gap:12px}.panel-heading p{font-size:11px;color:var(--muted);margin-top:4px}.section-title{display:flex;gap:9px;align-items:center}.section-title:before{content:'';display:block;width:3px;height:16px;background:var(--green);border-radius:1px}.panel-tools{display:flex;gap:10px;align-items:center}.week-control{display:flex;gap:12px;align-items:center;font-size:11px;white-space:nowrap}.week-control button{background:transparent;border:1px solid var(--line);width:25px;height:25px;border-radius:3px}.week-control .current-week{width:auto;padding:0 7px}.progress-scroll{overflow-x:auto}.progress-table{width:100%;border-collapse:collapse;table-layout:fixed;min-width:620px}.progress-table th{background:#f8f8f2;font-size:11px;font-weight:400;color:#7e8979;text-align:center;padding:14px 10px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.progress-table th:first-child{width:170px;text-align:left;padding-left:24px}.progress-table th small{font-size:9px;display:block;color:#a3a798;margin-top:3px}.progress-table td{padding:18px 10px;border-bottom:1px solid #efede6;text-align:center}.progress-table tr:last-child td{border-bottom:0}.progress-table td:first-child{text-align:left;padding-left:24px}.character-cell{display:flex;gap:10px;align-items:center}.char-symbol{background:#edf0e5;width:34px;height:34px;flex-shrink:0;display:grid;place-items:center;border:1px solid #dde3d5;border-radius:50%;color:#6c8064;font-family:var(--serif);font-size:14px}.char-name{font-size:12px;font-weight:600;overflow-wrap:anywhere}.char-sub{font-size:10px;color:var(--muted);margin-top:2px}.raid-cell{border:1px dashed #e4e3d8;background:#fcfbf7;padding:12px 5px;width:100%;max-width:165px;border-radius:5px;color:#a2a696;min-height:66px;font-size:11px}.raid-cell:hover{border-color:#a3b39c;background:#f3f5ec}.raid-cell.done{border:1px solid #dfe7d9;background:#edf3e9;color:var(--green)}.raid-cell.done strong{display:block;font:17px Georgia,var(--sans);margin-top:2px}.raid-cell.done small{font-size:9px;color:#8b9a81}.raid-cell .plus{font-size:16px;margin-right:4px}.panel-bottom{border-top:1px solid var(--line);padding:12px 24px;display:flex;justify-content:space-between;align-items:center;font-size:10px;color:var(--muted)}.legend-dot{width:6px;height:6px;display:inline-block;border-radius:50%;background:#819a72;margin-right:5px}.link-button,.text-button{background:none;border:0;color:var(--green);font-size:12px;padding:0;cursor:pointer}.legend{display:flex;gap:15px}.ledger-table{width:100%;border-collapse:collapse}.ledger-table th{text-align:left;background:#f8f8f2;border-block:1px solid var(--line);padding:12px 20px;font-size:10px;color:#8b9383;font-weight:400;white-space:nowrap}.ledger-table td{padding:16px 20px;border-bottom:1px solid #efede6;font-size:12px}.ledger-table td:last-child{white-space:nowrap}.ledger-table tr:last-child td{border-bottom:0}.ledger-table tbody tr:hover{background:#fafaf4}.entry-title{display:flex;align-items:center;gap:11px}.entry-icon{width:32px;height:32px;display:grid;place-items:center;border-radius:5px;color:#6b8860;background:#edf2e7;font-size:17px}.entry-icon.expense{color:var(--red);background:#f7ece5}.entry-title small{display:block;color:var(--muted);font-size:10px;margin-top:3px}.money{font-family:Georgia,var(--sans);font-variant-numeric:tabular-nums;font-size:15px;font-weight:500;white-space:nowrap}.income{color:var(--green)}.expense{color:var(--red)}.tag{background:#f0f0e7;color:#7b856d;padding:3px 7px;border-radius:3px;font-size:10px}.table-wrap{overflow:auto}.empty{padding:40px 20px;text-align:center;color:var(--muted)}.empty-symbol{display:block;font:35px var(--serif);margin-bottom:12px;color:#a9b29c}.empty p{font-size:12px;margin:8px 0 18px}.filters{display:flex;gap:12px;flex-wrap:wrap;padding:0 24px 20px;align-items:end}.filters label{font-size:10px;flex:1;min-width:120px;margin:0}.filters input,.filters select{margin-top:5px;padding:8px 10px}.filters .search-filter{flex:2}input,select,textarea{border:1px solid #dedfd3;background:#fffefb;color:var(--ink);border-radius:4px;padding:11px 12px;width:100%;outline:none;min-width:0}input:focus,select:focus,textarea:focus{border-color:#7f9974;box-shadow:0 0 0 3px #81957812}textarea{resize:vertical;min-height:75px}label{display:block;font-size:12px;color:#6e7c68;margin-bottom:17px}label input,label select,label textarea{display:block;margin-top:7px}label small,.field-hint{font-size:10px;color:var(--muted);display:block;margin-top:5px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-actions{display:flex;gap:10px;justify-content:flex-end;border-top:1px solid var(--line);padding-top:18px;margin-top:20px}.form-note{background:#f3f5ed;color:#7e8a72;border-radius:4px;padding:10px 12px;font-size:11px;margin-bottom:18px}.error{color:var(--red);font-size:12px;margin:8px 0;min-height:8px}.details{border:1px solid var(--line);border-radius:4px;padding:12px 14px;margin-bottom:16px}.details summary{cursor:pointer;font-size:12px;color:var(--green)}.details[open] summary{margin-bottom:15px}.details label:last-child{margin-bottom:0}dialog{border:1px solid var(--line);border-radius:9px;box-shadow:0 20px 100px #24382c30;padding:26px;background:var(--white);color:var(--ink);width:min(540px,calc(100vw - 32px));max-height:90dvh;overflow:auto}dialog::backdrop{background:#23332960;backdrop-filter:blur(3px)}.modal-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:22px}.modal-top .eyebrow{font-size:9px}.run-total{display:flex;justify-content:space-between;padding:15px;background:#edf2e8;border-radius:4px;margin-bottom:15px;align-items:center}.run-total strong{font:25px Georgia,var(--sans)}.run-entries{max-height:300px;overflow:auto}.run-entry{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid var(--line)}.run-entry small{display:block;color:var(--muted);font-size:10px}.run-entry-actions{display:flex;gap:10px;align-items:center}.settings-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:22px}.panel-body{padding:0 24px 24px}.character-list-item{display:flex;justify-content:space-between;gap:15px;padding:15px 0;border-bottom:1px solid var(--line)}.character-list-item:last-child{border:0}.settings-note{font-size:11px;color:var(--muted);line-height:1.9}.rate-preview{font:27px Georgia,var(--sans);padding:15px 0;color:var(--green)}.rule{display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--line);gap:15px;font-size:12px}.rule:last-child{border:0}.rule span:last-child{color:var(--muted);font-size:11px}.stats-grid{display:grid;grid-template-columns:1.5fr 1fr;gap:22px}.chart{height:230px;display:flex;align-items:flex-end;gap:12px;padding:25px 24px 0}.chart-column{flex:1;text-align:center;min-width:0}.bar-wrap{height:145px;display:flex;align-items:flex-end;justify-content:center;gap:4px}.bar{width:18px;background:#698365;min-height:2px;border-radius:3px 3px 0 0}.bar.red{background:#c39784}.chart-label{font-size:9px;color:var(--muted);padding-top:12px}.chart-value{font-size:9px;color:#79876d;margin-bottom:5px}.rank{margin:0 24px 20px}.rank-row{margin:20px 0}.rank-info{display:flex;justify-content:space-between;font-size:12px;margin-bottom:8px}.rank-track{height:5px;background:#eeeee5;border-radius:3px;overflow:hidden}.rank-fill{height:100%;background:#7f9573;border-radius:3px}.ranking-sub{font-size:10px;color:var(--muted);margin-top:5px}footer{padding:22px 42px 30px;color:#a8aa9b;font-size:10px;max-width:1440px;margin:auto}footer>span{margin:0 8px}.footer-right{float:right}#toast{position:fixed;bottom:32px;left:50%;transform:translateX(-50%);background:#2f4e40;color:white;box-shadow:0 6px 25px #213a3033;padding:12px 23px;border-radius:5px;z-index:100;font-size:12px;max-width:90vw}.auth-shell{min-height:100vh;display:grid;grid-template-columns:1fr 1fr}.auth-art{position:relative;overflow:hidden;background:#e6eadf;padding:9vh 10%;display:flex;flex-direction:column;align-items:flex-start}.auth-art .seal{margin-bottom:65px}.auth-art h1{font-size:42px;line-height:1.9;letter-spacing:6px;position:relative;z-index:1}.auth-art>p{margin-top:22px;color:#83917b;font-size:12px;letter-spacing:1px}.auth-foot{margin-top:auto;padding-top:80px;font-size:10px;letter-spacing:3px;color:#8f9d86}.auth-mountains{position:absolute;inset:auto -20% -30% -30%;height:65%;background:linear-gradient(150deg,#a7b69a33,#c8d1bb55);clip-path:polygon(0 35%,20% 55%,40% 10%,53% 40%,65% 22%,100% 65%,100% 100%,0 100%)}.auth-panel{display:grid;place-items:center;padding:40px}.auth-form{width:100%;max-width:340px}.auth-form h2{font-size:28px;margin-bottom:10px}.auth-form>p{font-size:12px;margin-bottom:30px}.auth-form form{margin-top:32px}.auth-form .text-button{margin:22px auto;display:block}.auth-form .local-note{margin:40px 0 0;text-align:center;font-size:10px;color:#9da48f}.auth-form .btn{justify-content:space-between;padding:13px 16px}.mobile-only{display:none}.view-select{width:auto;padding:7px 10px;font-size:11px}.notice{padding:12px 16px;background:#eeeee2;color:#828b73;font-size:11px;border-radius:4px;margin-bottom:20px}
@media(min-width:1500px){#content{padding-top:40px}.metric{padding:26px}.metric-value{font-size:34px}}
@media(max-width:1100px){.sidebar{width:200px;padding:30px 18px}.brand{font-size:19px}main{margin-left:200px}#content{padding:25px}.topbar{padding:0 25px}.metric{padding:17px}.metric-value{font-size:25px}.cards{gap:10px}.settings-grid,.stats-grid{grid-template-columns:1fr}.panel-heading{padding:18px}.progress-table th:first-child{width:140px}footer{padding:20px 25px}.page-heading{align-items:flex-start}.heading-actions{flex-wrap:wrap;justify-content:flex-end}}
@media(max-width:740px){.sidebar{width:100%;height:62px;inset:auto 0 0;padding:0;background:#fffefbf5;border-right:0;border-top:1px solid var(--line);backdrop-filter:blur(8px)}.brand,.side-caption,.side-bottom{display:none}#nav{display:flex;height:100%;justify-content:space-around}.nav-item{width:25%;margin:0;padding:8px 0;gap:3px;flex-direction:column;justify-content:center;font-size:10px;border-radius:0}.nav-item>span{font-size:19px;text-align:center}.nav-item.active{background:transparent;color:var(--green);box-shadow:none;font-weight:600}.nav-item:not(.active){color:#9b9f90}main{margin-left:0;padding-bottom:70px}.topbar{height:52px;padding:0 18px}.breadcrumbs{font-size:10px}.local-badge{font-size:9px}#content{padding:24px 16px 10px}h1{font-size:25px}.page-heading{gap:10px;align-items:center;margin-bottom:20px}.page-heading p{font-size:10px;max-width:240px}.heading-actions{gap:6px}.heading-actions .btn{padding:8px 10px;font-size:10px}.heading-actions .desktop-only{display:none}.eyebrow{font-size:8px;letter-spacing:2px}.cards{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:18px}.metric{min-height:114px;padding:16px}.metric-label{font-size:10px}.metric-value{font-size:27px;margin-top:10px}.metric-note{font-size:9px}.panel-heading{padding:16px;align-items:flex-start}.panel-heading h3{font-size:15px}.panel-heading p{font-size:9px}.panel-tools{flex-direction:column;gap:5px;align-items:flex-end}.week-control{font-size:9px;gap:7px}.panel-bottom{padding:12px 16px;gap:10px}.legend{gap:8px}.panel-bottom .muted{display:none}.progress-table{min-width:0;table-layout:auto}.progress-table thead{display:none}.progress-table tbody{display:block}.progress-table tr{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:15px 16px;border-top:1px solid var(--line)}.progress-table td{border:0;padding:0!important;min-width:0}.progress-table td:first-child{grid-column:1/-1;padding-bottom:4px!important}.raid-cell{max-width:none;min-height:76px;padding:9px 5px}.raid-cell .mobile-only{display:block;font-size:9px;margin-bottom:3px;color:#89997e}.raid-cell.done strong{font-size:16px}.mobile-only{display:initial}.ledger-table th,.ledger-table td{padding:12px 14px}.ledger-table .hide-mobile{display:none}.ledger-table td{font-size:11px}.entry-title{gap:8px}.entry-title small{font-size:9px}.money{font-size:14px}.tag{font-size:9px}.entry-icon{width:27px;height:29px;font-size:15px}.filters{padding:0 16px 16px;gap:9px}.filters label{min-width:100px}.filters .search-filter{flex-basis:100%}.settings-grid,.stats-grid{gap:0}.panel-body{padding:0 16px 18px}.settings-note{font-size:10px}.form-row{gap:10px}dialog{padding:22px 18px;max-height:92dvh}.modal-top h2{font-size:20px}.form-actions{flex-wrap:wrap}.form-actions .btn{flex:1}.auth-shell{grid-template-columns:1fr}.auth-art{padding:30px 25px;min-height:210px}.auth-art .seal{width:28px;height:31px;font-size:20px;margin-bottom:20px}.auth-art h1{font-size:25px;line-height:1.5;letter-spacing:3px}.auth-art h1 br{display:none}.auth-art .eyebrow{display:none}.auth-art>p{margin-top:10px;font-size:10px}.auth-foot{display:none}.auth-panel{padding:30px 25px}.auth-form h2{font-size:23px}.auth-form form{margin-top:24px}.auth-form .local-note{margin-top:20px}.auth-form>p{margin-bottom:15px}footer{padding:10px 16px 20px;font-size:9px}.footer-right{display:none}.chart{padding-inline:16px;gap:8px}.bar{width:13px}#toast{bottom:84px}.rule{font-size:11px}}
.admin-users{min-width:640px}.admin-entries{min-width:840px}.admin-entries td{vertical-align:top}.admin-note{font-size:11px;white-space:pre-wrap;overflow-wrap:anywhere;max-width:360px;margin-top:5px;color:var(--muted)}.admin-users td:first-child{overflow-wrap:anywhere;max-width:250px}#admin-records{scroll-margin-top:20px}
@media(max-width:740px){.nav-item{flex:1}#admin-view .page-heading{flex-wrap:wrap}#admin-view .heading-actions{justify-content:flex-start}#admin-view .filters label{min-width:130px}.admin-entries td,.admin-users td{font-size:11px}}
